如何在MSBuild中获取当前的操作系统?

Che*_*149 5 linux msbuild bash .net-core visual-studio-2017

我有一个使用Visual Studio 2017创建的.NET Core 1.1控制台项目.在构建项目之后,我需要运行一个powershell脚本,因此我将以下内容添加到MyProject.csproj文件中:

<Target Name="PostcompileScript" AfterTargets="Build">
    <Exec Command="execute-tasks.ps1" />
</Target>
Run Code Online (Sandbox Code Playgroud)

现在我需要在Linux环境中构建项目,我需要指示MSBuild运行execute-tasks.sh而不是execute-tasks.ps1在Linux中运行.

我相信这可以通过Condition属性实现,但是有一个保存操作系统名称的MSBuild变量吗?

Mar*_*ich 15

$(OS)通常检查变量是否存在Windows_NT:

<Exec Command="./foo.sh" Condition=" '$(OS)' != 'Windows_NT' " />
Run Code Online (Sandbox Code Playgroud)

  • OS 指令的官方文档在哪里?还有哪些其他操作系统选项? (4认同)

Kev*_*oid 10

使用$(OS),如其他答案中所述,可以区分Windows_NTUnix(包括 Linux 和 macOS),但不能区分不同的类 Unix 系统。如果您使用的是 MSBuild 15.3 或更高版本(很有可能),您可能需要考虑使用[MSBuild]::IsOsPlatform()

<Exec Command="./foo.sh" Condition="$([MSBuild]::IsOSPlatform('Linux'))" />
Run Code Online (Sandbox Code Playgroud)

参数可以是任何OsPlatform成员的名称。