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

Bra*_*ore 4 c# dll .net-framework-version

我在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.0功能(同样,我的公司还没有准备好为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?

ata*_*mir 7

当您创建面向特定版本框架的项目时,您将告诉编译器安装项目所运行的计算机的框架库和运行时版本.例如,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程序集.

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

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