代码之家  ›  专栏  ›  技术社区  ›  codymanix

用VS2010将C++/CLI项目更改为4的框架

  •  150
  • codymanix  · 技术社区  · 16 年前

    由于我将项目升级为VisualStudio 2010项目格式,所以我的C++/CLI项目的目标是.NETFramework 4。

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

    4 回复  |  直到 13 年前
        1
  •  190
  •   Hans Passant    10 年前

    在“框架和参照”对话框中按F1键时会显示:

    在项目文件(.vcxproj)中,默认的目标框架由v4.0属性元素表示。要更改目标框架,请卸载项目,使用文本编辑器打开项目文件,然后将属性元素的值从v4.0更改为安装在服务器上的其他版本。例如,如果指定v3.5,它表示.NET Framework v3.5, . 保存并关闭文件,重新加载项目,并验证目标框架是否显示在属性页中*

    在转换的项目中,这不是非常准确,您必须添加 <TargetFrameworkVersion>

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

    当您使用VS2012及更高版本时,情况就不同了,VS的第一个版本在常规属性页中获得了平台工具集设置。然后您必须选择“v90”以获得一个以3.5为目标的正确构建。然而,这是笨拙的,你必须有所有的中间版本的VS安装在机器上有选择可用。

    为什么需要安装VS2008需要一个解释。核心问题是C运行时库(msvcrt100.dll及更高版本)包含支持托管代码执行的.NET代码。关键的细节是一个模块初始化器,确保CRT在使用C++/CLI代码的程序中被正确初始化。这段代码总是以.NET4为目标,而且由于它是硬烘焙到msvcrt100.dll(或更高版本)中的,所以您总是对v4.0.30319运行时有一个硬依赖。当您使用旧的C运行时msvcrt90.dll时,您只能拥有纯v2.0.50727依赖关系。当您使用VS2008编译器的“include”文件时,只能确保您具有msvcrt90.dll依赖关系。

        2
  •  18
  •   GloriousLemon    10 年前

    是的,即使是托管C++项目也有可能改变目标:

    的.NET Framework版本 C++/CLI项目(VS 2010)

    右键单击解决方案中的项目 单击“资源管理器”,然后单击“卸载项目” 在中的已卸载项目上单击鼠标右键 <projectname>.vcxproj 在项目XML中 文件定位节点 <PropertyGroup Label="Globals"> 节点 <TargetFrameworkVersion> (如果 找不到节点,请添加它)内部 节点的文本定义目标 框架。它可以是v2.0、v3.0、v3.5 在中的已卸载项目上单击鼠标右键 <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

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

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

        3
  •  5
  •   hakre    15 年前

    (由于我是一个新用户,无法对此做出响应,所以编辑时,无论谁看到都可以提交以下内容)将工具集更改为v100实际上会导致VS2010以.net4.0为目标,即使它在项目属性中仍然显示为以3.5为目标。VS2010确实应该对此发出警告,因为目前看来,您似乎可以使用v100工具集将.NET3.5作为目标,但您不能。

        4
  •  0
  •   nche    15 年前