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 加载失败

Visual Studio 2010 解决方案查看器或转换器?

从 Visual Studio 2012 中浏览 Qt 5.1.1 基本源 - 将 .pro 转换为 .sln 文件