*为什么* Visual Studio不允许您在GAC中引用程序集?

时间:2010-11-24 17:14:26

标签: .net visual-studio visual-studio-2010 gac

有几个问题已经回答了 HOW ,或者更确切地说是如何解决这个Visual Studio限制:

GAC Assembly Missing in Add Reference dialog How can I reference a dll in the GAC from Visual Studio?

MSDN documentation虽然说:

  

您无法添加来自的引用   全局程序集缓存(GAC),原样   严格地说是运行时的一部分   环境。

因此,Visual Studio团队似乎是故意这样做的。也许他们这样做了所以你不伤害自己?通过使用像这样的VS extension引用GAC中的程序集,我违反了什么最佳做法?我错过了什么吗?

只需仔细检查社区,感谢您的想法。

3 个答案:

答案 0 :(得分:3)

它实际上并没有阻止你这样做。特别是对于.NET 4.0,您可以使用“浏览”选项卡访问c:\ windows \ microsoft.net \ assembly。 4.0

不包括shell扩展处理程序,它阻止您通过shell对话框访问.NET 2.0 GAC

但是,这是一个非常糟糕的主意。 GAC是部署实施细节,您无法假定GAC的内容与其他计算机上的内容相匹配。只有参考程序集才能为您提供一组稳定的类型定义,这些类型定义在您通过Windows Update获得安全更新时不会更改。

这对.NET 4.0更为重要。它的参考组件很特别。它们不再是您可能在GAC或c:\ windows \ microsoft.net中找到的程序集的副本。它们只包含元数据,没有IL。这允许Microsoft部署更新以更改程序集中的公共类型。 .NET 2.0 Service Pack中出现严重错误的东西(例如WaitHandle.WaitOne(int))。

答案 1 :(得分:3)

使用Sharp Develop(用于.NET的开源IDE),您可以添加GAC引用,使用.NET 4可以添加GAC引用。您绝对不会通过添加GAC引用来伤害自己。我没有得到使用它的开发人员的任何负面反馈。

很快this extension会有更多性感的功能。

答案 2 :(得分:1)

因为GAC可以拥有给定程序集的多个版本,所以它会非常快速地变得非常复杂。要求您要引用的版本的副本位于普通文件夹中更容易。

(大部分时间你都不应该使用GAC,因为它与注册表在COM时代一样痛苦。)