Visual Studio 在转换为 2013 的项目上使用较旧的 2012 编译器
Posted
技术标签:
【中文标题】Visual Studio 在转换为 2013 的项目上使用较旧的 2012 编译器【英文标题】:Visual Studio using older 2012 compiler on a project converted to 2013 【发布时间】:2015-10-21 19:01:30 【问题描述】:我从 VS2012 继承了一个(小型)构建系统,我们的团队希望将其带到 VS2013。我已经在解决方案上运行向导以“转换”到 2013,这已经尽职尽责地将各种 .vcxproj 文件中的 VisualStudioVersion 和 Project ToolsVersion 更改为“12.0”,并在这里和那里添加了一些额外的字段,没有报告错误或警告。
但是,IDE 仍将这些项目显示为 2012:
Solution 'foo'
Bar (Visual Studio 2012)
IDE 仍然允许我“升级”这些项目。我确实注意到转换过程也没有触及任何 .props 文件,我已经完成并手动更新了它们,但它似乎仍然没有使用最新版本的编译器,IDE 仍然很困惑——或者不是吨。
我是这里的 MSBuild 新手,所以也许这只是某个地方的一个简单的缺失标志 - 希望是?
此外,我在首次构建时收到大量架构警告,但我相信这是我研究中的一个已知功能。
我还应该在这里查看什么?
【问题讨论】:
是否可以在此处添加任何受影响项目的内容,以便我们自己查看?也许还有一个问题 - 受影响的 vcxproj 文件中PlatformToolset
元素的值是多少?
我会发布我可以发布的内容。给我几个……
【参考方案1】:
确保每个配置属性组(即定义构建配置的每个组)在其 PlatformToolset 元素中以 2013 编译器为目标:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PlatformToolset>v120</PlatformToolset>
...
</PropertyGroup>
还要检查您没有重复的属性组 - 任何属性组都应该只有一个实例具有相同的 Condition 和 Label 属性。由于平台和配置的合并和插入/删除,.vcxproj 文件可能会随着时间的推移而变得支离破碎,重复的组有效地取消了文件前面定义的配置元素。将重复的属性组合并为一个组。
如果您在某个 props 文件的宏中定义工具集版本,请确保它是 v120。
还要检查您的 props 文件是否与您期望的所有项目配置相关联。您可以查看每个配置的 vcxproj 文件的 ImportGroup 元素中直接包含哪些道具,或者查看 Visual Studio 中的属性管理器 - 展开每个配置|平台节点以查看已包含的道具文件列表.
最后,如果你的项目支持 CLR,请将框架版本设置为 v4.5.1:
<Project>
<PropertyGroup Label="Globals">
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
...
</PropertyGroup>
</Project>
【讨论】:
我很确定每个 PlatformToolset 值确实设置为 v120,但我会确定。这是我开始的第一个地方。还将仔细检查重复项。 PlatformToolset 也可以在一个或多个 props 文件中定义,因此您也应该检查每一个。 哦@#$#。我错过了1-1!愚蠢的 PlatformToolset 在 1 个共享的道具文件中定义,并将所有其他文件覆盖到较低版本。当我修好那个时,一切都神奇地起作用了。谢谢。 赏金明天就是你的了。 感谢 - 很高兴我在类似的升级问题上花费的时间帮助了其他人!以上是关于Visual Studio 在转换为 2013 的项目上使用较旧的 2012 编译器的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2013 中的“每个文件”自定义构建步骤在哪里?
是否有可以将 Visual Studio 目标文件转换为 GCC 格式的工具?
Visual Studio 编辑器可以从全大写转换为驼峰式吗? [复制]
Visual Studio 2013 Express WPF Deigner 加载失败