Skip to content

Commit 3f1e145

Browse files
committed
C#: Rework .net framework reference removal
1 parent 36f1070 commit 3f1e145

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

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

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -180,30 +180,38 @@ private void RemoveUnnecessaryNugetPackages(bool existsNetCoreRefNugetPackage, b
180180
RemoveNugetPackageReference("microsoft.aspnetcore.app.ref");
181181
}
182182

183-
// Multiple packages are available, we keep only one:
184-
if (existsNetCoreRefNugetPackage)
185-
{
186-
if (existsNetFrameworkRefNugetPackage)
187-
RemoveNugetPackageReference("microsoft.netframework.referenceassemblies.");
188-
189-
if (existsNetstandardLibRefNugetPackage)
190-
RemoveNugetPackageReference("netstandard.library.ref");
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)[]
186+
{
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+
};
191196

192-
if (existsNetstandardLibNugetPackage)
193-
RemoveNugetPackageReference("netstandard.library");
194-
}
195-
else if (existsNetFrameworkRefNugetPackage)
197+
for (var i = 0; i < packagesInPrioOrder.Length; i++)
196198
{
197-
if (existsNetstandardLibRefNugetPackage)
198-
RemoveNugetPackageReference("netstandard.library.ref");
199+
var (isPresent, _) = packagesInPrioOrder[i];
200+
if (!isPresent)
201+
{
202+
continue;
203+
}
199204

200-
if (existsNetstandardLibNugetPackage)
201-
RemoveNugetPackageReference("netstandard.library");
202-
}
203-
else if (existsNetstandardLibRefNugetPackage)
204-
{
205-
if (existsNetstandardLibNugetPackage)
206-
RemoveNugetPackageReference("netstandard.library");
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;
207215
}
208216

209217
// TODO: There could be multiple `microsoft.netframework.referenceassemblies` packages,

0 commit comments

Comments
 (0)