使CruiseControl.NET MSBuild任务与VS 2008 Build相同

时间:2010-09-24 06:42:53

标签: msbuild cruisecontrol.net

这类似于以下两个问题:

Why does MSBuild fail from the command line where VS2008 succeeds?

How to get cmd line build command for VS solution?

当我从Visual Studio 2008构建时,构建成功。如果我使用.NET Framework 3.5安装附带的MSBuild从命令行构建,它通常会失败。但是,如果我使用随VS2008安装的Visual Studio 2008命令提示符,则会成功。我联系到的前两个问题的答案(我只是部分理解)似乎是命令行失败的原因。我的问题是CruiseControl.NET特有的。我如何应用他们的答案,以便CruiseControl.Net MSBuild任务在未来的更改中始终成功,只要它在VS 2008中正确构建?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

第一步是从命令行使用MSBuild正确构建项目。对我来说,这是在CI服务器上安装一些缺少的依赖项,我现在将列出。

1)我需要下载并安装Power Toys for Compact Framework 3.5才能构建.NET Compact Framwork 3.5项目。或者我可以安装Visual Studio 2008专业版。

2)我缺少SQL Server Compact 3.5。下载并安装此Windows Mobile后,仍无法找到依赖项。我通过在我的项目的存储库中包含SqlServerCe.dll文件的副本并更改对该文件的所有引用来使用从存储库下载的文件而不是期望系统知道在哪里找到此文件来解决这个问题。或者安装Visual Studio 2008 Professional Edition可能已经解决了这个问题,而不需要在我的存储库中包含dll的副本,但我不确定。

由于我从命令行使用MSBuild进行编译而无需进行任何特殊初始化或使用任何专门的命令提示,因此CruiseControl.Net中的MSBuild任务无需执行任何特殊操作。希望在命令提示符下使用MSBuild对我来说将继续如此直截了当,但根据我在问题顶部链接的两个问题,其他人似乎并不那么幸运。

答案 1 :(得分:0)

恕我直言,如果您无法让您的应用程序从命令行进行干净的构建,我建议修复该问题,而不是修复问题的症状。

以下是我使用VS2010解决类似问题的方法:

在构建服务器上安装VS2010 Pro

从命令行,在我的构建服务器上,我在项目的.sln文件上运行了msbuild:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild \\build-share\dev\projects\TestProject\trunk\TestProject.sln /t:Rebuild /v:diag /p:Configuration=Release

注意:\ build-share \是一个仅用于构建的网络文件共享。

一旦按照我想要的方式工作,我将任务添加到我的ccnet.config:

<project ...>
  ...
  <tasks>
    ...
    <msbuild>
      <executable>c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe</executable>
      <workingDirectory>\\build-share\dev\projects\TestProject\trunk</workingDirectory>
      <projectFile>TestProject.sln</projectFile>
      <buildArgs>/p:Configuration=Release /v:diag /t:rebuild</buildArgs>
      <timeout>300</timeout>
    </msbuild>
    ...
  </tasks>
</project>