Visual Studio VS2022从类库csproj获取Main可执行文件的目标框架

8ehkhllq  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(219)

我们需要从类库项目的csproj文件中获取Main可执行程序集的TargetFramework。这是为了使类库可以针对net7.0-android。下面的代码失败,因为XmlDocument不能在MSBuild属性函数中执行。
我们如何才能实现我们正在努力做的事情?

<PropertyGroup>
        <MainExecutableTargetFramework>$([System.Xml.XmlDocument]::new().Load("$($(MSBuildStartupDirectory))/$(AssemblyName).csproj").SelectSingleNode("/Project/PropertyGroup/TargetFramework").InnerText)</MainExecutableTargetFramework>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(MainExecutableTargetFramework)' == 'net7.0-android' ">
        <TargetFrameworks>net7.0-android</TargetFrameworks>
    </PropertyGroup>
dauxcl2d

dauxcl2d1#

正如乔纳森提到的,你在你的财产中没有使用:
属性函数语法
只有这些类别:
1、String(示例)属性函数
2、静态属性函数
3、MSBuild属性函数
看看静态属性函数,你会发现只有下面的是允许的:

1、这些系统类的公共静态方法或属性:

System.Byte
System.Char
System.Convert
System.DateTime
System.DateTimeOffset (Available in MSBuild 17.3 and higher)
System.Decimal
System.Double
System.Enum
System.Guid
System.Int16
System.Int32
System.Int64
System.IO.Path
System.Math
System.Runtime.InteropServices.OSPlatform
System.Runtime.InteropServices.RuntimeInformation
System.UInt16
System.UInt32
System.UInt64
System.SByte
System.Single
System.String
System.StringComparer
System.TimeSpan
System.Text.RegularExpressions.Regex
System.UriBuilder
System.Version
Microsoft.Build.Utilities.ToolLocationHelper

2、静态方法和属性:

System.Environment::CommandLine
System.Environment::ExpandEnvironmentVariables
System.Environment::GetEnvironmentVariable
System.Environment::GetEnvironmentVariables
System.Environment::GetFolderPath
System.Environment::GetLogicalDrives
System.Environment::Is64BitOperatingSystem
System.Environment::Is64BitProcess
System.Environment::MachineName
System.Environment::NewLine (Available in MSBuild 17.3 and higher)
System.Environment::OSVersion
System.Environment::ProcessorCount
System.Environment::StackTrace
System.Environment::SystemDirectory
System.Environment::SystemPageSize
System.Environment::TickCount
System.Environment::UserDomainName
System.Environment::UserInteractive
System.Environment::UserName
System.Environment::Version
System.Environment::WorkingSet
System.IO.Directory::GetDirectories
System.IO.Directory::GetFiles
System.IO.Directory::GetLastAccessTime
System.IO.Directory::GetLastWriteTime
System.IO.Directory::GetParent
System.IO.File::Exists
System.IO.File::GetAttributes
System.IO.File::GetCreationTime
System.IO.File::GetLastAccessTime
System.IO.File::GetLastWriteTime
System.IO.File::ReadAllText

因此System.xml.XmlDocument不能在属性中使用。
这是一个处理XML文档的方法,你可以看看这个:
Read launchSettings.json values from MSBuild?

相关问题