10

所以我环顾四周试图找到一些关于这个的帖子,有很多但没有一个可以解决我的具体问题(我可以找到)。

我正在尝试在我的项目中添加一些 DLL,但其中很少有来自:

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

我期望这应该来自 GAC。

请建议我在 Visual Studio 中引用 Dll 的最佳实践。

4

2 回答 2

25

这不是它的工作方式。当您使用 Project + Add Reference 时,您总是添加一个引用程序集。这绝不是来自 GAC 的大会。GAC 是一个运行时实现细节,它只用于在程序执行时提供程序集,而不是在构建时提供程序集。

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

这也是使用 Explorer 导航到 c:\windows\assembly 时无法直接查看 GAC 文件夹的原因。shell 扩展处理程序隐藏细节以防止您犯错误,例如添加 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。检查这个答案,看看不使用正确的参考程序集会导致什么样的无法诊断的痛苦。

于 2013-02-15T12:28:25.857 回答
1

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

%SystemRoot%\assembly

您可以将.NET Framework 3.5(滚动到页面末尾)与您的项目一起分发。Aso 如果您使用的是 VS Setup 项目,您可以简单地使用属性页来引用它。

要引用这些程序集,您可以轻松地右键单击“引用”>“添加引用”并从 .NET 选项卡中选择程序集。要引用 GAC 程序集,请参阅此问题

于 2013-02-15T10:33:20.733 回答