From ebc4aaa3dba3833495f30d0047328fc76b23906c Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 16 Nov 2023 15:59:54 +0000 Subject: [PATCH] C#: Load `TargetFramework` from project files --- csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs index 71522859871..0802a17b01a 100644 --- a/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs +++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Project.cs @@ -23,6 +23,8 @@ namespace Semmle.Autobuild.Shared public Version ToolsVersion { get; private set; } + public string? TargetFramework { get; private set; } + private readonly Lazy>> includedProjectsLazy; public override IEnumerable IncludedProjects => includedProjectsLazy.Value; @@ -51,7 +53,8 @@ namespace Semmle.Autobuild.Shared { if (root.HasAttribute("Sdk")) { - DotNetProject = true; + this.DotNetProject = true; + this.TargetFramework = root.SelectSingleNode("//Project/PropertyGroup/TargetFramework/text()")?.Value; return; } @@ -72,11 +75,12 @@ namespace Semmle.Autobuild.Shared includedProjectsLazy = new Lazy>>(() => { + var mgr = new XmlNamespaceManager(projFile.NameTable); + mgr.AddNamespace("msbuild", "http://schemas.microsoft.com/developer/msbuild/2003"); + var ret = new List>(); // The documentation on `.proj` files is very limited, but it appears that both // `` and `` is valid - var mgr = new XmlNamespaceManager(projFile.NameTable); - mgr.AddNamespace("msbuild", "http://schemas.microsoft.com/developer/msbuild/2003"); var projectFileIncludes = root.SelectNodes("//msbuild:Project/msbuild:ItemGroup/msbuild:ProjectFile/@Include", mgr) ?.OfType() ?? Array.Empty(); var projectFilesIncludes = root.SelectNodes("//msbuild:Project/msbuild:ItemGroup/msbuild:ProjectFiles/@Include", mgr)