编译托管c++汇编针对特定的.net版本(VS2008)

Compile Managed C++ Assembly Against Specific .NET Version (VS2008)

本文关键字:net 版本 VS2008 c++ 汇编 编译      更新时间:2023-10-16

我的托管c++程序集遇到了一个奇怪的问题。尽管我将c#项目和托管c++ (DLL)项目设置为目标。net 3.5,但当我编译托管程序集时,它的"运行时版本"是2.0。

我试图在。net 3.5项目和。net 4.0版本的CSScript中使用相同的程序集,CSScript拒绝使用。net 2.0程序集运行("运行时异常:混合模式程序集是针对运行时版本'v2.0.50727'构建的,如果没有额外的配置信息,则无法在4.0运行时中加载。

我设法将问题定位到以下(所有在VS 2008中完成的工作):

  1. 我创建了一个c#项目,目标是。net 3.5。
  2. 我在相同的解决方案中创建了一个空的c++项目。
  3. 在c++项目中添加一个空的。cpp文件
  4. 更改c++项目属性:配置类型=动态库(.dll),公共语言运行时支持=公共语言运行时支持(/clr),并确保公共属性的"目标框架"设置为3.5
  5. 编译c++项目,并将其作为c#项目的参考添加。

当你查看c#项目中引用的属性时,你会看到"运行时版本"是v2.0.50727。我的问题是,这是怎么回事?

为什么运行时版本是2.0?我把所有的都调到3.5…如何强制托管c++项目编译。net 3.5?

谢谢,Marek

运行时版本指的是虚拟机的版本,而不是。net类库。. net 3.5与。net 2.0运行在同一个虚拟机上,这就是为什么参考资料显示v2.0.50727。如果您想知道c++项目是否实际针对框架的3.5版本,您应该检查该项目中的各个库引用。

你的"fix"并不能真正解决问题。

运行时异常:混合模式程序集是针对运行时版本'v2.0.50727'构建的,如果没有额外的配置信息,则无法在4.0运行时中加载

您需要使用4.0运行时来避免这种情况,甚至尝试一些虚构的"3.5"版本也没有意义。为此,您需要使用vc++ 2010编译器进行编译。因为你需要在。net 3.5应用程序中使用它,所以这是不可能的。

尝试查看"附加配置信息"。参考这个问题和这个问题