【问题标题】:How to build a VS2010 C++ Project on a BuildServer如何在 BuildServer 上构建 VS2010 C++ 项目
【发布时间】:2011-03-03 20:46:47
【问题描述】:

我有一个带有托管 C++ 程序集的 .NET 解决方案,基于 VS2010 创建的 Targeting .NET 3.5。命令:

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MyProject.sln

在我的开发机器上编译解决方案。

在我的 BuildServer 上出现此错误:

构建失败。

"F:\CruiseControl.NET\Projects\MyProject\MyProject.sln" (默认目标)(1)-> “F:\CruiseControl.NET\Projects\MyProject\MyProject\MyProject.csproj” (默认目标)(2)-> "F:\CruiseControl.NET\Projects\MyProject\MyProjectMAPIHelper\MyProjectMAPIHelper.vcxproj" (默认目标)(3) ->
F:\CruiseControl.NET\Projects\MyProject\MyProjectMAPIHelper\MyProjectMAPIHelper.vcxproj(23,3): 错误 MSB4019:导入的项目 "C:\程序 文件\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props" 没有找到。确认路径 在<Import> 声明中是 正确,并且该文件存在于 磁盘。

0 Warning(s)
1 Error(s)

在我的开发机器上声明的文件

“C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props”

存在。在我的构建服务器上没有。

当我尝试复制此文件(以及同一目录中的所有其他文件)时,发生了其他错误。所以这是错误的方式。

编辑:其他错误意味着:当我在构建服务器上复制文件“Microsoft.Cpp.Default.props”时,MSBuild 正在声明其他文件。这告诉我,仅仅复制丢失的文件并不是构建环境所期望的。我正在寻找一个 MSI/任何我可以安装在我的构建服务器上的包,并且任何 C++ 项目都将构建。安装 SDK 不是诀窍。或者我在 SDK 安装过程中做错了什么。或者仅使用 SDK 无法编译托管 C++ VS2010 解决方案。

我相信“其他错误”与我的问题无关。我的问题是:“如何正确设置我的构建环境”。 /编辑

到目前为止我做了什么:

是否有任何提示和技巧如何正确配置我的项目以在我的开发机器上使用 VS2010在我的构建服务器上编译?还有什么要安装的吗(除了VS2010)?

谢谢,亚瑟

【问题讨论】:

  • 问题:您是硬锁在 CC.Net 中,还是有能力考虑升级到其他东西?
  • 我认为改用另一种持续集成技术不会改变任何事情。正如 Arthur 所说,使用普通 MSBuild 构建失败。这似乎是 .Net 4.0 与 SDK 7.0A 的联系比应有的更紧密的问题。
  • 是的,没错。使用 MSBuild 在命令行上编译失败。 CC.NET 尚未参与。

标签: c++ msbuild build build-automation


【解决方案1】:

目前,安装 VS 2010 是您唯一安全的选择。将更新 Windows SDK 以启用您的方案,但我没有具体的发布日期。在此之前,您需要使用 C++ 工具安装 VS 2010,以便使用 C++ 项目构建您的 2010 解决方案。确保您通过他们的team blog 和/或MSDN Forum 让 C++ 团队知道对这种情况的不满程度。

即使在安装 VS 2010 之后,您也可能需要调用适当的 vcvars*.bat 文件来正确设置您的环境变量。

【讨论】:

  • 悲伤的消息。如果安装 SDK 不起作用,我将不得不在我的构建机器上安装 VS 2010。悲伤,但显然是真的。
  • 痛苦之后,我发现 7.1 SDK 确实安装了必要的设置如果您在安装过程中选择了正确的选项并且不要试图智取自己:)。查看stackoverflow.com/questions/4742325/…的简短回答
  • 这个答案如何被接受?构建服务器的目的不是必须安装 Visual Studio...@BlueMonkMN:您是否正在运行一台装有 Windows 7 或服务器版本的机器?
  • @Brandon 我相信我们正在运行 Windows Server,尽管我怀疑这会产生很大的不同。但是,对于较新版本的 Visual Studio,我已经放弃尝试在没有 Visual Studio 的情况下设置构建环境,因为 Visual Studio Express 是免费的,并且提供了一个足够的构建环境,没有所有这些麻烦。
  • 这就是我正在运行的:Server 2008。不过,我无法理解这个过程是如何如此复杂的。我已经安装了 .NET 3.5、4.0、4.5、4.5.1、MSBuild 12.0、任何我可以使用的 VC Redist、Windows SDK for Server 2008 和 Visual Studio 2010 Full(不是 express)和 MSBuild 仍然每次都失败一步到位。
【解决方案2】:

为什么不想在构建服务器上安装 VS2010?如果是许可,它是按开发人员而不是按安装许可的,所以我有理由确定您可以在不购买另一个副本的情况下进行许可 - 或者,在最坏的情况下,您可以安装应该至少安装您的配置位的快速版本缺少,因此您可以使用平台 SDK 编译器。

如果您仍然遇到 msbuild 问题,您可以使用 devenv.com /build,它完全复制了 VS 构建环境。

【讨论】:

  • 安装 VS2010 将是我最后的选择。
  • @Rup 在构建服务器上安装 VS 是个糟糕的主意。这与构建服务器的用途完全相反——提供一个干净的、类似客户的环境(现有的 DLL 等)。如果您认为在构建服务器上安装 VS 没有问题,那么您还需要建议在每个客户盒子上安装 VS。
  • @mafutrct 我知道您来自哪里,但没有理由必须在构建服务器上托管和测试应用程序!早在我写到我们的环境是用于单元测试和一些集成测试的构建服务器,但会自动部署到另一台服务器(没有 VS)以进行实际测试时。
  • @Rup 重点是安装 VS 让机器变得特别。它生成的二进制文件(特别是客户端应用程序)可能依赖于仅在安装了 VS 的机器上可用的 DLL,因此它可以在构建服务器和开发盒上运行,但对大多数最终用户来说失败。我有很多,尽管 10 年前无可否认。
  • @mafutrct 好的,很公平 - 我只见过调试版本的问题,虽然没有发布。没错,在带有 VS 的机器上运行可以保证所有运行时库部分都已安装,尽管您可能忘记将其放入安装程序中,但如果它在发布版本中抛出额外的依赖项,我会感到惊讶。
【解决方案3】:
猜你喜欢
  • 2012-04-27
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2012-01-28
  • 2011-05-25
  • 2014-03-07
相关资源
最近更新 更多