由于我将我的项目升级为visual studio 2010项目格式,我的C++/CLI项目的目标是.net框架4.0.

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

推荐答案

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

默认情况下,对于新项目,目标框架设置为.NET框架4.IDE不支持修改目标框架,但可以手动更改.

这在转换后的项目中不是非常准确,您必须自己添加<TargetFrameworkVersion>元素.将其放入标记为"Globals"的PropertyGroup中:

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

当您使用VS2012及以上版本时,情况就不同了.VS2012及以上版本是VS的第一个版本,在常规属性页中获得了平台工具集设置.然后,您必须 Select "v90"以获得针对3.5的正确版本.然而,这是笨拙的,你必须有所有的中间版本的VS安装在机器上有 Select .

为什么需要安装VS2008,这本身就需要一个解释.核心问题是C运行时库(msvcrt100.dll及以上)包含.NET代码来支持托管代码执行.关键的细节是一个模块初始化器,它确保CRT在使用C++/CLI代码的程序中正确初始化.代码总是针对目标.NET 4,因为它是硬烘焙到msvcrt100中的.dll(以及更高版本)您对v4的依赖性一直很强.0.30319运行时.你只能拥有一个纯v2.使用旧的C运行时msvcrt90时的0.50727依赖关系.dll.你只能确保你有一个msvcrt90.使用VS2008编译器的#include文件时的dll依赖关系.

冷酷的事实是,很快就有必要迁移到.NET4,如果你不这样做,你会很难解决像这样的构建问题.这几乎没有什么实际的障碍,.NET4在你能想象到的所有目标上都是免费的.克服与迁移到更高运行时版本相关的FUD通常只是真正的问题.没有恐惧和怀疑的理由,它是稳定的.

.net相关问答推荐

带有ASP.NET核心的Angular 项目模板.API试验

Azure SignalR 和微服务

向从 .NET 序列化的对象添加 Xml 属性

cmd 冻结中的 dotnet 命令.怎么了?

为什么 Any() 不适用于 c# null 对象

异步总是 WaitingForActivation

Style 和 ControlTemplate 的区别

使用泛型装箱和拆箱

序列化私有成员数据

如何找到 ManualResetEvent 的状态?

ASP.NET Core 等效于 ASP.NET MVC 5 的 HttpException

创建多个线程并等待所有线程完成

在 .NET 中查找下一个 TCP 端口

ASP.NET Core (.NET Core) 和 ASP.NET Core (.NET Framework) 的区别

是否可以完全用托管的 .NET 语言编写 JIT 编译器(本地代码)

CI服务器的比较?

在 .NET 中获取默认打印机的最佳方法是什么

找不到库 hostpolicy.dll

将 Dictionary 转换为匿名对象?

并发字典正确用法