public static FrameworkedHintPath ReconstructHintPath( string assemblyFilePath, PackageIdentity oldPackageIdentity, PackageReference newestPackage, Reference reference ) { var parts = assemblyFilePath.Split( Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar ).ToList(); var newFramework = parts.Select( NuGetFramework.Parse ).FirstOrDefault( f => !f.IsUnsupported ); var hintParts = reference.HintPath.Split( Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar ).ToList(); var oldFramework = hintParts.Select( NuGetFramework.Parse ).FirstOrDefault( f => !f.IsUnsupported ); List<string> resultPath = new List<string>(); for ( int i = hintParts.Count - 1; i >= 0; i-- ) { if ( hintParts[i].StartsWith( "$" ) ) { resultPath.Add( hintParts[i] ); } else if ( hintParts[i].Equals( oldPackageIdentity.ToFolderName() ) ) { resultPath.Add( newestPackage.ToFolderName() ); } else if ( oldFramework != null && newFramework != null && hintParts[i].Equals( oldFramework.GetShortFolderName(), StringComparison.OrdinalIgnoreCase ) ) { resultPath.Add( newFramework.GetShortFolderName() ); } else { resultPath.Add( hintParts[i] ); } } resultPath.Reverse(); return new FrameworkedHintPath { Framework = newFramework, HintPath = Path.Combine( resultPath.ToArray() ) }; }