为什么同一台计算机上可以存在 .net 4.0 和 .net 2.0 CLR?

3

我有一个基本的疑问,如何在同一台机器上安装两个CLR。如果这是可能的,那么当我引用一些4.0版本的dll并将应用程序池设置为2.0时,为什么我不能运行网站(我得到错误)。当我们从web.config中引用dll时,它意味着它会在GAC中搜索特定的4.0版本dll,但为什么它不会加载(为什么它没有加载)?请解答我的疑惑。

3个回答

6
是的,两个CLR可以在同一台机器上 - 实际上,.NET 4允许您同时在同一进程中托管两个CLR!
GAC中的不同程序集将具有不同的版本,因此如果您的引用指定了版本,则CLR将加载适当的版本。当然,您需要确保适当的CLR加载适当的程序集;虽然v4 CLR可以加载v2程序集(有一些限制,我IRC),但您不应尝试从v2 CLR加载v4程序集。
至于为什么您遇到问题 - 没有更多信息真的无法确定。(每当您提出问题并且出现错误时,请说出该错误是什么。)

我的回答可能是错的 - 我以为CLR版本是独立的。这个有改变吗? - Michael Shimmins
@Michael:你想要什么样的隔离?例如,当运行.NET 4应用程序时,我相信您可以使用针对.NET 2.0构建的类库,您不认为这会起作用吗?如果我没记错的话,有一些关于本机代码的限制;混合模式程序集需要重新构建。 - Jon Skeet
嗨,Jon Skeet,我面临的问题是,我正在尝试运行一个应用程序池指向2.0的网站,该网站的web.config指向一些4.0 dll's,因此我会遇到“无法加载程序集”的错误。但我的疑问是,即使GAC有这些dll,为什么它不能加载它们。 - Vinay Kumar Chella
@Vinni:我建议你直接将应用程序池指向4.0版本。 - Jon Skeet
没事,我刚才脑抽了。我以为你说2.0可以加载4.0的DLL文件。 - Michael Shimmins

3
应用程序池被设定为运行特定版本的框架。这个信息被用来确定从GAC中加载哪个程序集。
你不能从一个2.0的应用程序/进程中加载.NET 4程序集。
你可以同时安装1.0、1.1、2、3、3.5和4版本。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接