我在托管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中完成的所有工作):
当您查看C#项目中引用的属性时,您将看到“运行时版本”为v2.0.50727。我的问题是,到底是怎么回事?
为什么运行时版本为2.0?我将所有内容设置为3.5 ...如何强制托管C ++项目针对.NET 3.5进行编译?
谢谢, 马立克
答案 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 question和this one。