1

通常,当开发人员在我们公司的机器上本地编译某个混合 C++/C# 解决方案时,他们会使用 .vssettings 配置文件。此配置文件中包含的内容之一是对 Lib 和 Include 文件的各种目录路径的引用。

但是,我们的 buildAgent 机器(使用 TeamCity)被设置为无菌的,并且在其上安装了构建任何给定解决方案/项目所需的最低限度。这意味着上面示例的混合 C++/C# 项目将无法访问设置了包含搜索路径等内容的 IDE 配置。TC 通过允许您为任何给定的 buildConfiguration(甚至通过 buildAgent)设置各种变量来解决这个问题......

但是如何在 TC 中获得 WORK 的包含搜索路径?我正在从 Source Control (Perforce) 复制我想要 Included (1)的本地副本,然后尝试定义环境变量(2) - 但 TC 未能构建(3)

我确定我的某些配置有误,但是对于我的生活来说,我无法弄清楚是什么!


非常感激任何的帮助,

布隆


(1) VSC 客户端映射 - Perforce

//depot/OpenSource/Boost-1.33.0/boost/... //team-city-agent/OpenSource/boost/...


(2) buildConfig 环境变量定义

env.Include = %system.teamcity.build.checkoutDir%\OpenSource


(3) TC 构建日志片段

[16:57:39]:[项目“xxx.sln”(构建目标):] e:\buildagent\work\ef1853a454da9d94\xxx\rowsbase.cpp(5, 0):错误 C1083:无法打开包含文件:'boost/dynamic_bitset.hpp':没有这样的文件或目录

4

3 回答 3

4

首先,您应该尝试在命令行上使用 msbuild 或 vcbuild 自己编译解决方案,因为 TeamCity 会执行类似的操作。如有必要,将 msbuild 文件夹添加到 Path 系统变量。然后打开命令行并输入:

msbuild.exe YourSolution.sln

或者

msbuild.exe YourSolution.sln /p:Configuration=Release

取决于您是要在调试模式还是发布模式下这样做。这应该给出相同的 C1083 错误。

这是修复:

  1. 添加你需要的目录的路径添加一个环境变量(其实就是系统变量),我建议你调用INCLUDE。

  2. 打开文件夹 .../Microsoft Visual Studio 9.0/VC/vcpackages/ 中的文件 VCProjectEngine.dll.config.xml。

将 INCLUDE 系统变量添加到包含行。对我来说,它来取代: Include="$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)\include;$(FrameworkSDKDir)include"

与:包括=“$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)\include;$(FrameworkSDKDir)include;$(INCLUDE)”

  1. 测试它是否有效:打开一个新的命令行(需要在更改环境变量后将其考虑在内)并尝试构建您的解决方案,如上所示。这对我使用 #include 的文件构建 C++ 解决方案很有用。

  2. 现在让我们也让它在 TeamCity 中工作。您可以在此时运行 TC 构建以查看它是否可以,但它不适合我。转到 TC 构建配置的“属性和环境变量”,并添加一个名为 INCLUDE 的环境变量,其值与上面的 INCLUDE 系统变量中的路径相同。

现在这应该可以了。希望能帮助到你。

于 2009-06-29T01:57:22.673 回答
1

将构建代理服务设置为作为非“本地系统”帐户运行解决了我的问题。

于 2010-07-23T20:03:45.090 回答
0

我遇到了一个问题,我的 C++ 项目将在构建代理上的 Visual Studio 中构建,但在通过 TC 构建时它们失败了。构建代理正在运行 Windows,并且代理作为服务运行(TeamCity 构建代理服务)。问题是该服务作为“本地系统”而不是配置 Visual Studio 的用户运行。我更改了服务,因此它将以“构建”用户身份登录,并且一切正常。

于 2010-05-05T22:40:47.423 回答