Skip to content

Commit efa7408

Browse files
committed
C#: Use latest asp.net core/windows desktop framework DLLs from nuget folder
1 parent 1b37c66 commit efa7408

File tree

1 file changed

+28
-27
lines changed

1 file changed

+28
-27
lines changed

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

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,31 @@ private void RemoveNugetAnalyzerReferences()
230230
}
231231
}
232232

233+
private void SelectNewestFrameworkPath(string frameworkPath, string frameworkType, ISet<string> dllPaths, ISet<string> frameworkLocations)
234+
{
235+
var versionFolders = new DirectoryInfo(frameworkPath)
236+
.EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false })
237+
.OrderByDescending(d => d.Name) // TODO: Improve sorting to handle pre-release versions.
238+
.ToArray();
239+
240+
if (versionFolders.Length > 1)
241+
{
242+
var versions = string.Join(", ", versionFolders.Select(d => d.Name));
243+
progressMonitor.LogInfo($"Found multiple {frameworkType} DLLs in NuGet packages at {frameworkPath}. Using the latest version ({versionFolders[0].Name}) from: {versions}.");
244+
}
245+
246+
var selectedFrameworkFolder = versionFolders.FirstOrDefault()?.FullName;
247+
if (selectedFrameworkFolder is null)
248+
{
249+
progressMonitor.LogInfo($"Found {frameworkType} DLLs in NuGet packages at {frameworkPath}, but no version folder was found.");
250+
selectedFrameworkFolder = frameworkPath;
251+
}
252+
253+
dllPaths.Add(selectedFrameworkFolder);
254+
frameworkLocations.Add(selectedFrameworkFolder);
255+
progressMonitor.LogInfo($"Found {frameworkType} DLLs in NuGet packages at {selectedFrameworkFolder}. Not adding installation directory.");
256+
}
257+
233258
private void AddNetFrameworkDlls(ISet<string> dllPaths, ISet<string> frameworkLocations)
234259
{
235260
// Multiple dotnet framework packages could be present.
@@ -242,27 +267,7 @@ private void AddNetFrameworkDlls(ISet<string> dllPaths, ISet<string> frameworkLo
242267

243268
if (frameworkPath.Path is not null)
244269
{
245-
var versionFolders = new DirectoryInfo(frameworkPath.Path)
246-
.EnumerateDirectories("*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false })
247-
.OrderByDescending(d => d.Name) // TODO: Improve sorting to handle pre-release versions.
248-
.ToArray();
249-
250-
if (versionFolders.Length > 1)
251-
{
252-
var versions = string.Join(", ", versionFolders.Select(d => d.Name));
253-
progressMonitor.LogInfo($"Found multiple .NET Framework DLLs in NuGet packages at {frameworkPath.Path}. Using the latest version ({versionFolders[0].Name}) from: {versions}.");
254-
}
255-
256-
var selectedFrameworkFolder = versionFolders.FirstOrDefault()?.FullName;
257-
if (selectedFrameworkFolder is null)
258-
{
259-
progressMonitor.LogInfo($"Found .NET Framework DLLs in NuGet packages at {frameworkPath.Path}, but no version folder was found.");
260-
selectedFrameworkFolder = frameworkPath.Path;
261-
}
262-
263-
dllPaths.Add(selectedFrameworkFolder);
264-
frameworkLocations.Add(selectedFrameworkFolder);
265-
progressMonitor.LogInfo($"Found .NET Core/Framework DLLs in NuGet packages at {selectedFrameworkFolder}. Not adding installation directory.");
270+
SelectNewestFrameworkPath(frameworkPath.Path, ".NET Framework", dllPaths, frameworkLocations);
266271

267272
for (var i = frameworkPath.Index + 1; i < packagesInPrioOrder.Length; i++)
268273
{
@@ -326,9 +331,7 @@ private void AddAspNetCoreFrameworkDlls(ISet<string> dllPaths, ISet<string> fram
326331
// First try to find ASP.NET Core assemblies in the NuGet packages
327332
if (GetPackageDirectory(FrameworkPackageNames.AspNetCoreFramework) is string aspNetCorePackage)
328333
{
329-
progressMonitor.LogInfo($"Found ASP.NET Core in NuGet packages. Not adding installation directory.");
330-
dllPaths.Add(aspNetCorePackage);
331-
frameworkLocations.Add(aspNetCorePackage);
334+
SelectNewestFrameworkPath(aspNetCorePackage, "ASP.NET Core", dllPaths, frameworkLocations);
332335
return;
333336
}
334337

@@ -344,9 +347,7 @@ private void AddMicrosoftWindowsDesktopDlls(ISet<string> dllPaths, ISet<string>
344347
{
345348
if (GetPackageDirectory(FrameworkPackageNames.WindowsDesktopFramework) is string windowsDesktopApp)
346349
{
347-
progressMonitor.LogInfo($"Found Windows Desktop App in NuGet packages.");
348-
dllPaths.Add(windowsDesktopApp);
349-
frameworkLocations.Add(windowsDesktopApp);
350+
SelectNewestFrameworkPath(windowsDesktopApp, "Windows Desktop App", dllPaths, frameworkLocations);
350351
}
351352
}
352353

0 commit comments

Comments
 (0)