如何在VS2008中的项目目标3.5中引用框架4.0 dll

我在VS2010中使用4.0框架创建了一个DLL(是的,它是完整的4.0,而不是客户端配置文件)。 我想在VS2008项目中引用它(这意味着我无法将引用项目重新定位到4.0,即使我想这样做)也不能将该项目升级到VS2010。

我理解为什么在3.5个项目中引用4.0’项目’存在问题,但我不明白为什么我在3.5项目中引用4.0 dll时会遇到问题。 而且就我所知,这可能不是问题所在,但我似乎无法想到它可能是什么。

我正在尝试使用Fasterflect(http://fasterflect.codeplex.com/),它严重依赖于我的3.5项目中的4.0function(同样,我的公司还没准备好为VS2010支付这笔钱,所以我无法改变那)。 一开始似乎一切正常,直到我尝试编译然后关于Fasterflect程序集的错误没有被弹出的错误。 所以我下载了实际的源代码,签名,重新编译它,并引用了我新签名的程序集。 问题是现在它显示警告符号并说:

已解决的文件具有错误的图像,没有元数据,或者无法访问。 无法加载文件或程序集“C:…. \ Fasterflect.dll”或其依赖项之一。 此程序集由比当前加载的运行时更新的运行时构建,无法加载。

我尝试按照这里建议的答案: http : //social.msdn.microsoft.com/Forums/en/clr/thread/36b1a209-55d5-4323-91dc-0919ba2e1d03 。 但是,当我这样做时,我收到另一条错误消息:

找不到元素’supportedRuntime’的架构信息。 C:…. \ DynamicSql \ App.config中

我似乎无法想出那个错误。

当然有一些方法让我在VS2008中使用这个DLL?

当您创建一个面向特定版本框架的项目时,您将告诉编译器安装项目所运行的计算机的框架库和运行时版本。 例如,3.5中的System.dll和4.0中的System.dll不一样,就像为什么2.0和3.5中的System.dll不一样。

理论上,您无法保证向前兼容性(3.5引用4.0),因为4.0程序集可能使用3.5中不存在的API。 同样,您无法保证4.0中的2.0向后兼容性,因为某些API可能已被弃用和删除。

在实践中,4.0具有足够的向后兼容性3.5,它们允许您在4.0应用程序中引用3.5个组件,但有一些警告(有时需要在配置文件中添加指令 ,因为4.0中的程序集加载从3.5更改)。 不幸的是,由于4.0引入了大量新API,因此3.5与4.0没有太多的向前兼容性,所以我认为你不能从3.5引用4.0程序集。

您可能正是因为这个原因而看到架构信息exception。 “supportedRuntime”是.NET 4.0引入的配置元素。 但是,由于您在3.5中引用了程序集,因此解析配置文件的.NET 3.5版System.Configuration无法识别该元素,从而引发exception。

唯一的方法可能是(1)更改源代码并重新编译,将所有API调用修复为在3.5中不起作用的4.0库,或者(2)执行相同的操作,但在IL级别,生成新程序集(您可以使用al.exe执行此操作)。