@@ -99,15 +99,22 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
9999
100100 var existsNetCoreRefNugetPackage = false ;
101101 var existsNetFrameworkRefNugetPackage = false ;
102+ var existsNetstandardLibRefNugetPackage = false ;
103+ var existsNetstandardLibNugetPackage = false ;
102104
103105 // Find DLLs in the .Net / Asp.Net Framework
104106 // This block needs to come after the nuget restore, because the nuget restore might fetch the .NET Core/Framework reference assemblies.
105107 if ( options . ScanNetFrameworkDlls )
106108 {
107109 existsNetCoreRefNugetPackage = IsNugetPackageAvailable ( "microsoft.netcore.app.ref" ) ;
108110 existsNetFrameworkRefNugetPackage = IsNugetPackageAvailable ( "microsoft.netframework.referenceassemblies" ) ;
111+ existsNetstandardLibRefNugetPackage = IsNugetPackageAvailable ( "netstandard.library.ref" ) ;
112+ existsNetstandardLibNugetPackage = IsNugetPackageAvailable ( "netstandard.library" ) ;
109113
110- if ( existsNetCoreRefNugetPackage || existsNetFrameworkRefNugetPackage )
114+ if ( existsNetCoreRefNugetPackage
115+ || existsNetFrameworkRefNugetPackage
116+ || existsNetstandardLibRefNugetPackage
117+ || existsNetstandardLibNugetPackage )
111118 {
112119 progressMonitor . LogInfo ( "Found .NET Core/Framework DLLs in NuGet packages. Not adding installation directory." ) ;
113120 }
@@ -125,7 +132,7 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
125132 UseReference ( filename ) ;
126133 }
127134
128- RemoveUnnecessaryNugetPackages ( existsNetCoreRefNugetPackage , existsNetFrameworkRefNugetPackage ) ;
135+ RemoveUnnecessaryNugetPackages ( existsNetCoreRefNugetPackage , existsNetFrameworkRefNugetPackage , existsNetstandardLibRefNugetPackage , existsNetstandardLibNugetPackage ) ;
129136 ResolveConflicts ( ) ;
130137
131138 // Output the findings
@@ -160,7 +167,8 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
160167 DateTime . Now - startTime ) ;
161168 }
162169
163- private void RemoveUnnecessaryNugetPackages ( bool existsNetCoreRefNugetPackage , bool existsNetFrameworkRefNugetPackage )
170+ private void RemoveUnnecessaryNugetPackages ( bool existsNetCoreRefNugetPackage , bool existsNetFrameworkRefNugetPackage ,
171+ bool existsNetstandardLibRefNugetPackage , bool existsNetstandardLibNugetPackage )
164172 {
165173 RemoveNugetAnalyzerReferences ( ) ;
166174 RemoveRuntimeNugetPackageReferences ( ) ;
@@ -172,10 +180,38 @@ private void RemoveUnnecessaryNugetPackages(bool existsNetCoreRefNugetPackage, b
172180 RemoveNugetPackageReference ( "microsoft.aspnetcore.app.ref" ) ;
173181 }
174182
175- if ( existsNetCoreRefNugetPackage && existsNetFrameworkRefNugetPackage )
183+ // Multiple dotnet framework packages could be present. We keep only one.
184+ // The order of the packages is important, we're keeping the first one that is present in the nuget cache.
185+ var packagesInPrioOrder = new ( bool isPresent , string prefix ) [ ]
176186 {
177- // Multiple packages are available, we keep only one:
178- RemoveNugetPackageReference ( "microsoft.netframework.referenceassemblies." ) ;
187+ // net7.0, ... net5.0, netcoreapp3.1, netcoreapp3.0
188+ ( existsNetCoreRefNugetPackage , "microsoft.netcore.app.ref" ) ,
189+ // net48, ..., net20
190+ ( existsNetFrameworkRefNugetPackage , "microsoft.netframework.referenceassemblies." ) ,
191+ // netstandard2.1
192+ ( existsNetstandardLibRefNugetPackage , "netstandard.library.ref" ) ,
193+ // netstandard2.0
194+ ( existsNetstandardLibNugetPackage , "netstandard.library" )
195+ } ;
196+
197+ for ( var i = 0 ; i < packagesInPrioOrder . Length ; i ++ )
198+ {
199+ var ( isPresent , _) = packagesInPrioOrder [ i ] ;
200+ if ( ! isPresent )
201+ {
202+ continue ;
203+ }
204+
205+ // Package is present, remove all the lower priority packages:
206+ for ( var j = i + 1 ; j < packagesInPrioOrder . Length ; j ++ )
207+ {
208+ var ( otherIsPresent , otherPrefix ) = packagesInPrioOrder [ j ] ;
209+ if ( otherIsPresent )
210+ {
211+ RemoveNugetPackageReference ( otherPrefix ) ;
212+ }
213+ }
214+ break ;
179215 }
180216
181217 // TODO: There could be multiple `microsoft.netframework.referenceassemblies` packages,
0 commit comments