我有一个使用Visual Studio 2017创建的.NET Core 1.1控制台项目。
构建项目后,我需要运行一个powershell脚本,所以我将以下内容添加到scrollView.wantsLayer = true
scrollView.layer?.masksToBounds = true
scrollView.contentView.wantsLayer = true
scrollView.contentView.layer?.masksToBounds = true
文件中:
MyProject.csproj
现在我需要在Linux环境中构建项目,我需要指示MSBuild在Linux中运行时运行<Target Name="PostcompileScript" AfterTargets="Build">
<Exec Command="execute-tasks.ps1" />
</Target>
而不是execute-tasks.sh
。
我相信这可以通过execute-tasks.ps1
属性实现,但是否有一个包含操作系统名称的MSBuild变量?
答案 0 :(得分:11)
变量为$(OS)
,通常根据是否为Windows_NT
进行检查:
<Exec Command="./foo.sh" Condition=" '$(OS)' != 'Windows_NT' " />
答案 1 :(得分:1)
如其他答案中所述,使用$(OS)
可以区分Windows_NT
和Unix
(包括Linux和macOS),但不能区分不同的类Unix系统。如果您使用的是MSBuild 15.3或更高版本(很有可能),则可能要考虑使用[MSBuild]::IsOsPlatform()
:
<Exec Command="./foo.sh" Condition="$([MSBuild]::IsOSPlatform('Linux'))" />
该参数可以是任何OsPlatform
成员的名称。
答案 2 :(得分:0)
你可以使用这样的目标。似乎操作系统版本不是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\CurrentVersion@CurrentVersion).$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion@CurrentBuildNumber)</OsVersion>
</PropertyGroup>
<Target Name="OSVersion">
<Message Text="Version: $(OsVersion)" />
</Target>
</Project>