@@ -22,6 +22,7 @@ internal interface IPackagesConfigRestore : IDisposable
2222
2323 /// <summary>
2424 /// Factory for creating a package manager to restore NuGet packages referenced in packages.config files.
25+ /// If the environment doesn't support using nuget.exe to restore packages from packages.config files, a no-op implementation is returned.
2526 /// It is worth noting that for MacOS and Linux, nuget.exe is used with mono. However, mono is being deprecated and the last images to contain
2627 /// mono are
2728 /// - Ubuntu 22.04
@@ -35,7 +36,12 @@ internal class PackagesConfigRestoreFactory
3536 {
3637 public static IPackagesConfigRestore Create ( FileProvider fileProvider , DependencyDirectory packageDirectory , Semmle . Util . Logging . ILogger logger , Func < bool > useDefaultFeed )
3738 {
38- return new NugetExeWrapper ( fileProvider , packageDirectory , logger , useDefaultFeed ) ;
39+ if ( SystemBuildActions . Instance . IsWindows ( ) || SystemBuildActions . Instance . IsMonoInstalled ( ) )
40+ {
41+ return new NugetExeWrapper ( fileProvider , packageDirectory , logger , useDefaultFeed ) ;
42+ }
43+
44+ return new NoOpPackagesConfig ( fileProvider , logger ) ;
3945 }
4046
4147 /// <summary>
@@ -334,5 +340,30 @@ public void Dispose()
334340 }
335341 }
336342 }
343+
344+ private class NoOpPackagesConfig : IPackagesConfigRestore
345+ {
346+ private readonly Semmle . Util . Logging . ILogger logger ;
347+ private readonly FileProvider fileProvider ;
348+
349+ public NoOpPackagesConfig ( FileProvider fileProvider , Semmle . Util . Logging . ILogger logger )
350+ {
351+ this . fileProvider = fileProvider ;
352+ this . logger = logger ;
353+ }
354+
355+ public int PackageCount => fileProvider . PackagesConfigs . Count ;
356+
357+ public int InstallPackages ( )
358+ {
359+ if ( PackageCount > 0 )
360+ {
361+ logger . LogInfo ( "Found packages.config files, but nuget.exe cannot be used to restore packages on this platform. Skipping restore of packages.config files." ) ;
362+ }
363+ return 0 ;
364+ }
365+
366+ public void Dispose ( ) { }
367+ }
337368 }
338369}
0 commit comments