我在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吗?
答案 0 :(得分: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个组件,但有一些警告(您有时需要在配置文件中add a directive,因为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执行此操作)。