我需要澄清两种情况:
使用 .NET 3.5 编译的可执行文件需要使用使用 .NET 1.1 编译的库,并且该库必须在 1.1 运行时上运行。
使用 .NET 1.1 编译的可执行文件需要使用使用 .NET 3.5 编译的库。
我找不到可靠的消息来源说明无法加载两个版本的 .NET 运行时,并且 Microsoft 的文档在此问题上非常含糊。
我需要澄清两种情况:
使用 .NET 3.5 编译的可执行文件需要使用使用 .NET 1.1 编译的库,并且该库必须在 1.1 运行时上运行。
使用 .NET 1.1 编译的可执行文件需要使用使用 .NET 3.5 编译的库。
我找不到可靠的消息来源说明无法加载两个版本的 .NET 运行时,并且 Microsoft 的文档在此问题上非常含糊。
不——您不能将 CLR 加载到同一个进程中两次。请参阅CLR 托管的文档
与运行时的早期版本一样,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 是对的(我赞成)——您根本不能在同一个进程中托管 2 个版本的运行时。所以你需要以某种方式解决它。我想在这两种情况下,源代码都必须可用,因此应该重新编译和重新测试。