Skip to content

Commit fc1fc05

Browse files
committed
C#: Rework .net framework reference removal
1 parent fbfafbf commit fc1fc05

File tree

1 file changed

+35
-8
lines changed

1 file changed

+35
-8
lines changed

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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,30 @@ private void RemoveUnnecessaryNugetPackages(bool existsNetCoreRefNugetPackage, b
172180
RemoveNugetPackageReference("microsoft.aspnetcore.app.ref");
173181
}
174182

175-
if (existsNetCoreRefNugetPackage && existsNetFrameworkRefNugetPackage)
183+
// Multiple packages are available, we keep only one:
184+
if (existsNetCoreRefNugetPackage)
176185
{
177-
// Multiple packages are available, we keep only one:
178-
RemoveNugetPackageReference("microsoft.netframework.referenceassemblies.");
186+
if (existsNetFrameworkRefNugetPackage)
187+
RemoveNugetPackageReference("microsoft.netframework.referenceassemblies.");
188+
189+
if (existsNetstandardLibRefNugetPackage)
190+
RemoveNugetPackageReference("netstandard.library.ref");
191+
192+
if (existsNetstandardLibNugetPackage)
193+
RemoveNugetPackageReference("netstandard.library");
194+
}
195+
else if (existsNetFrameworkRefNugetPackage)
196+
{
197+
if (existsNetstandardLibRefNugetPackage)
198+
RemoveNugetPackageReference("netstandard.library.ref");
199+
200+
if (existsNetstandardLibNugetPackage)
201+
RemoveNugetPackageReference("netstandard.library");
202+
}
203+
else if (existsNetstandardLibRefNugetPackage)
204+
{
205+
if (existsNetstandardLibNugetPackage)
206+
RemoveNugetPackageReference("netstandard.library");
179207
}
180208

181209
// TODO: There could be multiple `microsoft.netframework.referenceassemblies` packages,
@@ -268,8 +296,7 @@ private void RemoveRuntimeNugetPackageReferences()
268296
"runtime.win-x64.microsoft.netcore.app",
269297

270298
// Internal implementation packages not meant for direct consumption:
271-
"runtime.",
272-
"netstandard.library.ref"
299+
"runtime."
273300
};
274301
RemoveNugetPackageReference(runtimePackagePrefixes);
275302
}

0 commit comments

Comments
 (0)