以独立于平台的方式从msbuild项目运行.net可执行文件

以独立于平台的方式从msbuild项目运行.net可执行文件,msbuild,mono,nunit,xbuild,Msbuild,Mono,Nunit,Xbuild,我正在开发一个.NET库,我希望构建脚本非常通用,可以从MS.NET framework和Mac/Linux机器上的mono安装运行 这里的问题是运行NUnit。我已经下载了nunit可执行文件并将其放在lib文件夹中。为了在我的Mac上执行它,我必须在构建脚本中编写以下内容 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ... <Target Name="Test" Aft

我正在开发一个.NET库,我希望构建脚本非常通用,可以从MS.NET framework和Mac/Linux机器上的mono安装运行

这里的问题是运行NUnit。我已经下载了nunit可执行文件并将其放在lib文件夹中。为了在我的Mac上执行它,我必须在构建脚本中编写以下内容

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  ...

  <Target Name="Test" AfterTargets="Compile">
    <Exec Command="mono lib/NUnit/nunit-console.exe $(OutputAssembly)" />
  </Target>
</Project>

...
关键是“mono”部分,它将构建脚本与mono框架联系起来。有没有一种方法可以让我编写这个构建脚本,让它同时在MS.NET框架和Mono框架上运行


现在我的问题与努尼特有关。但它也可以是任何其他.NET可执行文件。

您可以使用平台条件,如下所示:

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

有条件地执行。等效的mono条件是“Unix”或“OSX”,而不是“windowsnt”

有关更多信息,请查看此处:

以下(经测试的)提案如何:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <ManagedExeLauncher Condition="('$(OS)' != 'Windows_NT')">mono </ManagedExeLauncher>
     ...
  </PropertyGroup>      

  ...

  <Target Name="Test" AfterTargets="Compile">
    <Exec Command="$(ManagedExeLauncher)lib/NUnit/nunit-console.exe $(OutputAssembly)" />
  </Target>
</Project>

单声道
...
...

在您正在链接的页面中:“xbuild在非Windows平台上,甚至在MacOS上,都会将其设置为“Unix”