%windir%\Microsoft.NET\assembly\是新的GAC.这是否意味着我们现在必须管理两个GAC,一个为.NET 2.0-3.5应用程序,另一个用于.NET 4.0应用程序?

问题是,为什么?

推荐答案

是的,因为有两个不同的全局程序集缓存(GAC),所以必须分别管理它们.

在里面NET Framework 4.0,GAC进行了一些更改.GAC分为两部分,每个CLR一个.

CLR版本同时用于这两种情况.NET Framework 2.0和.NET Framework 3.5是CLR 2.0.在前两个框架版本中,没有必要拆分GAC.在NetFramework4.0中中断旧应用程序的问题.

为避免在CLR 2.0和CLR 4.0之间出现问题,现在针对每个运行时将GAC拆分为专用GAC.主要更改是CLR v2.0应用程序现在无法在GAC中看到CLR v4.0程序集.

Source

Why?

这似乎是因为在.NET4.0中有CLR变化,而在2.0到3.5中没有变化.1.1到2.0 CLR也发生了同样的情况.GAC似乎有能力存储不同版本的程序集,只要它们来自同一CLR.他们不想 destruct 旧的应用程序.

请参阅MSDN about the GAC changes in 4.0中的以下信息.

例如,如果.NET 1.1和.NET 2.0共享同一GAC,则从该共享GAC加载程序集的.NET 1.1应用程序可能获得.NET 2.0程序集,从而 destruct .NET 1.1应用程序

用于.NET和.NET的CLR版本 Framework 2.0和.NET Framework 3.5 是CLR 2.0.因此,在那里 在前两场比赛中不需要 用于拆分GAC的框架版本. 破旧的问题(在这个问题上 case ,.NET 2.0)应用程序 Net Framework4.0中的重新出现在 CLR 4.0发布的哪一点.因此, 要避免相互之间的干扰问题,请执行以下操作 CLR 2.0和CLR 4.0,GAC现在 for each 拆分成私有GAC 运行时.

随着CLR在future 版本中的更新,您可以期待同样的事情.如果只改变语言,那么你可以使用相同的GAC.

.net相关问答推荐

保存时不保留 XML 格式

信号量的多线程问题

CurrentCulture、InvariantCulture、CurrentUICulture 和 InstalledUICulture 之间的区别

为什么 SortedSet.GetViewBetween 不是 O(log N)?

如何中止任务,如中止线程(Thread.Abort 方法)?

在 Moq 中模拟泛型方法而不指定 T

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

在 Moq Callback() 调用中设置变量值

String 是原始类型吗?

C# 方法可以定义为采用的最大参数数是多少?

如果需要,将方案添加到 URL

Mono 是树莓派

在 .NET (C#) 中本地存储数据的最佳方式

C# - 你如何停止计时器?

什么是 .NET 应用程序域?

如何在 C# 中处理 XML

C# - 在 WPF 应用程序中保存用户设置的方法?

如何将 VB 项目转换为 C# 项目

如何从 webclient 获取状态码?

如何在 ASP.NET MVC 中重定向到动态登录 URL