ChatGPT解决这个技术问题 Extra ChatGPT

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

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

将框架版本从 C# 项目切换到另一个版本很容易,但我不知道如何在 C++/CLI 项目中执行此操作,我在项目属性页中看不到此设置。


H
Hans Passant

当您在“框架和引用”对话框中按 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 通常只是真正的问题。没有理由害怕和怀疑,它是稳定的。


我现在执行了这些步骤,但现在我收到错误“MSB8009:.NET Framework 2.0/3.0/3.5 以 v90 平台工具集为目标。请确保机器上安装了 Visual Studio 2008”。我没有VS2008。
引用我的回答:“必须安装 Visual Studio 2008 SP1”。您缺少所需的构建工具。
可能您还需要删除 .suo 文件并重新打开解决方案。就像我的情况一样。
我只需安装 Visual Studio 2008 express(免费)即可完成这项工作。当我将平台工具集更改为 v90 时,我实际上遇到了很多错误。回到 v100 解决了所有问题!
使用 Visual Studio 2010 创建使用混合 C++/CLI 和 C# 项目的 .NET Framework 4.0 程序时,安装 .NET Framework 4.5(或 .NET Framework 4.5 附带的 Visual Studio 2013)会导致 C++/CLI 项目在VS 2010 将针对 4.5 而不是以前的 4.0 构建。当您在引用 C++/CLI 项目的同一解决方案中拥有针对 4.0 构建的 C# 项目时,这会中断。在 C++/CLI 项目的 vcxproj 文件中插入 v4.0 解决了这个问题。 \o/
G
GloriousLemon

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

更改 C++/CLI 的目标 .NET Framework (VS 2010) 更改 C++/CLI 项目的 .NET Framework 版本 (VS 2010) 在解决方案资源管理器中右键单击项目,然后单击卸载项目 在解决方案中右键单击已卸载的项目资源管理器并选择 Edit .vcxproj 在项目 XML 文件中找到节点 在该节点中找到节点 (如果找不到节点,添加它) 节点的内部文本定义目标框架.它可以是 v2.0、v3.0、v3.5 或 v4.0 保存 vcxproj 文件并关闭它 在解决方案资源管理器中右键单击已卸载的项目,然后单击重新加载项目示例 v3.5 注意:这些步骤仅适用于 Visual Studio 2010,因为它使用新格式的 C++ 项目文件。

Source on MSDN: How to: Change the Target .NET Framework


h
hakre

匿名用户:

(编辑,因为我是一个新用户,无法对此做出回应,任何看到此内容的人都可以随时提交以下内容)将工具集更改为 v100 实际上会导致 VS2010 以 .NET 4.0 为目标,即使它仍会显示为目标 3.5 在项目属性。 VS2010 真的应该对此发出警告,因为目前它看起来就像您可以使用 v100 工具集定位 .NET 3.5,但您不能。


这是因为多目标仅允许您定位 V2.0、3.0、3.5 和 4.0; .Net 的 1.x 版本不能这样定位
n
nche

在 VS 2010 中,如果安装了工具集,请转到项目属性-> 配置属性-> 常规并将平台工具集从 v90 更改为 v100。