针对特定.NET版本编译托管C ++程序集(VS2008)

时间:2011-09-16 19:42:43

标签: c# .net c++ visual-studio-2008 managed

我在托管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. 我创建了一个面向.NET 3.5的C#项目。
  2. 我在同一个解决方案中创建了一个空的C ++项目。
  3. 将空的.cpp文件添加到C ++项目中。
  4. 更改C ++项目属性:配置类型=动态库(.dll),公共语言运行时支持=公共语言运行时支持(/ clr),并确保公共属性的“目标框架”设置为3.5
  5. 编译C ++项目并将其添加为对C#项目的引用。
  6. 当您查看C#项目中引用的属性时,您将看到“运行时版本”为v2.0.50727。我的问题是,到底是怎么回事?

    为什么运行时版本为2.0?我将所有内容设置为3.5 ...如何强制托管C ++项目针对.NET 3.5进行编译?

    谢谢, 马立克

2 个答案:

答案 0 :(得分:1)

运行时版本是指虚拟机的版本,而不是.NET类库。 .NET 3.5在与.NET 2.0相同的虚拟机上运行,​​这就是您的参考显示v2.0.50727的原因。如果要查看C ++项目是否实际上是针对框架的3.5版本,则应检查该项目中的各个库引用。

答案 1 :(得分:0)

您的“修复”实际上无法解决问题。

  

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

你需要使用4.0运行时来避免这种情况,即使尝试一些神秘的“3.5”版本也没有意义。为此,您需要使用VC ++ 2010编译器进行编译。由于您需要在.NET 3.5应用程序中使用它,这是一个非首发。

尝试查看“其他配置信息”。请参阅this questionthis one