我们为为.NET 3.5构建的软件创建了一个插件。在这个插件中,我们引用了适用于.NET 3.5的第三方.DLL。主要软件现在构建为.NET 4.0,第三方.DLL已分为两个.DLL。
我们要避免的是拥有两个单独的解决方案,几乎完全相同的代码(一个构建到.NET 4.0引用4.0 DLL,一个构建到3.5引用3.5 DLL)。并非所有客户都会升级到我们立即创建插件的软件的最新版本,有些可能会等待数年。
问题已编辑:
有没有办法继续构建.Net 3.5引用3.5 DLL,然后在运行时执行一些程序集解析加载两个.Net 4.0 DLL代替原来的?
我们希望/需要继续构建到3.5框架,以便以前版本的主要软件将继续加载我们的插件。如果我们构建到4.0,那么旧版本在尝试加载我们的插件时会出错,因为它构建到以后的框架。
答案 0 :(得分:1)
此程序集由比当前加载的运行时
更新的运行时构建
这很清楚,你的EXE加载了早期版本的CLR。只有CLR的.NET 4版本知道如何加载为目标4构建的程序集。元数据格式在4中已更改,旧的CLR不知道如何阅读它。
将EXE重建为目标4或提供app.exe.config文件,该文件强制您的程序使用较新版本的CLR运行。它应该是这样的:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
</configuration>
需要进行一些测试,.NET 4具有高度兼容性,但它确实有一些您可能会意外依赖的错误修复。
答案 1 :(得分:0)
如果结构完全相同(iow都是1个程序集),则在.NET 4运行时加载.NET 3.5库没有问题。 (我在IronScheme中做了很多,因为我懒得在VS2010上构建)。