我需要澄清两种情况:
-
使用.NET 3.5编译的可执行文件需要使用使用.NET 1.1编译的库,并且该库必须在1.1运行时上运行。
-
使用.NET 1.1编译的可执行文件需要使用使用.NET 3.5编译的库。
我找不到可靠的消息来源来说明不可能加载两个版本的.NET运行时,而且微软的文档在这方面非常模糊。
否--不能将CLR加载到同一进程中两次。请参阅CLR Hosting 的文档
与早期版本的运行时,CorBindToRuntimeEx函数初始化运行时。你可以选择的版本运行时加载,但进程可以仅承载一个版本。
.NET 4承诺通过in-process Side-by-Side在同一进程中托管不同的CLR版本。
对于案例#1,是否有任何特定的原因(例如,破坏更改)需要在1.1运行时中托管库?是否可以通过1.1编译的web服务公开库,并将可执行文件指向web服务?(或者其他一些远程处理技术,让库在自己的过程中运行?)
对于案例2,是否可以在2.0/3.5下重新编译1.1应用程序,使其可以驻留在同一进程中?
无论如何,Rob Walker是对的(我投了赞成票)——你根本不能在同一个过程中托管两个版本的运行时。所以你需要以某种方式解决它。我想,在这两种情况下,源代码都必须可用,所以应该进行重新编译和重新测试。