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

时间:2011-10-12 16:01:26

标签: msbuild mono nunit xbuild

我正在研究.NET库,我希望构建脚本非常通用,它既可以从MS .NET框架运行,也可以从Mac / Linux机器上的单声道安装运行。

这里的问题是运行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>

事情是“单声道”部分,它将构建脚本绑定到单声道框架。有没有办法可以编写这个构建脚本,以便它可以在MS .NET框架和Mono框架上运行?

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

2 个答案:

答案 0 :(得分:2)

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

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

有条件地执行。等效单声道条件可以是“Unix”或“OSX”而不是“Windows_NT”。

有关详细信息,请查看此处: http://www.mono-project.com/Porting_MSBuild_Projects_To_XBuild#Platform_specific_items

答案 1 :(得分:0)

以下(已测试)提案如何:

<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>