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

由于我将项目升级到Visual Studio 2010项目格式,因此我的C ++ / CLI项目针对.net framework 4.0。

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

在“框架和引用”对话框中按下F1时会出现这个消息:

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

这在转换的项目上不是非常准确,您必须自己添加<TargetFrameworkVersion>元素。 把它放在标有“Globals”的PropertyGroup中:

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

当您使用VS2012及以上版本时,VS的第一个版本在General属性页面中获取了平台工具集设置,这个故事是不一样的。 然后你必须select“v90”来获得一个适合3.5的正确构build。 然而,这是笨拙的,你必须在机器上安装VS的所有中间版本才能使用该选项。

为什么你需要安装VS2008需要自行解释。 核心问题是C运行时库(msvcrt100.dll及更高版本)包含.NET代码以支持托pipe代码执行。 关键的细节是一个模块初始化器,确保CRT在使用C ++ / CLI代码的程序中正确初始化。 该代码总是以.NET 4为目标,由于它很难被纳入到msvcrt100.dll(和更高版本)中,所以你总是对v4.0.30319运行时产生依赖。 当您使用旧的C运行库msvcrt90.dll时,您只能拥有纯v2.0.50727依赖项。 只有在使用编译器的VS2008的#include文件时,才能确定您具有msvcrt90.dll依赖性。

冷酷的事实,很快就要迁移到.NET 4,如果你不这样做,你将会遇到这样的构build问题。 实际的障碍很less,.NET 4在你想象的所有目标上都是免费的。 克服与移动到更高运行时版本相关的FUD通常只是真正的问题。 没有恐惧和怀疑的理由,它是稳定的。

是的,即使是托pipe的C ++项目也可以更改目标:

更改C ++ / CLI的目标.NET Framework(VS 2010)要更改.NET Framework for C ++ / CLI项目的版本(VS 2010)

在解决scheme资源pipe理器中右键单击项目,然后单击卸载项目在解决scheme资源pipe理器中右键单击卸载的项目,然后select编辑<projectname>.vcxproj在项目XML文件中find节点<PropertyGroup Label="Globals">在该节点中find节点<TargetFrameworkVersion>如果找不到节点,则添加它)节点的内部文本定义目标框架。 它可以是v2.0,v3.0,v3.5或v4.0保存vcxproj文件并closures它在解决scheme资源pipe理器中右键单击卸载的项目,然后单击重装项目示例<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

注意:这些步骤仅适用于Visual Studio 2010,因为它使用新的C ++项目文件格式。

MSDN上的源代码:如何更改目标.NET Framework

由匿名用户:

(编辑,因为我是一个新用户,不能回应这个,任何人都可以随意提交以下内容)改变工具集为v100实际上导致VS2010的目标.NET 4.0,即使它仍然会显示为目标3.5在项目属性。 VS2010真的应该吐出一个警告,因为目前看起来虽然你可以使用v100工具集来实现.NET 3.5,但是你不能。

在VS 2010中,如果安装了工具集,请转至项目properties-> config properties-> general,并将Platform Toolset从v90更改为v100。