使CruiseControl.NET MSBuild任务的工作方式与VS 2008 Build相同

使CruiseControl.NET MSBuild任务的工作方式与VS 2008 Build相同,msbuild,cruisecontrol.net,Msbuild,Cruisecontrol.net,这与以下两个问题类似: 当我从VisualStudio2008构建时,构建成功。如果使用.NET Framework 3.5安装附带的MSBuild从命令行生成,则通常会失败。但是,如果使用随VS2008一起安装的Visual Studio 2008命令提示符,则会成功。我对前两个问题的答案只是部分理解,这似乎是命令行无法实现的原因。我的问题是针对CruiseControl.NET的。我如何应用他们的答案,使CruiseControl.Net MSBuild任务始终成功,即使在将来的更改之后,只

这与以下两个问题类似:

当我从VisualStudio2008构建时,构建成功。如果使用.NET Framework 3.5安装附带的MSBuild从命令行生成,则通常会失败。但是,如果使用随VS2008一起安装的Visual Studio 2008命令提示符,则会成功。我对前两个问题的答案只是部分理解,这似乎是命令行无法实现的原因。我的问题是针对CruiseControl.NET的。我如何应用他们的答案,使CruiseControl.Net MSBuild任务始终成功,即使在将来的更改之后,只要它在VS 2008中正确构建


提前感谢您的帮助

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

1我需要下载并安装Compact Framework 3.5的Power Toys,以便能够构建.NET Compact Framwork 3.5项目。或者,我也可以安装VisualStudio2008专业版

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


由于我让项目从命令行使用MSBuild进行编译,而无需执行任何特殊初始化或使用任何专用命令提示,因此CruiseControl.Net中的MSBuild任务可以在不执行任何特殊操作的情况下工作。希望在命令提示符下使用MSBuild对我来说仍然如此简单,但根据我在问题顶部链接的两个问题,其他人似乎没有这么幸运。

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

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

已在生成服务器上安装VS2010 Pro

在生成服务器上的命令行中,我对项目的.sln文件运行了msbuild:

注意:\build share\是仅用于生成的网络文件共享

一旦按我希望的方式工作,我就将任务添加到我的ccnet.config中:


您能用msbuild命令行发布您面临的错误吗?在您的情况下是否可以使用devenv任务?请查看错误太大,无法发布。我希望避免在CI服务器上安装VS。我现在让它工作了。谢谢
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild \\build-share\dev\projects\TestProject\trunk\TestProject.sln /t:Rebuild /v:diag /p:Configuration=Release
<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>