Visual Studio 在转换为 2013 的项目上使用较旧的 2012 编译器

Visual Studio using older 2012 compiler on a project converted to 2013

我从 VS2012 继承了一个(小型)构建系统,我们的团队希望将其带到 VS2013。我有 运行 到 "convert" 到 2013 年的解决方案向导,它尽职尽责地将各种 .vcxproj 文件中的 VisualStudioVersion 和 Project ToolsVersion 更改为“12.0”,并在这里和那里添加了一些额外的字段,没有报告了错误或警告。

但是,IDE 仍将这些项目显示为 2012 年:

Solution 'foo'
   Bar (Visual Studio 2012)

并且 IDE 仍然允许我 "upgrade" 这些项目。我确实注意到转换过程也没有触及任何 .props 文件,我已经完成并手动更新了它们,但它似乎仍然没有使用最新版本的编译器并且 IDE 仍然很困惑- 或者不是。

我是这里的 MSBuild 新手,所以也许这只是某个地方缺少的一个简单标志 - 希望如此?

此外,我在第一次构建时收到大量架构警告,但我相信这是我研究中的一个已知功能。

我还应该在这里查看什么?

确保每个配置 属性 组(即定义构建配置的每个组)在其 PlatformToolset 元素中针对 2013 编译器:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
    <PlatformToolset>v120</PlatformToolset>
    ...
</PropertyGroup>

还要检查您是否没有重复的 属性 组 - 任何 属性 组都应该只有一个实例具有相同的 Condition 和 Label 属性。由于平台和配置的合并和 insertion/deletion,.vcxproj 文件可能会随着时间的推移变得支离破碎,重复的组实际上取消了文件中先前定义的配置元素的定义。将重复的 属性 个组合并为一个组。

如果您在某个 props 文件的宏中定义工具集版本,请确保它是 v120。

还要检查您的道具文件是否与您期望的所有项目配置相关联。您可以查看每个配置的 vcxproj 文件中的 ImportGroup 元素中直接包含哪些 props,或者在 Visual Studio 中的 属性 Manager 中查看 - 展开每个 Configuration|Platform 节点以查看列表已包含的道具文件。

最后,如果你的项目有CLR支持,将框架版本设置为v4.5.1:

<Project>
    <PropertyGroup Label="Globals">
        <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
        ...
    </PropertyGroup>
</Project>