%windir%\Microsoft.NET\assembly\是新的GAC。这是否意味着现在我们必须管理两个 GAC,一个用于 .NET 2.0-3.5 应用程序,另一个用于 .NET 4.0 应用程序?
%windir%\Microsoft.NET\assembly\
问题是,为什么?
是的,因为有 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 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。
例如,如果 .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。