2017-04-19 154 views
2

我有一个.NET 1.1核心控制台项目与Visual Studio 2017创建 建设项目后,我需要运行PowerShell脚本,所以我增加了以下的MyProject.csproj文件:如何获取MSBuild中的当前操作系统?

<Target Name="PostcompileScript" AfterTargets="Build"> 
    <Exec Command="execute-tasks.ps1" /> 
</Target> 

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

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

回答

6

变量是$(OS),通常核对存在或不存在Windows_NT

<Exec Command="./foo.sh" Condition=" '$(OS)' != 'Windows_NT' " /> 
0

您可以使用目标是这样的。似乎OS版本不是MSBUILD中的环境变量。

<Target Name="AfterBuild"> 
      <Exec Command="foo.exe arg1 arg2" Condition=" '$(OS)' == 'Windows_NT' " /> 
</Target> 

或另一个例子,这可能是麻烦的。

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="OSVersion" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <OsVersion>$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\[email protected]).$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\[email protected])</OsVersion> 
    </PropertyGroup> 
    <Target Name="OSVersion"> 
    <Message Text="Version: $(OsVersion)" /> 
    </Target> 
</Project> 
+1

只是注册表访问对* nix系统没有帮助。即使在Windows上运行,它也只适用于使用完整框架msbuild,而不是CLI附带的.net核心版本。 –

+0

好吧,我没有意识到.NET的核心版本。 – LethalProgrammer

相关问题