使用 vs2010将 C + +/CLI 项目更改为4.0以外的另一个框架

自从我将我的项目升级到 Visual Studio 2010项目格式后,我的 C + +/CLI 项目的目标是.net Framework 4.0。

将框架版本从 C # 项目切换到另一个版本很容易,但是我不知道如何在 C + +/CLI 项目中做到这一点,我在项目属性页中没有看到这方面的设置。

74213 次浏览

是的,即使对于受管理的 C + + 项目,也可以改变目标:

的目标.NETFramework C + +/CLI (VS2010)更改 的.NETFramework 版本 C + +/CLI 项目(VS 2010)

在“解决方案”中右键单击“项目” 资源管理器,然后单击“卸载项目” 中右键单击卸载的项目 解决方案资源管理器并选择“编辑” 项目 XML 中的 <projectname>.vcxproj 文件定位节点 <PropertyGroup Label="Globals"> 节点 <TargetFrameworkVersion>(如果 无法找到节点,请添加它)内部 节点的文本定义目标 它可以是 v2.0,v3.0,v3.5 或 v4.0保存 vcxproj 文件并关闭它 中右键单击卸载的项目 解决方案资源管理器,然后单击“重新加载” 工程项目范例 <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

注意: 这些步骤仅适用于 VisualStudio2010使用 new C + + 项目文件格式。

MSDN 上的来源: 如何: 更改目标.NET 框架

当您在框架和引用对话框中按 F1时,这将显示出来:

默认情况下,对于新项目,目标框架设置为。NET 框架4。IDE 不支持修改目标框架,但是您可以手动更改它。 在项目文件中(。Vcxproj) ,默认的目标框架由 v4.0属性元素表示。要更改目标框架,请卸载项目,使用文本编辑器打开项目文件,然后将 property 元素的值从 v4.0更改为安装在服务器上的另一个版本。例如,如果指定 v3.5,则表示。NET Framework v3.5,必须安装 VisualStudio2008SP1.保存并关闭该文件,重新加载项目,并验证目标框架是否显示在属性页中。*

这在转换后的项目中并不十分准确,您必须自己添加 <TargetFrameworkVersion>元素。把它放在标记为“ Globals”的 PropertyGroup 中:

  <PropertyGroup Label="Globals">
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<others...>
</PropertyGroup>

当您使用 VS2012及以上版本时,情况就不同了,VS2012是 VS 的第一个版本,它在 General 属性页中获得了 Platform Toolset 设置。然后,您必须选择“ v90”以获得目标为3.5的正确构建。无论多么笨拙,您必须在机器上安装所有 VS 的中间版本,才能获得可用的选择。

为什么需要安装 VS2008本身需要一个解释。核心问题是 C 运行时库(msvcrt100.dll 及以上)包含。NET 代码以支持托管代码执行。关键的细节是模块初始化器,它确保 CRT 在使用 C + +/CLI 代码的程序中正确初始化。那个代码总是针对。NET 4,并且由于它被硬生生地嵌入到 msvcrt100.dll (以及更高版本)中,因此您总是对 v4.0.30319运行时有着坚如磐石的依赖。只有在使用旧的 C 运行时 msvcrt90.dll 时,才能有纯粹的 v2.0.50727依赖项。只有在使用 VS2008的编译器 # include 文件时,才能确保具有 msvcrt90.dll 依赖项。

冷硬的事实说明搬家是相当必要的。NET 4很快,如果你不这样做,你会与这样的构建问题斗争。这方面几乎没有什么实际障碍。NET 4在你想象中的所有目标上都可以免费使用。克服与迁移到更高的运行时版本相关的 FUD 通常只是真正的问题。没有恐惧和怀疑的理由,它是稳定的。

在 VS 2010中,如果工具集已经安装,则转到 project properties-> config properties-> general 并将 Platform Toolset 从 v90更改为 v100。

一个匿名用户:

(编辑,因为我是一个新用户,不能响应这一点,谁看到这一点,随时提交以下内容)改变工具集 v100实际上导致 VS2010的目标。NET 4.0,即使在项目属性中仍然显示为目标3.5。VS2010应该对此提出警告,因为目前它看起来就像是您可以瞄准的目标。NET 3.5和 v100工具集,这是不可能的。