@@ -31,6 +31,7 @@ public sealed class DependencyManager : IDisposable
31
31
private readonly IDotNet dotnet ;
32
32
private readonly FileContent fileContent ;
33
33
private readonly TemporaryDirectory packageDirectory ;
34
+ private readonly TemporaryDirectory missingPackageDirectory ;
34
35
private readonly TemporaryDirectory tempWorkingDirectory ;
35
36
private readonly bool cleanupTempWorkingDirectory ;
36
37
@@ -51,6 +52,8 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
51
52
this . sourceDir = new DirectoryInfo ( srcDir ) ;
52
53
53
54
packageDirectory = new TemporaryDirectory ( ComputeTempDirectory ( sourceDir . FullName ) ) ;
55
+ missingPackageDirectory = new TemporaryDirectory ( ComputeTempDirectory ( sourceDir . FullName , "missingpackages" ) ) ;
56
+
54
57
tempWorkingDirectory = new TemporaryDirectory ( FileUtils . GetTemporaryWorkingDirectory ( out cleanupTempWorkingDirectory ) ) ;
55
58
56
59
try
@@ -106,7 +109,7 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
106
109
107
110
// TODO: Rename the dllDirNames var - it's not only dirs anymore.
108
111
dllDirNames . AddRange ( paths ) ;
109
- DownloadMissingPackages ( allNonBinaryFiles ) ;
112
+ DownloadMissingPackages ( allNonBinaryFiles , dllDirNames ) ;
110
113
}
111
114
112
115
// Find DLLs in the .Net / Asp.Net Framework
@@ -429,15 +432,15 @@ private IEnumerable<FileInfo> GetAllFiles()
429
432
/// with this source tree. Use a SHA1 of the directory name.
430
433
/// </summary>
431
434
/// <returns>The full path of the temp directory.</returns>
432
- private static string ComputeTempDirectory ( string srcDir )
435
+ private static string ComputeTempDirectory ( string srcDir , string packages = "packages" )
433
436
{
434
437
var bytes = Encoding . Unicode . GetBytes ( srcDir ) ;
435
438
var sha = SHA1 . HashData ( bytes ) ;
436
439
var sb = new StringBuilder ( ) ;
437
440
foreach ( var b in sha . Take ( 8 ) )
438
441
sb . AppendFormat ( "{0:x2}" , b ) ;
439
442
440
- return Path . Combine ( Path . GetTempPath ( ) , "GitHub" , " packages" , sb . ToString ( ) ) ;
443
+ return Path . Combine ( Path . GetTempPath ( ) , "GitHub" , packages , sb . ToString ( ) ) ;
441
444
}
442
445
443
446
/// <summary>
@@ -660,7 +663,7 @@ private void RestoreProjects(IEnumerable<string> projects, out IEnumerable<strin
660
663
assets = assetFiles ;
661
664
}
662
665
663
- private void DownloadMissingPackages ( List < FileInfo > allFiles )
666
+ private void DownloadMissingPackages ( List < FileInfo > allFiles , List < string > dllDirNames )
664
667
{
665
668
var nugetConfigs = allFiles . SelectFileNamesByName ( "nuget.config" ) . ToArray ( ) ;
666
669
string ? nugetConfig = null ;
@@ -701,13 +704,15 @@ private void DownloadMissingPackages(List<FileInfo> allFiles)
701
704
return ;
702
705
}
703
706
704
- success = RestoreProject ( tempDir . DirInfo . FullName , forceDotnetRefAssemblyFetching : false , out var _ , pathToNugetConfig : nugetConfig ) ;
707
+ dotnet . RestoreProjectToDirectory ( tempDir . DirInfo . FullName , missingPackageDirectory . DirInfo . FullName , forceDotnetRefAssemblyFetching : false , out var _ , pathToNugetConfig : nugetConfig ) ;
705
708
// TODO: the restore might fail, we could retry with a prerelease (*-* instead of *) version of the package.
706
709
if ( ! success )
707
710
{
708
711
progressMonitor . FailedToRestoreNugetPackage ( package ) ;
709
712
}
710
713
} ) ;
714
+
715
+ dllDirNames . Add ( missingPackageDirectory . DirInfo . FullName ) ;
711
716
}
712
717
713
718
private void AnalyseSolutions ( IEnumerable < string > solutions )
@@ -732,6 +737,7 @@ public void Dispose()
732
737
try
733
738
{
734
739
packageDirectory ? . Dispose ( ) ;
740
+ missingPackageDirectory ? . Dispose ( ) ;
735
741
}
736
742
catch ( Exception exc )
737
743
{
0 commit comments