【问题标题】:Make CruiseControl.NET MSBuild Task Work The Same As VS 2008 Build使 CruiseControl.NET MSBuild 任务与 VS 2008 Build 相同
【发布时间】:2010-09-24 06:42:52
【问题描述】:

这类似于这两个问题:

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 中正确构建?

提前感谢您的帮助!

【问题讨论】:

  • 您能否发布您在使用 msbuild 命令行时遇到的错误?在您的情况下可以使用 devenv 任务吗? (见confluence.public.thoughtworks.org/display/CCNET/…
  • 错误太大,无法发布。我想避免在 CI 服务器上安装 VS。我现在开始工作了。谢谢。

标签: msbuild cruisecontrol.net


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    这是我为解决类似问题但使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多