diff --git a/.github/workflows/csharp-qltest.yml b/.github/workflows/csharp-qltest.yml index 2b2ead07e17d..1dc62c49caff 100644 --- a/.github/workflows/csharp-qltest.yml +++ b/.github/workflows/csharp-qltest.yml @@ -91,7 +91,7 @@ jobs: run: | # Generate (Asp)NetCore stubs STUBS_PATH=stubs_output - python3 ql/src/Stubs/make_stubs_nuget.py webapp Swashbuckle.AspNetCore.Swagger latest "$STUBS_PATH" + python3 ql/src/Stubs/make_stubs_nuget.py webapp Swashbuckle.AspNetCore.Swagger 6.5.0 "$STUBS_PATH" rm -rf ql/test/resources/stubs/_frameworks # Update existing stubs in the repo with the freshly generated ones mv "$STUBS_PATH/output/stubs/_frameworks" ql/test/resources/stubs/ diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/AssemblyInfo.cs index 9332f4927743..d3522025e270 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/AssemblyInfo.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/AssemblyInfo.cs @@ -32,7 +32,7 @@ internal sealed partial class AssemblyInfo /// /// The version number of the .NET Core framework that this assembly targets. - /// + /// /// This is extracted from the `TargetFrameworkAttribute` of the assembly, e.g. /// ``` /// [assembly:TargetFramework(".NETCoreApp,Version=v7.0")] @@ -160,11 +160,22 @@ public static AssemblyInfo ReadFromFile(string filename) * loading the same assembly from different locations. */ using var pereader = new System.Reflection.PortableExecutable.PEReader(new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)); + if (!pereader.HasMetadata) + { + throw new AssemblyLoadException(); + } + using var sha1 = SHA1.Create(); var metadata = pereader.GetMetadata(); + unsafe { var reader = new MetadataReader(metadata.Pointer, metadata.Length); + if (!reader.IsAssembly) + { + throw new AssemblyLoadException(); + } + var def = reader.GetAssemblyDefinition(); // This is how you compute the public key token from the full public key. diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs index 36415f8c2492..25bbd1c83f77 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs @@ -47,9 +47,12 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg this.progressMonitor = new ProgressMonitor(logger); this.sourceDir = new DirectoryInfo(srcDir); + packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName)); + tempWorkingDirectory = new TemporaryDirectory(FileUtils.GetTemporaryWorkingDirectory(out cleanupTempWorkingDirectory)); + try { - this.dotnet = DotNet.Make(options, progressMonitor); + this.dotnet = DotNet.Make(options, progressMonitor, tempWorkingDirectory); } catch { @@ -59,8 +62,6 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg this.progressMonitor.FindingFiles(srcDir); - packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName)); - tempWorkingDirectory = new TemporaryDirectory(FileUtils.GetTemporaryWorkingDirectory(out cleanupTempWorkingDirectory)); var allFiles = GetAllFiles(); var binaryFileExtensions = new HashSet(new[] { ".dll", ".exe" }); // TODO: add more binary file extensions. @@ -77,21 +78,6 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg ? allFiles.SelectFileNamesByExtension(".dll").ToList() : options.DllDirs.Select(Path.GetFullPath).ToList(); - // Find DLLs in the .Net / Asp.Net Framework - if (options.ScanNetFrameworkDlls) - { - var runtime = new Runtime(dotnet); - var runtimeLocation = runtime.GetRuntime(options.UseSelfContainedDotnet); - progressMonitor.LogInfo($".NET runtime location selected: {runtimeLocation}"); - dllDirNames.Add(runtimeLocation); - - if (fileContent.UseAspNetDlls && runtime.GetAspRuntime() is string aspRuntime) - { - progressMonitor.LogInfo($"ASP.NET runtime location selected: {aspRuntime}"); - dllDirNames.Add(aspRuntime); - } - } - if (options.UseNuGet) { dllDirNames.Add(packageDirectory.DirInfo.FullName); @@ -111,6 +97,26 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg DownloadMissingPackages(allNonBinaryFiles); } + var existsNetCoreRefNugetPackage = false; + var existsNetFrameworkRefNugetPackage = false; + + // Find DLLs in the .Net / Asp.Net Framework + // This block needs to come after the nuget restore, because the nuget restore might fetch the .NET Core/Framework reference assemblies. + if (options.ScanNetFrameworkDlls) + { + existsNetCoreRefNugetPackage = IsNugetPackageAvailable("microsoft.netcore.app.ref"); + existsNetFrameworkRefNugetPackage = IsNugetPackageAvailable("microsoft.netframework.referenceassemblies"); + + if (existsNetCoreRefNugetPackage || existsNetFrameworkRefNugetPackage) + { + progressMonitor.LogInfo("Found .NET Core/Framework DLLs in NuGet packages. Not adding installation directory."); + } + else + { + AddNetFrameworkDlls(dllDirNames); + } + } + assemblyCache = new AssemblyCache(dllDirNames, progressMonitor); AnalyseSolutions(solutions); @@ -119,7 +125,7 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg UseReference(filename); } - RemoveRuntimeNugetPackageReferences(); + RemoveUnnecessaryNugetPackages(existsNetCoreRefNugetPackage, existsNetFrameworkRefNugetPackage); ResolveConflicts(); // Output the findings @@ -154,7 +160,30 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg DateTime.Now - startTime); } - private void RemoveRuntimeNugetPackageReferences() + private void RemoveUnnecessaryNugetPackages(bool existsNetCoreRefNugetPackage, bool existsNetFrameworkRefNugetPackage) + { + RemoveNugetAnalyzerReferences(); + RemoveRuntimeNugetPackageReferences(); + + if (fileContent.IsNewProjectStructureUsed + && !fileContent.UseAspNetCoreDlls) + { + // This might have been restored by the CLI even though the project isn't an asp.net core one. + RemoveNugetPackageReference("microsoft.aspnetcore.app.ref"); + } + + if (existsNetCoreRefNugetPackage && existsNetFrameworkRefNugetPackage) + { + // Multiple packages are available, we keep only one: + RemoveNugetPackageReference("microsoft.netframework.referenceassemblies."); + } + + // TODO: There could be multiple `microsoft.netframework.referenceassemblies` packages, + // we could keep the newest one, but this is covered by the conflict resolution logic + // (if the file names match) + } + + private void RemoveNugetAnalyzerReferences() { if (!options.UseNuGet) { @@ -162,23 +191,108 @@ private void RemoveRuntimeNugetPackageReferences() } var packageFolder = packageDirectory.DirInfo.FullName.ToLowerInvariant(); - var runtimePackageNamePrefixes = new[] + if (packageFolder == null) + { + return; + } + + foreach (var filename in usedReferences.Keys) { - Path.Combine(packageFolder, "microsoft.netcore.app.runtime"), - Path.Combine(packageFolder, "microsoft.aspnetcore.app.runtime"), - Path.Combine(packageFolder, "microsoft.windowsdesktop.app.runtime"), + var lowerFilename = filename.ToLowerInvariant(); + + if (lowerFilename.StartsWith(packageFolder)) + { + var firstDirectorySeparatorCharIndex = lowerFilename.IndexOf(Path.DirectorySeparatorChar, packageFolder.Length + 1); + if (firstDirectorySeparatorCharIndex == -1) + { + continue; + } + var secondDirectorySeparatorCharIndex = lowerFilename.IndexOf(Path.DirectorySeparatorChar, firstDirectorySeparatorCharIndex + 1); + if (secondDirectorySeparatorCharIndex == -1) + { + continue; + } + var subFolderIndex = secondDirectorySeparatorCharIndex + 1; + var isInAnalyzersFolder = lowerFilename.IndexOf("analyzers", subFolderIndex) == subFolderIndex; + if (isInAnalyzersFolder) + { + usedReferences.Remove(filename); + progressMonitor.RemovedReference(filename); + } + } + } + } + private void AddNetFrameworkDlls(List dllDirNames) + { + var runtime = new Runtime(dotnet); + string? runtimeLocation = null; + + if (options.UseSelfContainedDotnet) + { + runtimeLocation = runtime.ExecutingRuntime; + } + else if (fileContent.IsNewProjectStructureUsed) + { + runtimeLocation = runtime.NetCoreRuntime; + } + else if (fileContent.IsLegacyProjectStructureUsed) + { + runtimeLocation = runtime.DesktopRuntime; + } + + runtimeLocation ??= runtime.ExecutingRuntime; + + progressMonitor.LogInfo($".NET runtime location selected: {runtimeLocation}"); + dllDirNames.Add(runtimeLocation); + + if (fileContent.IsNewProjectStructureUsed + && fileContent.UseAspNetCoreDlls + && runtime.AspNetCoreRuntime is string aspRuntime) + { + progressMonitor.LogInfo($"ASP.NET runtime location selected: {aspRuntime}"); + dllDirNames.Add(aspRuntime); + } + } + + private void RemoveRuntimeNugetPackageReferences() + { + var runtimePackagePrefixes = new[] + { + "microsoft.netcore.app.runtime", + "microsoft.aspnetcore.app.runtime", + "microsoft.windowsdesktop.app.runtime", // legacy runtime packages: - Path.Combine(packageFolder, "runtime.linux-x64.microsoft.netcore.app"), - Path.Combine(packageFolder, "runtime.osx-x64.microsoft.netcore.app"), - Path.Combine(packageFolder, "runtime.win-x64.microsoft.netcore.app"), + "runtime.linux-x64.microsoft.netcore.app", + "runtime.osx-x64.microsoft.netcore.app", + "runtime.win-x64.microsoft.netcore.app", + + // Internal implementation packages not meant for direct consumption: + "runtime." }; + RemoveNugetPackageReference(runtimePackagePrefixes); + } + + private void RemoveNugetPackageReference(params string[] packagePrefixes) + { + if (!options.UseNuGet) + { + return; + } + + var packageFolder = packageDirectory.DirInfo.FullName.ToLowerInvariant(); + if (packageFolder == null) + { + return; + } + + var packagePathPrefixes = packagePrefixes.Select(p => Path.Combine(packageFolder, p.ToLowerInvariant())); foreach (var filename in usedReferences.Keys) { var lowerFilename = filename.ToLowerInvariant(); - if (runtimePackageNamePrefixes.Any(prefix => lowerFilename.StartsWith(prefix))) + if (packagePathPrefixes.Any(prefix => lowerFilename.StartsWith(prefix))) { usedReferences.Remove(filename); progressMonitor.RemovedReference(filename); @@ -186,6 +300,18 @@ private void RemoveRuntimeNugetPackageReferences() } } + private bool IsNugetPackageAvailable(string packagePrefix) + { + if (!options.UseNuGet) + { + return false; + } + + return new DirectoryInfo(packageDirectory.DirInfo.FullName) + .EnumerateDirectories(packagePrefix + "*", new EnumerationOptions { MatchCasing = MatchCasing.CaseInsensitive, RecurseSubdirectories = false }) + .Any(); + } + private void GenerateSourceFileFromImplicitUsings() { var usings = new HashSet(); @@ -198,7 +324,7 @@ private void GenerateSourceFileFromImplicitUsings() usings.UnionWith(new[] { "System", "System.Collections.Generic", "System.IO", "System.Linq", "System.Net.Http", "System.Threading", "System.Threading.Tasks" }); - if (fileContent.UseAspNetDlls) + if (fileContent.UseAspNetCoreDlls) { usings.UnionWith(new[] { "System.Net.Http.Json", "Microsoft.AspNetCore.Builder", "Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Http", "Microsoft.AspNetCore.Routing", "Microsoft.Extensions.Configuration", @@ -461,11 +587,11 @@ private void AnalyseProject(FileInfo project) } - private bool RestoreProject(string project, string? pathToNugetConfig = null) => - dotnet.RestoreProjectToDirectory(project, packageDirectory.DirInfo.FullName, pathToNugetConfig); + private bool RestoreProject(string project, bool forceDotnetRefAssemblyFetching, string? pathToNugetConfig = null) => + dotnet.RestoreProjectToDirectory(project, packageDirectory.DirInfo.FullName, forceDotnetRefAssemblyFetching, pathToNugetConfig); private bool RestoreSolution(string solution, out IEnumerable projects) => - dotnet.RestoreSolutionToDirectory(solution, packageDirectory.DirInfo.FullName, out projects); + dotnet.RestoreSolutionToDirectory(solution, packageDirectory.DirInfo.FullName, forceDotnetRefAssemblyFetching: true, out projects); /// /// Executes `dotnet restore` on all solution files in solutions. @@ -491,7 +617,7 @@ private void RestoreProjects(IEnumerable projects) { Parallel.ForEach(projects, new ParallelOptions { MaxDegreeOfParallelism = options.Threads }, project => { - RestoreProject(project); + RestoreProject(project, forceDotnetRefAssemblyFetching: true); }); } @@ -536,7 +662,7 @@ private void DownloadMissingPackages(List allFiles) return; } - success = RestoreProject(tempDir.DirInfo.FullName, nugetConfig); + success = RestoreProject(tempDir.DirInfo.FullName, forceDotnetRefAssemblyFetching: false, pathToNugetConfig: nugetConfig); // TODO: the restore might fail, we could retry with a prerelease (*-* instead of *) version of the package. if (!success) { @@ -564,9 +690,25 @@ private void AnalyseSolutions(IEnumerable solutions) public void Dispose() { - packageDirectory?.Dispose(); + try + { + packageDirectory?.Dispose(); + } + catch (Exception exc) + { + progressMonitor.LogInfo("Couldn't delete package directory: " + exc.Message); + } if (cleanupTempWorkingDirectory) - tempWorkingDirectory?.Dispose(); + { + try + { + tempWorkingDirectory?.Dispose(); + } + catch (Exception exc) + { + progressMonitor.LogInfo("Couldn't delete temporary working directory: " + exc.Message); + } + } } } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs index 8a5db9fed12f..52c56b2ad0f8 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DotNet.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Text.RegularExpressions; +using Semmle.Util; namespace Semmle.Extraction.CSharp.DependencyFetching { @@ -13,19 +14,21 @@ internal partial class DotNet : IDotNet { private readonly IDotNetCliInvoker dotnetCliInvoker; private readonly ProgressMonitor progressMonitor; + private readonly TemporaryDirectory? tempWorkingDirectory; - private DotNet(IDotNetCliInvoker dotnetCliInvoker, ProgressMonitor progressMonitor) + private DotNet(IDotNetCliInvoker dotnetCliInvoker, ProgressMonitor progressMonitor, TemporaryDirectory? tempWorkingDirectory = null) { this.progressMonitor = progressMonitor; + this.tempWorkingDirectory = tempWorkingDirectory; this.dotnetCliInvoker = dotnetCliInvoker; Info(); } - private DotNet(IDependencyOptions options, ProgressMonitor progressMonitor) : this(new DotNetCliInvoker(progressMonitor, Path.Combine(options.DotNetPath ?? string.Empty, "dotnet")), progressMonitor) { } + private DotNet(IDependencyOptions options, ProgressMonitor progressMonitor, TemporaryDirectory tempWorkingDirectory) : this(new DotNetCliInvoker(progressMonitor, Path.Combine(options.DotNetPath ?? string.Empty, "dotnet")), progressMonitor, tempWorkingDirectory) { } internal static IDotNet Make(IDotNetCliInvoker dotnetCliInvoker, ProgressMonitor progressMonitor) => new DotNet(dotnetCliInvoker, progressMonitor); - public static IDotNet Make(IDependencyOptions options, ProgressMonitor progressMonitor) => new DotNet(options, progressMonitor); + public static IDotNet Make(IDependencyOptions options, ProgressMonitor progressMonitor, TemporaryDirectory tempWorkingDirectory) => new DotNet(options, progressMonitor, tempWorkingDirectory); private void Info() { @@ -37,12 +40,29 @@ private void Info() } } - private static string GetRestoreArgs(string projectOrSolutionFile, string packageDirectory) => - $"restore --no-dependencies \"{projectOrSolutionFile}\" --packages \"{packageDirectory}\" /p:DisableImplicitNuGetFallbackFolder=true"; + private string GetRestoreArgs(string projectOrSolutionFile, string packageDirectory, bool forceDotnetRefAssemblyFetching) + { + var args = $"restore --no-dependencies \"{projectOrSolutionFile}\" --packages \"{packageDirectory}\" /p:DisableImplicitNuGetFallbackFolder=true"; + + if (forceDotnetRefAssemblyFetching) + { + // Ugly hack: we set the TargetFrameworkRootPath and NetCoreTargetingPackRoot properties to an empty folder: + var path = ".empty"; + if (tempWorkingDirectory != null) + { + path = Path.Combine(tempWorkingDirectory.ToString(), "emptyFakeDotnetRoot"); + Directory.CreateDirectory(path); + } + + args += $" /p:TargetFrameworkRootPath=\"{path}\" /p:NetCoreTargetingPackRoot=\"{path}\""; + } + + return args; + } - public bool RestoreProjectToDirectory(string projectFile, string packageDirectory, string? pathToNugetConfig = null) + public bool RestoreProjectToDirectory(string projectFile, string packageDirectory, bool forceDotnetRefAssemblyFetching, string? pathToNugetConfig = null) { - var args = GetRestoreArgs(projectFile, packageDirectory); + var args = GetRestoreArgs(projectFile, packageDirectory, forceDotnetRefAssemblyFetching); if (pathToNugetConfig != null) { args += $" --configfile \"{pathToNugetConfig}\""; @@ -51,9 +71,9 @@ public bool RestoreProjectToDirectory(string projectFile, string packageDirector return dotnetCliInvoker.RunCommand(args); } - public bool RestoreSolutionToDirectory(string solutionFile, string packageDirectory, out IEnumerable projects) + public bool RestoreSolutionToDirectory(string solutionFile, string packageDirectory, bool forceDotnetRefAssemblyFetching, out IEnumerable projects) { - var args = GetRestoreArgs(solutionFile, packageDirectory); + var args = GetRestoreArgs(solutionFile, packageDirectory, forceDotnetRefAssemblyFetching); args += " --verbosity normal"; if (dotnetCliInvoker.RunCommand(args, out var output)) { diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs index 1dd0ad423186..1fc3c07fd172 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileContent.cs @@ -31,21 +31,21 @@ public HashSet AllPackages } } - private bool useAspNetDlls = false; + private bool useAspNetCoreDlls = false; /// - /// True if any file in the source directory indicates that ASP.NET is used. - /// The following heuristic is used to decide, if ASP.NET is used: + /// True if any file in the source directory indicates that ASP.NET Core is used. + /// The following heuristic is used to decide, if ASP.NET Core is used: /// If any file in the source directory contains something like (this will most like be a .csproj file) /// /// /// - public bool UseAspNetDlls + public bool UseAspNetCoreDlls { get { initialize.Run(); - return useAspNetDlls; + return useAspNetCoreDlls; } } @@ -60,6 +60,27 @@ public bool UseImplicitUsings } } + private bool isLegacyProjectStructureUsed = false; + + public bool IsLegacyProjectStructureUsed + { + get + { + initialize.Run(); + return isLegacyProjectStructureUsed; + } + } + + private bool isNewProjectStructureUsed = false; + public bool IsNewProjectStructureUsed + { + get + { + initialize.Run(); + return isNewProjectStructureUsed; + } + } + public HashSet CustomImplicitUsings { get @@ -141,19 +162,15 @@ private void DoInitialize() } // Determine if ASP.NET is used. - if (!useAspNetDlls) - { - useAspNetDlls = - IsGroupMatch(line, ProjectSdk(), "Sdk", "Microsoft.NET.Sdk.Web") || - IsGroupMatch(line, FrameworkReference(), "Include", "Microsoft.AspNetCore.App"); - } + useAspNetCoreDlls = useAspNetCoreDlls + || IsGroupMatch(line, ProjectSdk(), "Sdk", "Microsoft.NET.Sdk.Web") + || IsGroupMatch(line, FrameworkReference(), "Include", "Microsoft.AspNetCore.App"); + // Determine if implicit usings are used. - if (!useImplicitUsings) - { - useImplicitUsings = line.Contains("enable".AsSpan(), StringComparison.Ordinal) || - line.Contains("true".AsSpan(), StringComparison.Ordinal); - } + useImplicitUsings = useImplicitUsings + || line.Contains("enable".AsSpan(), StringComparison.Ordinal) + || line.Contains("true".AsSpan(), StringComparison.Ordinal); // Find all custom implicit usings. foreach (var valueMatch in CustomImplicitUsingDeclarations().EnumerateMatches(line)) @@ -164,6 +181,13 @@ private void DoInitialize() implicitUsingNamespaces.Add(ns); } } + + // Determine project structure: + isLegacyProjectStructureUsed = isLegacyProjectStructureUsed || MicrosoftCSharpTargets().IsMatch(line); + isNewProjectStructureUsed = isNewProjectStructureUsed + || ProjectSdk().IsMatch(line) + || FrameworkReference().IsMatch(line); + // TODO: we could also check `` } } catch (Exception ex) @@ -184,6 +208,9 @@ private void DoInitialize() [GeneratedRegex("", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] private static partial Regex CustomImplicitUsingDeclarations(); + + [GeneratedRegex("", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline)] + private static partial Regex MicrosoftCSharpTargets(); } internal interface IUnsafeFileReader diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs index 0612d7728808..6211fde32ad7 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/IDotNet.cs @@ -4,8 +4,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { internal interface IDotNet { - bool RestoreProjectToDirectory(string project, string directory, string? pathToNugetConfig = null); - bool RestoreSolutionToDirectory(string solutionFile, string packageDirectory, out IEnumerable projects); + bool RestoreProjectToDirectory(string project, string directory, bool forceDotnetRefAssemblyFetching, string? pathToNugetConfig = null); + bool RestoreSolutionToDirectory(string solutionFile, string packageDirectory, bool forceDotnetRefAssemblyFetching, out IEnumerable projects); bool New(string folder); bool AddPackage(string folder, string package); IList GetListedRuntimes(); diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/ProgressMonitor.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/ProgressMonitor.cs index e9204e18ef39..f71dbe9498fe 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/ProgressMonitor.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/ProgressMonitor.cs @@ -55,10 +55,10 @@ public void NugetInstall(string package) => LogInfo($"Restoring {package}..."); public void ResolvedReference(string filename) => - LogInfo($"Resolved {filename}"); + LogInfo($"Resolved reference {filename}"); public void RemovedReference(string filename) => - LogInfo($"Reference {filename} has been removed"); + LogInfo($"Removed reference {filename}"); public void Summary(int existingSources, int usedSources, int missingSources, int references, int unresolvedReferences, diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs index 3928e8f689e0..5b6f47d22f3b 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Runtime.cs @@ -19,7 +19,6 @@ internal partial class Runtime private readonly IDotNet dotNet; private readonly Lazy> newestRuntimes; private Dictionary NewestRuntimes => newestRuntimes.Value; - private static string ExecutingRuntime => RuntimeEnvironment.GetRuntimeDirectory(); public Runtime(IDotNet dotNet) { @@ -70,17 +69,17 @@ private static IEnumerable DesktopRuntimes { get { - var monoPath = FileUtils.FindProgramOnPath(Win32.IsWindows() ? "mono.exe" : "mono"); - var monoDirs = monoPath is not null - ? new[] { monoPath } - : new[] { "/usr/lib/mono", @"C:\Program Files\Mono\lib\mono" }; - if (Directory.Exists(@"C:\Windows\Microsoft.NET\Framework64")) { return Directory.EnumerateDirectories(@"C:\Windows\Microsoft.NET\Framework64", "v*") .OrderByDescending(Path.GetFileName); } + var monoPath = FileUtils.FindProgramOnPath(Win32.IsWindows() ? "mono.exe" : "mono"); + var monoDirs = monoPath is not null + ? new[] { Path.GetFullPath(Path.Combine(monoPath, "..", "lib", "mono")), monoPath } + : new[] { "/usr/lib/mono", "/usr/local/mono", "/usr/local/bin/mono", @"C:\Program Files\Mono\lib\mono" }; + var dir = monoDirs.FirstOrDefault(Directory.Exists); if (dir is not null) @@ -107,33 +106,23 @@ private static IEnumerable DesktopRuntimes } /// - /// Gets the .NET runtime location to use for extraction. + /// Gets the Dotnet Core location. /// - public string GetRuntime(bool useSelfContained) - { - if (useSelfContained) - { - return ExecutingRuntime; - } + public string? NetCoreRuntime => GetVersion(netCoreApp); - // Location of the newest .NET Core Runtime. - if (GetVersion(netCoreApp) is string path) - { - return path; - } - - if (DesktopRuntimes.Any()) - { - return DesktopRuntimes.First(); - } + /// + /// Gets the .NET Framework location. Either the installation folder on Windows or Mono + /// + public string? DesktopRuntime => DesktopRuntimes?.FirstOrDefault(); - // A bad choice if it's the self-contained runtime distributed in codeql dist. - return ExecutingRuntime; - } + /// + /// Gets the executing runtime location, this is the self contained runtime shipped in the CodeQL CLI bundle. + /// + public string ExecutingRuntime => RuntimeEnvironment.GetRuntimeDirectory(); /// - /// Gets the ASP.NET runtime location to use for extraction, if one exists. + /// Gets the ASP.NET Core location. /// - public string? GetAspRuntime() => GetVersion(aspNetCoreApp); + public string? AspNetCoreRuntime => GetVersion(aspNetCoreApp); } } diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj index f5b0e319531e..45a4858b2bf6 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj @@ -8,6 +8,7 @@ true win-x64;linux-x64;osx-x64 enable + $(NoWarn);CA1822 diff --git a/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs b/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs index f7ede9938081..491be3ef137b 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/DotNet.cs @@ -99,7 +99,7 @@ public void TestDotnetRestoreProjectToDirectory1() var dotnet = MakeDotnet(dotnetCliInvoker); // Execute - dotnet.RestoreProjectToDirectory("myproject.csproj", "mypackages"); + dotnet.RestoreProjectToDirectory("myproject.csproj", "mypackages", false); // Verify var lastArgs = dotnetCliInvoker.GetLastArgs(); @@ -114,7 +114,7 @@ public void TestDotnetRestoreProjectToDirectory2() var dotnet = MakeDotnet(dotnetCliInvoker); // Execute - dotnet.RestoreProjectToDirectory("myproject.csproj", "mypackages", "myconfig.config"); + dotnet.RestoreProjectToDirectory("myproject.csproj", "mypackages", false, "myconfig.config"); // Verify var lastArgs = dotnetCliInvoker.GetLastArgs(); @@ -129,7 +129,7 @@ public void TestDotnetRestoreSolutionToDirectory1() var dotnet = MakeDotnet(dotnetCliInvoker); // Execute - dotnet.RestoreSolutionToDirectory("mysolution.sln", "mypackages", out var projects); + dotnet.RestoreSolutionToDirectory("mysolution.sln", "mypackages", false, out var projects); // Verify var lastArgs = dotnetCliInvoker.GetLastArgs(); @@ -148,7 +148,7 @@ public void TestDotnetRestoreSolutionToDirectory2() dotnetCliInvoker.Success = false; // Execute - dotnet.RestoreSolutionToDirectory("mysolution.sln", "mypackages", out var projects); + dotnet.RestoreSolutionToDirectory("mysolution.sln", "mypackages", false, out var projects); // Verify var lastArgs = dotnetCliInvoker.GetLastArgs(); diff --git a/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs b/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs index 4c50cfaa8d16..561af4bb9673 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/FileContent.cs @@ -1,4 +1,5 @@ using Xunit; +using System; using System.Collections.Generic; using Semmle.Extraction.CSharp.DependencyFetching; @@ -6,9 +7,9 @@ namespace Semmle.Extraction.Tests { internal class UnsafeFileReaderStub : IUnsafeFileReader { - private readonly List lines; + private readonly IEnumerable lines; - public UnsafeFileReaderStub(List lines) + public UnsafeFileReaderStub(IEnumerable lines) { this.lines = lines; } @@ -24,7 +25,7 @@ public IEnumerable ReadLines(string file) internal class TestFileContent : FileContent { - public TestFileContent(List lines) : base(new ProgressMonitor(new LoggerStub()), + public TestFileContent(IEnumerable lines) : base(new ProgressMonitor(new LoggerStub()), new List() { "test1.cs" }, new UnsafeFileReaderStub(lines)) { } @@ -48,7 +49,7 @@ public void TestFileContent1() // Execute var allPackages = fileContent.AllPackages; - var useAspNetDlls = fileContent.UseAspNetDlls; + var useAspNetDlls = fileContent.UseAspNetCoreDlls; // Verify Assert.False(useAspNetDlls); @@ -72,7 +73,7 @@ public void TestFileContent2() var fileContent = new TestFileContent(lines); // Execute - var useAspNetDlls = fileContent.UseAspNetDlls; + var useAspNetDlls = fileContent.UseAspNetCoreDlls; var allPackages = fileContent.AllPackages; // Verify @@ -136,5 +137,53 @@ public void TestFileContent_ImplicitUsingsAdditional() Assert.Contains("Ns0.Ns1", customImplicitUsings); Assert.Contains("Ns2", customImplicitUsings); } + + [Fact] + public void TestFileContent_LegacyProjectStructure() + { + // Setup + var input = + """ + + + + + """; + var lines = input.Split(Environment.NewLine); + var fileContent = new TestFileContent(lines); + + // Execute + var isLegacy = fileContent.IsLegacyProjectStructureUsed; + var isNew = fileContent.IsNewProjectStructureUsed; + + // Verify + Assert.True(isLegacy); + Assert.False(isNew); + } + + [Fact] + public void TestFileContent_NewProjectStructure() + { + // Setup + var input = + """ + + + net461;net70 + + + """; + var lines = input.Split(Environment.NewLine); + + var fileContent = new TestFileContent(lines); + + // Execute + var isLegacy = fileContent.IsLegacyProjectStructureUsed; + var isNew = fileContent.IsNewProjectStructureUsed; + + // Verify + Assert.True(isNew); + Assert.False(isLegacy); + } } } diff --git a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs index 2afd467f8d46..bb6d5ed43077 100644 --- a/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs +++ b/csharp/extractor/Semmle.Extraction.Tests/Runtime.cs @@ -19,9 +19,9 @@ public DotNetStub(IList runtimes, IList sdks) public bool New(string folder) => true; - public bool RestoreProjectToDirectory(string project, string directory, string? pathToNugetConfig = null) => true; + public bool RestoreProjectToDirectory(string project, string directory, bool forceDotnetRefAssemblyFetching, string? pathToNugetConfig = null) => true; - public bool RestoreSolutionToDirectory(string solution, string directory, out IEnumerable projects) + public bool RestoreSolutionToDirectory(string solution, string directory, bool forceDotnetRefAssemblyFetching, out IEnumerable projects) { projects = Array.Empty(); return true; diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected new file mode 100644 index 000000000000..fe35f5045466 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.expected @@ -0,0 +1,235 @@ +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Accessibility.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/CustomMarshalers.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/Microsoft.Win32.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.AppContext.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.Concurrent.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.NonGeneric.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.Specialized.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Collections.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.Annotations.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.EventBasedAsync.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.TypeConverter.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ComponentModel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Console.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Data.Common.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Contracts.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Debug.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.FileVersionInfo.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Process.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.StackTrace.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.TextWriterTraceListener.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.Tools.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Diagnostics.TraceSource.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Drawing.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Dynamic.Runtime.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.Calendars.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.Extensions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Globalization.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.Compression.ZipFile.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.DriveInfo.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.Watcher.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.FileSystem.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.IsolatedStorage.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.MemoryMappedFiles.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.Pipes.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.UnmanagedMemoryStream.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.IO.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Expressions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Parallel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.Queryable.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Linq.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Http.Rtc.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.NameResolution.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.NetworkInformation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Ping.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Requests.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Security.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.Sockets.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebHeaderCollection.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebSockets.Client.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Net.WebSockets.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ObjectModel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.ILGeneration.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.Lightweight.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Emit.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Extensions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Reflection.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.Reader.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.ResourceManager.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Resources.Writer.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.CompilerServices.VisualC.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Extensions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Handles.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.RuntimeInformation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.WindowsRuntime.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.InteropServices.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Numerics.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Formatters.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Json.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.Serialization.Xml.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Runtime.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Claims.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Algorithms.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Csp.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Encoding.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Cryptography.X509Certificates.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.Principal.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Security.SecureString.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Duplex.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Http.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.NetTcp.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Primitives.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ServiceModel.Security.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.Encoding.Extensions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.Encoding.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Text.RegularExpressions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Overlapped.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Tasks.Parallel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Tasks.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Thread.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.ThreadPool.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.Timer.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Threading.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.ValueTuple.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.ReaderWriter.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XDocument.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XPath.XDocument.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XPath.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XmlDocument.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/System.Xml.XmlSerializer.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Facades/netstandard.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/ISymWrapper.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Activities.Build.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Conversion.v4.0.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Engine.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Framework.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Tasks.v4.0.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.Utilities.v4.0.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.Build.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.CSharp.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.JScript.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.Data.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.Compatibility.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualBasic.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualC.STLCLR.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/Microsoft.VisualC.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationBuildTasks.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationCore.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Aero2.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Aero.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.AeroLite.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Classic.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Luna.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.Royale.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/PresentationFramework.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/ReachFramework.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.Core.Presentation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.DurableInstancing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.Presentation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Activities.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.AddIn.Contract.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.AddIn.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.Composition.Registration.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.Composition.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ComponentModel.DataAnnotations.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Configuration.Install.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Configuration.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Core.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.DataSetExtensions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Entity.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Entity.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Linq.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.OracleClient.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.Client.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.Services.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.SqlXml.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Data.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Deployment.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Device.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Diagnostics.Tracing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.AccountManagement.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.Protocols.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.DirectoryServices.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Drawing.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Drawing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Dynamic.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.EnterpriseServices.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Compression.FileSystem.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Compression.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IO.Log.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.Selectors.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.Services.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.IdentityModel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Management.Instrumentation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Management.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Messaging.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.Http.WebRequest.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.Http.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Net.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Numerics.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Printing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Reflection.Context.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Caching.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.DurableInstancing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Remoting.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Serialization.Formatters.Soap.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Runtime.Serialization.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Security.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Activation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Activities.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Channels.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Discovery.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Routing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.Web.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceModel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.ServiceProcess.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Speech.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Transactions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Abstractions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.ApplicationServices.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DataVisualization.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DataVisualization.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DynamicData.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.DynamicData.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Entity.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Entity.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Extensions.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Extensions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Mobile.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.RegularExpressions.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Routing.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.Services.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Web.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Controls.Ribbon.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.Design.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.DataVisualization.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Forms.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Input.Manipulations.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.Presentation.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Windows.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.Activities.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.ComponentModel.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Workflow.Runtime.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.WorkflowServices.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xaml.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.Linq.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.Serialization.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.Xml.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/System.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationClient.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationClientsideProviders.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationProvider.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/UIAutomationTypes.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/WindowsBase.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/WindowsFormsIntegration.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/XamlBuildTask.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/mscorlib.dll | +| /microsoft.netframework.referenceassemblies.net48/1.0.3/build/.NETFramework/v4.8/sysglobl.dll | diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql new file mode 100644 index 000000000000..91ee82c1c7aa --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Assemblies.ql @@ -0,0 +1,15 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = + s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + or + result = s and + not exists(s.indexOf("GitHub/packages/")) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Program.cs b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Program.cs new file mode 100644 index 000000000000..39a9e95bb6e3 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json new file mode 100644 index 000000000000..24caabe88a14 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "7.0.401" + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/standalone.csproj new file mode 100644 index 000000000000..208dbbe70931 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/standalone.csproj @@ -0,0 +1,12 @@ + + + + Exe + net48 + + + + + + + diff --git a/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py new file mode 100644 index 000000000000..58074b430b29 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/standalone_dependencies_net48/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected new file mode 100644 index 000000000000..eebdb8558eb5 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.expected @@ -0,0 +1,173 @@ +| /avalara.avatax/21.10.0/lib/net20/Avalara.AvaTax.RestClient.net20.dll | +| /avalara.avatax/21.10.0/lib/net45/Avalara.AvaTax.RestClient.net45.dll | +| /avalara.avatax/21.10.0/lib/net461/Avalara.AvaTax.RestClient.net461.dll | +| /avalara.avatax/21.10.0/lib/netstandard16/Avalara.AvaTax.netstandard11.dll | +| /avalara.avatax/21.10.0/lib/netstandard20/Avalara.AvaTax.netstandard20.dll | +| /microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll | +| /microsoft.netcore.app.ref/3.1.0/ref/netcoreapp3.1/System.Runtime.InteropServices.WindowsRuntime.dll | +| /microsoft.netcore.app.ref/6.0.13/ref/net6.0/System.Data.dll | +| /microsoft.netcore.app.ref/6.0.13/ref/net6.0/System.Xml.dll | +| /microsoft.netcore.app.ref/6.0.13/ref/net6.0/System.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.CSharp.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.VisualBasic.Core.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.VisualBasic.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.Win32.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.Win32.Registry.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.AppContext.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Buffers.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.Concurrent.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.Immutable.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.NonGeneric.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.Specialized.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.Annotations.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.DataAnnotations.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.EventBasedAsync.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.TypeConverter.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Configuration.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Console.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Core.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Data.Common.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Data.DataSetExtensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Contracts.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Debug.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.DiagnosticSource.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.FileVersionInfo.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Process.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.StackTrace.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.TextWriterTraceListener.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Tools.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.TraceSource.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Tracing.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Drawing.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Drawing.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Dynamic.Runtime.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Formats.Asn1.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Formats.Tar.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Globalization.Calendars.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Globalization.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Globalization.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.Brotli.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.FileSystem.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.ZipFile.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.AccessControl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.DriveInfo.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.Watcher.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.IsolatedStorage.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.MemoryMappedFiles.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Pipes.AccessControl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Pipes.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.UnmanagedMemoryStream.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.Expressions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.Parallel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.Queryable.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Memory.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Http.Json.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Http.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.HttpListener.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Mail.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.NameResolution.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.NetworkInformation.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Ping.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Quic.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Requests.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Security.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.ServicePoint.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Sockets.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebClient.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebHeaderCollection.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebProxy.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebSockets.Client.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebSockets.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Numerics.Vectors.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Numerics.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ObjectModel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.DispatchProxy.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Emit.ILGeneration.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Emit.Lightweight.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Emit.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Metadata.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.TypeExtensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Resources.Reader.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Resources.ResourceManager.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Resources.Writer.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.CompilerServices.Unsafe.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.CompilerServices.VisualC.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Handles.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.InteropServices.JavaScript.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.InteropServices.RuntimeInformation.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.InteropServices.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Intrinsics.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Loader.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Numerics.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Formatters.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Json.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Xml.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.AccessControl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Claims.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Algorithms.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Cng.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Csp.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Encoding.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.OpenSsl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.X509Certificates.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Principal.Windows.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Principal.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.SecureString.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ServiceModel.Web.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ServiceProcess.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encoding.CodePages.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encoding.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encoding.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encodings.Web.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Json.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.RegularExpressions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Channels.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Overlapped.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.Dataflow.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.Parallel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Thread.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.ThreadPool.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Timer.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Transactions.Local.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Transactions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ValueTuple.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Web.HttpUtility.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Web.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Windows.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.Linq.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.ReaderWriter.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.Serialization.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XDocument.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XPath.XDocument.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XPath.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XmlDocument.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XmlSerializer.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/WindowsBase.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/mscorlib.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/netstandard.dll | +| /netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.Composition.dll | +| /newtonsoft.json/12.0.1/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll | +| /nunit/3.13.3/lib/netstandard2.0/nunit.framework.dll | diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql new file mode 100644 index 000000000000..91ee82c1c7aa --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Assemblies.ql @@ -0,0 +1,15 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = + s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + or + result = s and + not exists(s.indexOf("GitHub/packages/")) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Program.cs new file mode 100644 index 000000000000..39a9e95bb6e3 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/global.json b/csharp/ql/integration-tests/posix-only/standalone_dependencies/global.json new file mode 100644 index 000000000000..1a974fd253ec --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "7.0.102" + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/standalone.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies/standalone.csproj new file mode 100644 index 000000000000..628d03904031 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/standalone.csproj @@ -0,0 +1,19 @@ + + + + Exe + net7.0;net6.0;netcoreapp3.1;netstandard2.0;net48 + + + + + + + + + + + + + + diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py new file mode 100644 index 000000000000..58074b430b29 --- /dev/null +++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected new file mode 100644 index 000000000000..1eae4e66233e --- /dev/null +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.expected @@ -0,0 +1,217 @@ +| /avalara.avatax/21.10.0/lib/net20/Avalara.AvaTax.RestClient.net20.dll | +| /avalara.avatax/21.10.0/lib/net45/Avalara.AvaTax.RestClient.net45.dll | +| /avalara.avatax/21.10.0/lib/net461/Avalara.AvaTax.RestClient.net461.dll | +| /avalara.avatax/21.10.0/lib/netstandard16/Avalara.AvaTax.netstandard11.dll | +| /avalara.avatax/21.10.0/lib/netstandard20/Avalara.AvaTax.netstandard20.dll | +| /microsoft.bcl.asyncinterfaces/6.0.0/lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll | +| /microsoft.netcore.app.ref/3.1.0/ref/netcoreapp3.1/System.Runtime.InteropServices.WindowsRuntime.dll | +| /microsoft.netcore.app.ref/6.0.13/ref/net6.0/System.Data.dll | +| /microsoft.netcore.app.ref/6.0.13/ref/net6.0/System.Xml.dll | +| /microsoft.netcore.app.ref/6.0.13/ref/net6.0/System.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.CSharp.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.VisualBasic.Core.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.Win32.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/Microsoft.Win32.Registry.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.AppContext.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Buffers.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.Concurrent.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.Immutable.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.NonGeneric.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.Specialized.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Collections.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.Annotations.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.DataAnnotations.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.EventBasedAsync.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.TypeConverter.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ComponentModel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Configuration.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Console.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Core.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Data.Common.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Data.DataSetExtensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Contracts.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Debug.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.DiagnosticSource.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.FileVersionInfo.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Process.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.StackTrace.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.TextWriterTraceListener.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Tools.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.TraceSource.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Diagnostics.Tracing.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Drawing.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Dynamic.Runtime.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Formats.Asn1.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Formats.Tar.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Globalization.Calendars.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Globalization.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Globalization.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.Brotli.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.FileSystem.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.ZipFile.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Compression.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.AccessControl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.DriveInfo.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.Watcher.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.FileSystem.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.IsolatedStorage.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.MemoryMappedFiles.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Pipes.AccessControl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.Pipes.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.UnmanagedMemoryStream.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.IO.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.Expressions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.Parallel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.Queryable.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Linq.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Memory.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Http.Json.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Http.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.HttpListener.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Mail.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.NameResolution.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.NetworkInformation.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Ping.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Quic.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Requests.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Security.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.ServicePoint.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.Sockets.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebClient.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebHeaderCollection.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebProxy.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebSockets.Client.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.WebSockets.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Net.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Numerics.Vectors.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Numerics.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ObjectModel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.DispatchProxy.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Emit.ILGeneration.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Emit.Lightweight.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Emit.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Metadata.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.TypeExtensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Reflection.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Resources.Reader.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Resources.ResourceManager.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Resources.Writer.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.CompilerServices.Unsafe.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.CompilerServices.VisualC.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Handles.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.InteropServices.JavaScript.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.InteropServices.RuntimeInformation.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.InteropServices.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Intrinsics.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Loader.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Numerics.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Formatters.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Json.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.Xml.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.Serialization.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Runtime.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.AccessControl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Claims.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Algorithms.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Cng.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Csp.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Encoding.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.OpenSsl.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Primitives.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.X509Certificates.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Principal.Windows.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.Principal.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.SecureString.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Security.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ServiceModel.Web.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ServiceProcess.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encoding.CodePages.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encoding.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encoding.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Encodings.Web.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.Json.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Text.RegularExpressions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Channels.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Overlapped.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.Dataflow.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.Extensions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.Parallel.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Tasks.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Thread.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.ThreadPool.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.Timer.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Threading.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Transactions.Local.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Transactions.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.ValueTuple.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Web.HttpUtility.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Web.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Windows.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.Linq.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.ReaderWriter.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.Serialization.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XDocument.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XPath.XDocument.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XPath.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XmlDocument.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/System.Xml.XmlSerializer.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/mscorlib.dll | +| /microsoft.netcore.app.ref/7.0.2/ref/net7.0/netstandard.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/Accessibility.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/Microsoft.VisualBasic.Forms.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/Microsoft.VisualBasic.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/Microsoft.Win32.Registry.AccessControl.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/Microsoft.Win32.SystemEvents.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationCore.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.Aero2.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.Aero.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.AeroLite.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.Classic.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.Luna.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.Royale.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationFramework.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/PresentationUI.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/ReachFramework.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.CodeDom.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Configuration.ConfigurationManager.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Design.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Diagnostics.EventLog.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Diagnostics.PerformanceCounter.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.DirectoryServices.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Drawing.Common.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Drawing.Design.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Drawing.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.IO.Packaging.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Printing.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Resources.Extensions.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Pkcs.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.ProtectedData.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Security.Cryptography.Xml.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Security.Permissions.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Threading.AccessControl.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Controls.Ribbon.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Extensions.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Forms.Design.Editors.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Forms.Design.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Forms.Primitives.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Forms.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Input.Manipulations.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Windows.Presentation.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/System.Xaml.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/UIAutomationClient.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/UIAutomationClientSideProviders.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/UIAutomationProvider.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/UIAutomationTypes.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/WindowsBase.dll | +| /microsoft.windowsdesktop.app.ref/7.0.2/ref/net7.0/WindowsFormsIntegration.dll | +| /netstandard.library/2.0.3/build/netstandard2.0/ref/System.ComponentModel.Composition.dll | +| /newtonsoft.json/12.0.1/lib/portable-net45+win8+wp8+wpa81/Newtonsoft.Json.dll | +| /nunit/3.13.3/lib/netstandard2.0/nunit.framework.dll | diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql new file mode 100644 index 000000000000..91ee82c1c7aa --- /dev/null +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Assemblies.ql @@ -0,0 +1,15 @@ +import csharp + +private string getPath(Assembly a) { + not a.getCompilation().getOutputAssembly() = a and + exists(string s | s = a.getFile().getAbsolutePath() | + result = + s.substring(s.indexOf("GitHub/packages/") + "GitHub/packages/".length() + 16, s.length()) + or + result = s and + not exists(s.indexOf("GitHub/packages/")) + ) +} + +from Assembly a +select getPath(a) diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/Program.cs b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Program.cs new file mode 100644 index 000000000000..39a9e95bb6e3 --- /dev/null +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/Program.cs @@ -0,0 +1,6 @@ +class Program +{ + static void Main(string[] args) + { + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/global.json b/csharp/ql/integration-tests/windows-only/standalone_dependencies/global.json new file mode 100644 index 000000000000..1a974fd253ec --- /dev/null +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/global.json @@ -0,0 +1,5 @@ +{ + "sdk": { + "version": "7.0.102" + } +} \ No newline at end of file diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/standalone.csproj b/csharp/ql/integration-tests/windows-only/standalone_dependencies/standalone.csproj new file mode 100644 index 000000000000..628d03904031 --- /dev/null +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/standalone.csproj @@ -0,0 +1,19 @@ + + + + Exe + net7.0;net6.0;netcoreapp3.1;netstandard2.0;net48 + + + + + + + + + + + + + + diff --git a/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py new file mode 100644 index 000000000000..58074b430b29 --- /dev/null +++ b/csharp/ql/integration-tests/windows-only/standalone_dependencies/test.py @@ -0,0 +1,3 @@ +from create_database_utils import * + +run_codeql_database_create([], lang="csharp", extra_args=["--extractor-option=buildless=true", "--extractor-option=cil=false"]) diff --git a/csharp/ql/src/Stubs/make_stubs_nuget.py b/csharp/ql/src/Stubs/make_stubs_nuget.py index c02d2fad3873..28126b0cf7b2 100644 --- a/csharp/ql/src/Stubs/make_stubs_nuget.py +++ b/csharp/ql/src/Stubs/make_stubs_nuget.py @@ -193,7 +193,7 @@ def run_cmd(cmd, msg="Failed to run command"): pf.write('\n') for pathInfo in pathInfos: - if 'packs/' + framework.lower() in pathInfo.lower(): + if framework.lower() + '.ref' in pathInfo.lower(): copiedFiles.add(pathInfo) shutil.copy2(pathInfos[pathInfo], os.path.join( frameworksDir, framework)) @@ -207,7 +207,7 @@ def run_cmd(cmd, msg="Failed to run command"): pf.write('\n') for pathInfo in pathInfos: - if 'packs/microsoft.netcore.app.ref/' in pathInfo.lower(): + if 'microsoft.netcore.app.ref/' in pathInfo.lower(): copiedFiles.add(pathInfo) shutil.copy2(pathInfos[pathInfo], frameworkDir)