@@ -99,15 +99,22 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
99
99
100
100
var existsNetCoreRefNugetPackage = false ;
101
101
var existsNetFrameworkRefNugetPackage = false ;
102
+ var existsNetstandardLibRefNugetPackage = false ;
103
+ var existsNetstandardLibNugetPackage = false ;
102
104
103
105
// Find DLLs in the .Net / Asp.Net Framework
104
106
// This block needs to come after the nuget restore, because the nuget restore might fetch the .NET Core/Framework reference assemblies.
105
107
if ( options . ScanNetFrameworkDlls )
106
108
{
107
109
existsNetCoreRefNugetPackage = IsNugetPackageAvailable ( "microsoft.netcore.app.ref" ) ;
108
110
existsNetFrameworkRefNugetPackage = IsNugetPackageAvailable ( "microsoft.netframework.referenceassemblies" ) ;
111
+ existsNetstandardLibRefNugetPackage = IsNugetPackageAvailable ( "netstandard.library.ref" ) ;
112
+ existsNetstandardLibNugetPackage = IsNugetPackageAvailable ( "netstandard.library" ) ;
109
113
110
- if ( existsNetCoreRefNugetPackage || existsNetFrameworkRefNugetPackage )
114
+ if ( existsNetCoreRefNugetPackage
115
+ || existsNetFrameworkRefNugetPackage
116
+ || existsNetstandardLibRefNugetPackage
117
+ || existsNetstandardLibNugetPackage )
111
118
{
112
119
progressMonitor . LogInfo ( "Found .NET Core/Framework DLLs in NuGet packages. Not adding installation directory." ) ;
113
120
}
@@ -125,7 +132,7 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
125
132
UseReference ( filename ) ;
126
133
}
127
134
128
- RemoveUnnecessaryNugetPackages ( existsNetCoreRefNugetPackage , existsNetFrameworkRefNugetPackage ) ;
135
+ RemoveUnnecessaryNugetPackages ( existsNetCoreRefNugetPackage , existsNetFrameworkRefNugetPackage , existsNetstandardLibRefNugetPackage , existsNetstandardLibNugetPackage ) ;
129
136
ResolveConflicts ( ) ;
130
137
131
138
// Output the findings
@@ -160,7 +167,8 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
160
167
DateTime . Now - startTime ) ;
161
168
}
162
169
163
- private void RemoveUnnecessaryNugetPackages ( bool existsNetCoreRefNugetPackage , bool existsNetFrameworkRefNugetPackage )
170
+ private void RemoveUnnecessaryNugetPackages ( bool existsNetCoreRefNugetPackage , bool existsNetFrameworkRefNugetPackage ,
171
+ bool existsNetstandardLibRefNugetPackage , bool existsNetstandardLibNugetPackage )
164
172
{
165
173
RemoveNugetAnalyzerReferences ( ) ;
166
174
RemoveRuntimeNugetPackageReferences ( ) ;
@@ -172,10 +180,38 @@ private void RemoveUnnecessaryNugetPackages(bool existsNetCoreRefNugetPackage, b
172
180
RemoveNugetPackageReference ( "microsoft.aspnetcore.app.ref" ) ;
173
181
}
174
182
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 ) [ ]
176
186
{
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 ;
179
215
}
180
216
181
217
// TODO: There could be multiple `microsoft.netframework.referenceassemblies` packages,
0 commit comments