我有一个在VS 2008中正常运行的项目,然后我们安装并开始使用TFS Build,然后我们升级到TFS 2010.一切都很好并且构建正确(在我实现了我们的新构建过程之后)从任何远程Visual Studio 2010客户端单击构建启动,一切都非常好。 Visual Studio不需要安装在Build Agent上。我非常努力(非常很难)不在构建代理上安装Visual Studio,因为我的理解是没有必要,而且我们没有许可将它安装在非开发机器上
现在我尝试将解决方案升级到VS 2010,仍然以.NET 3.5为目标,因为它是针对SQL Server CLR过程的程序集,而SQL Server还不支持.NET 4.0。但我根本无法在TFS Build下进行构建。我似乎无法从TFS Build和MS Build命令行获得一致的错误消息,但我认为它与Microsoft.Cpp.Targets不在C:\ Program Files \ MSBuild \中有关,因为我没有没有安装Visual Studio。我确实安装了Microsoft Windows SDK 7.1,这样我就可以为其他一些.NET 4.0项目运行像svcutil这样的.NET 4.0 SDK工具,但似乎没有安装这个构建所需的东西。 TFS构建错误给出的是:
C:\ TFSBld [...] \ GenerateLanguage \ GenerateLanguage.vcxproj(46,3): 错误MSB4019:导入的项目 “C:\ Microsoft.Cpp.Default.props”是 未找到。确认路径 声明是正确的, 并且该文件存在于磁盘上。
当我点击该错误时,它会将我带到vcxproj文件中的这一行:
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
我在这个项目中真正需要做的就是运行resgen从resx文件生成资源文件,并将它们编译成sattelite程序集。我正在使用makefile构建来执行此操作,手动运行resgen(我认为这是因为我无法找到将sattelite程序集编译为独立解决方案的方法),然后将它们编译成DLL(I不记得现在怎么工作,但我认为是手动运行AL.exe从资源文件编译DLL文件)。所以基本上我只需要运行命令行来构建这个项目,我似乎找不到合理的方法来做到这一点而不抛弃整个项目并编辑TFS构建脚本来运行一堆硬编码的命令行代替。必须有更好的方法。
我整天都在这里,并尝试编写自己的.targets文件和.xml属性表来取代标准文件,但它已经超出了我的想象。我试过简单地删除这些行,但是然后MSBuild抱怨没有“Build”目标。我尝试在vcxproj文件中添加一个虚拟对象,但是它似乎没有运行完成所有工作的构建前和构建后步骤。
答案 0 :(得分:15)
Microsoft Windows SDK 7.1有几个安装选项。仅检查“.NET开发”子项“工具”显然不足以构建vcxproj项目,即使它们不包含任何C ++代码(仅在构建前和构建后步骤)。添加“Visual C ++编译器”选项并完全选择“智能感知和参考组件”复选框将安装必要的文件和设置。我不确定两者是否都是必要的,但这种组合对我有用。
答案 1 :(得分:2)
我设计了一个有点复杂但功能性的工作,涉及以下步骤。
答案 2 :(得分:1)
BlueMonkMN的改进替代方案是添加
<PropertyGroup>
<VCTargetsPath Condition="'$(VCTargetsPath)' == ''">[path_to_the_fileset_listed]</VCTargetsPath>
</PropertyGroup>
作为vcxproj顶部附近的1级孩子。
路径可以包含环境变量或包含变量的其他一些众所周知的路径。
这样可以减少入侵,并且比更改大量行更容易还原。
答案 3 :(得分:0)
为VCTargetsPath
添加环境变量的更简单方法:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
Control Panel > System > Advanced Settings > Advanced > Environment Variables
VCTargetsPath