我有一个使用 4.0 框架在 VS2010 中创建的 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。但是,当我这样做时,我收到另一条错误消息:
找不到该元素的架构信息
'支持运行时'。 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。同样,您无法保证 2.0 在 4.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)更改源代码并重新编译,修复所有在 3.5 中不起作用的 4.0 库的 API 调用,或者(2)做同样的事情,但在 IL 级别,生成新程序集(您可以使用 al.exe 执行此操作)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)