如何在构建服务器上构建一个VS2010 C++项目

8

我有一个使用VS2010创建的.NET解决方案,其中包含一个针对.NET 3.5的托管C++程序集。命令如下:

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

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

但是在我的构建服务器上出现了以下错误:

Build FAILED.

"F:\CruiseControl.NET\Projects\MyProject\MyProject.sln" (default target) (1) -> "F:\CruiseControl.NET\Projects\MyProject\MyProject\MyProject.csproj" (default target) (2) -> "F:\CruiseControl.NET\Projects\MyProject\MyProjectMAPIHelper\MyProjectMAPIHelper.vcxproj" (default target) (3) ->
F:\CruiseControl.NET\Projects\MyProject\MyProjectMAPIHelper\MyProjectMAPIHelper.vcxproj(23,3): error MSB4019: The imported project "C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

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 解决方案。
我相信 "其他错误" 与我的问题无关。我的问题是:"如何正确设置我的构建环境"。
迄今为止我已经做了什么:
  • 我已安装最新的Win7 SDK (链接)
  • 我正在针对.net 3.5
  • 我尝试过玩弄平台工具集属性-但那只是玩玩而已
  • 在我的解决方案中有一个托管的C++程序集(我的问题)
  • 我正在使用MSBuild 4.0,因为新的VS2010项目文件无法使用MSBuild 3.5编译
  • 我正在使用CC.NET。编译失败在CC.NET 命令行上。所以这不应该是一个CC.NET的问题。

有没有任何技巧和窍门如何正确配置我的项目,在我的开发机上使用VS2010进行编译 在我的构建服务器上?除了VS2010外还需要安装其他内容吗?

谢谢,Arthur


问题:您是否被硬锁定在CC.Net上,还是有能力考虑升级到其他东西? - Caladain
2
我认为更换另一种持续集成技术不会改变任何事情。正如Arthur所说,使用普通的MSBuild构建失败。这似乎是与.Net 4.0更紧密地绑定到SDK 7.0A比应该的更大的问题。 - Samuel Jack
是的,这是真的。使用MSBuild命令行编译失败。目前尚未涉及CC.NET。 - Arthur
3个回答

4
现阶段,安装VS 2010是您唯一的安全选择。Windows SDK将会更新以支持您的情况,但是我没有一个特定的发布日期。在那之前,您需要安装带有C++工具的VS 2010,以便使用C++项目构建您的2010解决方案。请确保通过他们的 团队博客 和/或 MSDN论坛 让 C++ 团队了解您对这种情况的不满。
即使在安装了VS 2010后,您可能仍然需要调用相应的vcvars*.bat文件来正确设置您的环境变量。

坏消息。如果安装SDK没有起作用,我将不得不在我的构建机器上安装VS 2010。悲伤,但显然是真的。 - Arthur
1
经过很多痛苦,我发现7.1 SDK会在安装期间选择正确的选项且不试图自作聪明时安装必要的设置。请参阅https://dev59.com/om445IYBdhLWcg3wq8Pp#4768328的简短答案。 - BlueMonkMN
这个答案怎么能被接受呢?构建服务器的目的不是为了安装Visual Studio... @BlueMonkMN:你运行的是Windows 7还是服务器版本的机器? - Brandon
@Brandon 我相信我们当时使用的是Windows Server,尽管我不认为这会有太大的区别。然而,随着更近期的Visual Studio版本,我已经放弃了尝试在没有Visual Studio的情况下设置构建环境的想法,因为Visual Studio Express是免费的,并且提供了一个足够的构建环境,避免了所有这些麻烦。 - BlueMonkMN
这是我正在运行的:Server 2008。但我无法理解为什么这个过程如此复杂。我已经安装了.NET 3.5、4.0、4.5、4.5.1、MSBuild 12.0、任何VC Redist,还有适用于Server 2008的Windows SDK和完整版Visual Studio 2010(而不是Express),但MSBuild仍然在每个步骤中失败。 - Brandon

1

为什么你不想在构建服务器上安装VS2010?如果是许可证问题,它是按开发人员头数而不是按安装次数授权的,所以我相当确定你可以在不购买另一个副本的情况下安装 - 或者,在最坏的情况下,你可以安装Express版本,它至少应该安装你缺失的配置位,这样你就可以使用平台SDK编译器。

如果你仍然遇到msbuild的问题,那么你可以使用devenv.com /build来完全复制VS构建环境。


2
安装VS2010将是我的最后选择。 - Arthur
在构建服务器上安装VS是一个可怕的想法。这恰恰与构建服务器的用途相反 - 提供一个干净、类似于客户端的环境(现有的DLL等)。如果您认为在构建服务器上安装VS没有问题,那么您也需要建议在每个客户端上安装VS。 - mafu
@mafutrct,我理解你的想法,但是没有必要在构建服务器上托管和测试应用程序!当我写这段代码时,我们的环境是一个用于单元测试和一些集成测试的构建服务器,但是真正的测试是通过自动部署到另一台没有安装 VS 的服务器进行的。 - Rup
@Rup 的意思是安装 VS 会使机器变得特殊。它会生成二进制文件(具体来说是客户端应用程序),这些文件可能依赖于仅在安装了 VS 的机器上才可用的 DLL,因此它将在构建服务器和开发框中工作,但对大多数最终用户而言则会失败。虽然我经历过很多次这种情况,但要承认这是10年前的事情了。 - mafu
@mafutrct 好的,说得对 - 我只在调试版本中遇到过这个问题,而不是发布版本。你说得对,在安装了VS的机器上运行可以保证所有运行时库部分都已安装,但你可能忘记将其放入安装程序中,但我会感到惊讶如果它在发布版本中抛出额外的依赖关系。 - Rup


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接