%windir%\Microsoft.NET\assembly\
是新的GAC 。 这是否意味着现在我们要管理两个GACS,一个用于.NET应用程序2.0-3.5,另一个用于.NET 4.0的应用程序?
现在的问题是,为什么呢?
%windir%\Microsoft.NET\assembly\
是新的GAC 。 这是否意味着现在我们要管理两个GACS,一个用于.NET应用程序2.0-3.5,另一个用于.NET 4.0的应用程序?
现在的问题是,为什么呢?
是的,因为有2个不同的全局程序集缓存(GAC),你将不得不单独管理它们。
在.NET Framework 4.0中,海关总署通过一些变化去。 海关总署分成两种,一种为每个CLR。
同时用于.NET Framework 2.0和.NET Framework 3.5的CLR的版本是2.0 CLR。 有前两个框架的版本没有需要分割GAC。 在.Net框架4.0打破旧的应用程序的问题。
为了避免CLR 2.0和4.0 CLR之间的问题,海关总署现在被分成私人GAC的每个runtime.The主要变化在于CLR 2.0版应用程序现在无法看到GAC CLR 4.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的版本是2.0 CLR。 作为这样的结果,有一个在前面的两个框架的版本没有需要分割GAC。 打破了旧的问题(在这种情况下,.NET 2.0)应用复出在.Net框架4.0在这一点CLR 4.0发布。 因此,为了避免CLR 2.0和4.0 CLR之间的干扰问题,海关总署现在被分成私人GACS为每个运行。
由于CLR在未来的版本更新,你可以期望同样的事情。 如果仅仅是语言的变化,那么你可以使用相同的GAC。
我也想知道为什么2 GAC,发现如下马克·米勒解释在评论部分的.NET 4.0有2全局程序集缓存(GAC) :
马克·米勒说...... 2010年6月28日下午12时13分
谢谢你的职位。 “干扰问题”是故意含糊其辞。 在写这篇文章的时候,这些问题还在调查中,但很明显有几个破损的情况。
例如,一些应用程序使用Assemby.LoadWithPartialName加载程序集的最高版本。 如果最高版本与V4编译,然后V2(3.0或3.5)的应用程序无法加载它,并且应用程序会崩溃,即使有迹象表明会工作的一个版本。 本来,我们分区下它的原始位置的GAC,但引起了一些问题与Windows升级方案。 这两个是已经发运这些涉及代码,让我们感动我们的(版本分区GAC到另一个地方。
这不应该大多数应用程序产生任何影响,并且不添加任何维护负担。 这两个地点应该只使用本地GAC API,它们处理分区预期被访问或修改。 其中这确实表面的地方是通过暴露如GetCachePath,或检查的mscorlib的加载到托管代码的路径GAC的路径的API。
值得一提的是,我们修改GAC的位置,当我们发布了V2以及当我们介绍架构集标识的一部分。 这些添加GAC_MSIL,GAC_32和GAC_64,虽然都尚在%WINDIR%\组装。 不幸的是,这不是此版本的选项。
希望它可以帮助未来的读者。
它没有很大的意义,原来GAC已经很能够存储不同版本的组件组成。 还有什么理由假设一个程序都不会意外引用错误的组装,所有的.NET 4集得到了颠簸到4.0.0.0 [的AssemblyVersion。 新进程并排侧的功能不应该改变这一点。
我的猜测:已经有太多的.NET项目,在那里,打破了“从未在GAC直接引用任何东西”的规则。 我看到在这个网站上几次进行。
只有一个办法,以避免破坏这些项目:移动GAC。 回到-compat的是Microsoft神圣。