应该使用什么 MSBuild 条件来检测目标 OS?
What MSBuild condition should be used to detect target OS?
应该使用 PropertyGroup/ItemGroup 的什么条件表达式来区分目标 OS(dotnet publish
的 -r
参数)?例如。在这些命令上:
dotnet publish -c Release -r win-x86 --self-contained false
dotnet publish -c Release -r linux-arm --self-contained false
目前我不得不使用不同的配置并使用这些命令进行构建:
dotnet publish -c ReleaseWin32 -r win-x86 --self-contained false
dotnet publish -c ReleaseLinux -r linux-arm --self-contained false
我知道 MSBuild 甚至可以定义目标 .NET Core/Framework 版本(例如 Condition="'$(TargetFramework)' == 'netcoreapp3.1'"
),所以可能还应该定义目标 OS(类似于 Condition="'$(TargetOS)' == 'win-x86'"
) .
是否可能以某种方式直接检测 CSPROJ 文件中的目标 OS,而不使用 -c ReleaseWin32
/ -c ReleaseLinux
来构建不同平台?很快,MSBuild 语法是否有任何关于目标 OS 的条件?
CLI 的 -r linux-arm
转换为 MSBUild -property:RuntimeIdentifier=linux-x64
因此您可以在以下条件下使用 $(RuntimeIdentifier)
:
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'linux-arm'">
</PropertyGroup>
<ItemGroup Condition="$(RuntimeIdentifier.StartsWith('win'))">
</ItemGroup>
应该使用 PropertyGroup/ItemGroup 的什么条件表达式来区分目标 OS(dotnet publish
的 -r
参数)?例如。在这些命令上:
dotnet publish -c Release -r win-x86 --self-contained false
dotnet publish -c Release -r linux-arm --self-contained false
目前我不得不使用不同的配置并使用这些命令进行构建:
dotnet publish -c ReleaseWin32 -r win-x86 --self-contained false
dotnet publish -c ReleaseLinux -r linux-arm --self-contained false
我知道 MSBuild 甚至可以定义目标 .NET Core/Framework 版本(例如 Condition="'$(TargetFramework)' == 'netcoreapp3.1'"
),所以可能还应该定义目标 OS(类似于 Condition="'$(TargetOS)' == 'win-x86'"
) .
是否可能以某种方式直接检测 CSPROJ 文件中的目标 OS,而不使用 -c ReleaseWin32
/ -c ReleaseLinux
来构建不同平台?很快,MSBuild 语法是否有任何关于目标 OS 的条件?
CLI 的 -r linux-arm
转换为 MSBUild -property:RuntimeIdentifier=linux-x64
因此您可以在以下条件下使用 $(RuntimeIdentifier)
:
<PropertyGroup Condition="'$(RuntimeIdentifier)' == 'linux-arm'">
</PropertyGroup>
<ItemGroup Condition="$(RuntimeIdentifier.StartsWith('win'))">
</ItemGroup>