【发布时间】:2014-07-29 23:49:35
【问题描述】:
我正在尝试彻底检查我的项目的构建过程。我们有大约 330 个 Visual C++ 项目,我们在去年从 Visual Studio 2005 升级到了 Visual Studio 2013。我想利用 MSBuild 来改进我们现在拥有的非常串行的构建脚本的构建时间。我已经完成了粗略的第一次通过,并将发布版本的构建时间从约 2 小时减少到约 20 分钟。在执行此操作的过程中,我将很多常见的项目设置合并到一个.props file 中。在这样做的过程中,我遇到了一个绊脚石。
我希望将平台工具集从一个 VSProps 文件继承到包含它的所有项目。在我创建的新 .props 文件的顶部,我放了以下内容:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="Configuration">
<PlatformToolSet>v120</PlatformToolSet>
</PropertyGroup>
<PropertyGroup Label="UserMacros" />
然后我从各个项目文件中删除了相应的<PlatformToolSet>v120</PlatformToolset>。
唉,事情已经开始走下坡路了。项目(在 Visual Studio 2013 中)现在在解决方案资源管理器中显示类似 CoreGeometry (Visual Studio 2010) 的内容,并且项目本身似乎想要引用 v100 平台工具集。当我构建时,它会向我抱怨:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(362,5): warning MSB8003: Could not find WindowsSDKDir variable from the registry. TargetFrameworkVersion or PlatformToolset may be set to an invalid version number.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(341,5): error MSB6006: "CL.exe" exited with code -1073741515.
我能够解决这个问题的唯一方法是在 .vcxproj 上手动设置 PlatformToolset,这并不可怕,我只是有点恼火,其他所有属性似乎都继承了,但 PlatformToolset 没有.
我的问题是: 我可以使用 .props 文件将通用 PlatformToolSet 继承到未指定平台工具集的 .vcxproj 中吗?
第二个问题:我是否应该以这种方式搞乱平台工具集,还是让自己面临以后维护噩梦的风险?
【问题讨论】:
-
对于 VS2017,如果我将
PlatformToolset放在 *.vcxproj 文件旁边的 "Directory.Build.props" 文件中,它似乎对我有用。这是因为“Directory.Build.props”在导入层次结构的早期被隐式导入(在“Microsoft.Cpp.Default.props”中导入的“Microsoft.Common.props”中)。请注意,某些设置在此文件中不起作用,例如。 G。IncludePath.
标签: visual-studio build msbuild