@@ -350,10 +350,19 @@ private void RestoreProjects(IEnumerable<string> projects, out ConcurrentBag<Dep
350350 }
351351
352352 logger . LogInfo ( $ "Found { notYetDownloadedPackages . Count } packages that are not yet restored") ;
353- using var tempDir = new TemporaryDirectory ( ComputeTempDirectoryPath ( "nugetconfig" ) , "generated nuget config" , logger ) ;
354- var nugetConfig = fallbackNugetFeeds is null
355- ? GetNugetConfig ( )
356- : CreateFallbackNugetConfig ( fallbackNugetFeeds , tempDir . DirInfo . FullName ) ;
353+
354+ IEnumerable < string > feeds = [ ] ;
355+ if ( fallbackNugetFeeds is not null )
356+ {
357+ feeds = fallbackNugetFeeds ;
358+ }
359+ else if ( GetNugetConfig ( ) is string config )
360+ {
361+ var configFeeds = feedManager . GetFeedsFromNugetConfig ( config ) ;
362+ feeds = feedManager . FeedsToUseFromConfig ( config ) ;
363+ }
364+
365+ var nugetSources = feedManager . FeedsToDotnetRestoreArgument ( feeds ) ;
357366
358367 compilationInfoContainer . CompilationInfos . Add ( ( "Fallback nuget restore" , notYetDownloadedPackages . Count . ToString ( ) ) ) ;
359368
@@ -362,7 +371,7 @@ private void RestoreProjects(IEnumerable<string> projects, out ConcurrentBag<Dep
362371
363372 Parallel . ForEach ( notYetDownloadedPackages , new ParallelOptions { MaxDegreeOfParallelism = DependencyManager . Threads } , package =>
364373 {
365- var success = TryRestorePackageManually ( package . Name , nugetConfig , package . PackageReferenceSource , tryWithoutNugetConfig : fallbackNugetFeeds is null ) ;
374+ var success = TryRestorePackageManually ( package . Name , nugetSources , package . PackageReferenceSource , tryWithoutNugetConfig : fallbackNugetFeeds is null ) ;
366375 if ( ! success )
367376 {
368377 return ;
@@ -379,27 +388,6 @@ private void RestoreProjects(IEnumerable<string> projects, out ConcurrentBag<Dep
379388 return missingPackageDirectory . DirInfo . FullName ;
380389 }
381390
382- private string ? CreateFallbackNugetConfig ( IEnumerable < string > fallbackNugetFeeds , string folderPath )
383- {
384- var sb = new StringBuilder ( ) ;
385- fallbackNugetFeeds . ForEach ( ( feed , index ) => sb . AppendLine ( $ "<add key=\" feed{ index } \" value=\" { feed } \" />") ) ;
386-
387- var nugetConfigPath = Path . Join ( folderPath , "nuget.config" ) ;
388- logger . LogInfo ( $ "Creating fallback nuget.config file { nugetConfigPath } .") ;
389- File . WriteAllText ( nugetConfigPath ,
390- $ """
391- <?xml version="1.0" encoding="utf-8"?>
392- <configuration>
393- <packageSources>
394- <clear />
395- { sb }
396- </packageSources>
397- </configuration>
398- """ ) ;
399-
400- return nugetConfigPath ;
401- }
402-
403391 private string ? GetNugetConfig ( )
404392 {
405393 var nugetConfigs = fileProvider . NugetConfigs ;
@@ -415,6 +403,7 @@ private void RestoreProjects(IEnumerable<string> projects, out ConcurrentBag<Dep
415403 }
416404 else
417405 {
406+ // TODO: This could cause non-deterministic behaviror, if the first config file is different between runs.
418407 nugetConfig = nugetConfigs . FirstOrDefault ( ) ;
419408 }
420409
@@ -489,7 +478,7 @@ private static IEnumerable<string> GetRestoredPackageDirectoryNames(DirectoryInf
489478 . Select ( d => Path . GetFileName ( d ) . ToLowerInvariant ( ) ) ;
490479 }
491480
492- private bool TryRestorePackageManually ( string package , string ? nugetConfig = null , PackageReferenceSource packageReferenceSource = PackageReferenceSource . SdkCsProj ,
481+ private bool TryRestorePackageManually ( string package , string ? nugetSources = null , PackageReferenceSource packageReferenceSource = PackageReferenceSource . SdkCsProj ,
493482 bool tryWithoutNugetConfig = true , bool tryPrereleaseVersion = true )
494483 {
495484 logger . LogInfo ( $ "Restoring package { package } ...") ;
@@ -512,17 +501,17 @@ private bool TryRestorePackageManually(string package, string? nugetConfig = nul
512501 return false ;
513502 }
514503
515- var res = TryRestorePackageManually ( package , nugetConfig , tempDir , tryPrereleaseVersion ) ;
504+ var res = TryRestorePackageManually ( package , nugetSources , tempDir , tryPrereleaseVersion ) ;
516505 if ( res . Success )
517506 {
518507 return true ;
519508 }
520509
521- if ( tryWithoutNugetConfig && res . HasNugetPackageSourceError && nugetConfig is not null )
510+ if ( tryWithoutNugetConfig && res . HasNugetPackageSourceError && nugetSources is not null && ! feedManager . CheckNugetFeedResponsiveness )
522511 {
523512 logger . LogDebug ( $ "Trying to restore '{ package } ' without nuget.config.") ;
524513 // Restore could not be completed because the listed source is unavailable. Try without the nuget.config:
525- res = TryRestorePackageManually ( package , nugetConfig : null , tempDir , tryPrereleaseVersion ) ;
514+ res = TryRestorePackageManually ( package , nugetSources : null , tempDir , tryPrereleaseVersion ) ;
526515 if ( res . Success )
527516 {
528517 return true ;
@@ -533,16 +522,16 @@ private bool TryRestorePackageManually(string package, string? nugetConfig = nul
533522 return false ;
534523 }
535524
536- private RestoreResult TryRestorePackageManually ( string package , string ? nugetConfig , TemporaryDirectory tempDir , bool tryPrereleaseVersion )
525+ private RestoreResult TryRestorePackageManually ( string package , string ? nugetSources , TemporaryDirectory tempDir , bool tryPrereleaseVersion )
537526 {
538- var res = dotnet . Restore ( new ( tempDir . DirInfo . FullName , missingPackageDirectory . DirInfo . FullName , ForceDotnetRefAssemblyFetching : false , PathToNugetConfig : nugetConfig , ForceReevaluation : true ) ) ;
527+ var res = dotnet . Restore ( new ( tempDir . DirInfo . FullName , missingPackageDirectory . DirInfo . FullName , ForceDotnetRefAssemblyFetching : false , NugetSources : nugetSources , ForceReevaluation : true ) ) ;
539528
540529 if ( ! res . Success && tryPrereleaseVersion && res . HasNugetNoStablePackageVersionError )
541530 {
542531 logger . LogDebug ( $ "Failed to restore nuget package { package } because no stable version was found.") ;
543532 TryChangePackageVersion ( tempDir . DirInfo , "*-*" ) ;
544533
545- res = dotnet . Restore ( new ( tempDir . DirInfo . FullName , missingPackageDirectory . DirInfo . FullName , ForceDotnetRefAssemblyFetching : false , PathToNugetConfig : nugetConfig , ForceReevaluation : true ) ) ;
534+ res = dotnet . Restore ( new ( tempDir . DirInfo . FullName , missingPackageDirectory . DirInfo . FullName , ForceDotnetRefAssemblyFetching : false , NugetSources : nugetSources , ForceReevaluation : true ) ) ;
546535 if ( ! res . Success )
547536 {
548537 TryChangePackageVersion ( tempDir . DirInfo , "*" ) ;
0 commit comments