小编典典

.NET 4.0 有一个新的 GAC,为什么?

all

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

问题是,为什么?


阅读 73

收藏
2022-04-21

共1个答案

小编典典

是的,因为有 2 个不同的全局程序集缓存 (GAC),您必须单独管理它们中的每一个。

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

用于 .NET Framework 2.0 和 .NET Framework 3.5 的 CLR 版本是 CLR
2.0。在前两个框架​​版本中没有必要拆分 GAC。在 Net Framework 4.0 中破坏旧应用程序的问题。

为了避免 CLR 2.0 和 CLR 4.0 之间的问题,GAC 现在被拆分为每个运行时的私有 GAC。主要变化是 CLR v2.0 应用程序现在无法在
GAC 中看到 CLR v4.0 程序集。

来源

为什么?

这似乎是因为 .NET 4.0 中发生了 CLR 更改,但 2.0 到 3.5 中没有。1.1 到 2.0 CLR 也发生了同样的事情。似乎 GAC
有能力存储不同版本的程序集,只要它们来自同一个 CLR。他们不想破坏旧的应用程序。

请参阅MSDN 中有关 4.0 中的 GAC 更改的以下信息。

例如,如果 .NET 1.1 和 .NET 2.0 共享相同的 GAC,则 .NET 1.1 应用程序从该共享 GAC 加载程序集可能会获取 .NET
2.0 程序集,从而破坏 .NET 1.1 应用程序

用于 .NET Framework 2.0 和 .NET Framework 3.5 的 CLR 版本是 CLR
2.0。因此,在前两个框架​​版本中没有必要拆分 GAC。破坏旧的(在本例中为 .NET 2.0)应用程序的问题在 Net Framework 4.0
中重新出现,此时 CLR 4.0 发布。因此,为了避免 CLR 2.0 和 CLR 4.0 之间的干扰问题,现在将 GAC 拆分为每个运行时的私有
GAC。

随着 CLR 在未来版本中的更新,您可以期待同样的事情。如果只是语言发生变化,那么您可以使用相同的 GAC。

2022-04-21