由于我将我的项目升级到了 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。保存并关闭文件,重新加载项目,并验证目标框架是否显示在属性页中。*
这对于转换后的项目来说不是很准确,您必须自己添加 <TargetFrameworkVersion>
元素。将其放入标有“Globals”的 PropertyGroup 中:
<PropertyGroup Label="Globals">
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<others...>
</PropertyGroup>
当您使用 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 通常只是真正的问题。没有理由害怕和怀疑,它是稳定的。
是的,即使是托管 C++ 项目也可以更改目标:
更改 C++/CLI 的目标 .NET Framework (VS 2010) 更改 C++/CLI 项目的 .NET Framework 版本 (VS 2010) 在解决方案资源管理器中右键单击项目,然后单击卸载项目 在解决方案中右键单击已卸载的项目资源管理器并选择 Edit
Source on MSDN: How to: Change the Target .NET Framework
匿名用户:
(编辑,因为我是一个新用户,无法对此做出回应,任何看到此内容的人都可以随时提交以下内容)将工具集更改为 v100 实际上会导致 VS2010 以 .NET 4.0 为目标,即使它仍会显示为目标 3.5 在项目属性。 VS2010 真的应该对此发出警告,因为目前它看起来就像您可以使用 v100 工具集定位 .NET 3.5,但您不能。
在 VS 2010 中,如果安装了工具集,请转到项目属性-> 配置属性-> 常规并将平台工具集从 v90 更改为 v100。
不定期副业成功案例分享