2013-02-15 114 views
8

因此,我环顾四周试图找到一些关于此的帖子,并且有许多但没有解决我的具体问题(我可以找到)。从Visual Studio中的GAC引用DLL

我想补充一些DLL在我的项目,但他们几个都来自:

C:\Windows\Microsoft.NET\Framework\v3.5\XXX.YYY.dll 

什么,我期待这应该从GAC到来。

请建议我参考Visual Studio中的Dll的最佳实践。

回答

23

这不是它的工作方式。当您使用Project + Add Reference时,您总是添加一个参考组件。这是从来没有来自GAC的程序集。 GAC是一个运行时实现细节,它只在程序执行时用于提供程序集,从不用于构建程序。

以这种方式工作非常重要,您计算机上的GAC内容与用户计算机上的GAC内容不匹配。当用户的机器没有正确配置以执行程序时,许多DLL地狱对策已经到位,以确保将参考程序集映射到用户的GAC内容,并且具有良好的诊断功能。

这也是您在使用Explorer导航到c:\ windows \ assembly时无法直接查看GAC文件夹的原因。外壳扩展处理程序隐藏了详细信息以防止出现将GAC-ed程序集添加为参考程序集的错误。同样的扩展处理程序未安装.NET 4程序集,您可以查看c:\ windows \ microsoft.net \ assembly并查看GAC的结构。不要以为现在可以添加引用,引用程序集在.NET 4中更重要,它们与运行时程序集完全不同。

因此,看到存储在C:\ Windows \ Microsoft.NET \ Framework \ v3.5中的引用程序集是完全正常的,这是.NET 3.5特定引用程序集的主目录,如System.Core.dll。对于.NET 4项目,参考程序集存储在c:\ program files \ reference程序集中,它们应该是而不是参考C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319。检查this answer以查看不使用正确的参考组件会导致哪种不可知的痛苦。

+4

好的答案,它应该被接受为正确的答案:) – 2014-03-06 07:51:27

+0

这一个为我工作(见我的文章)[链接(http://stackoverflow.com/questions/444655/how-can-i-reference-一个-DLL-内式GAC-从视觉工作室) – 2015-06-19 15:07:30

1

这些程序集是.NET Framework 3.5的程序集。该程序集缓存位于

%SystemRoot%\assembly 

您可以分发.NET Framework 3.5(滚动页面的结束)一起与您的项目。如果你正在使用VS安装项目,你可以简单地使用属性页来引用它。

要引用这些程序集,您可以轻松地右键单击“参考”>“添加引用”,然后从.NET选项卡中选择程序集。有关引用GAC程序集的信息,请参阅this question