【问题标题】:How can I reference a dll in the GAC from Visual Studio?如何从 Visual Studio 引用 GAC 中的 dll?
【发布时间】:2010-10-01 11:22:28
【问题描述】:

此程序集位于 GAC 中:Microsoft.SqlServer.Management.RegisteredServers.dll

如何在 Visual Studio 中添加对此程序集的引用?

我可以在 c:\windows\assembly\ 中查看文件

【问题讨论】:

    标签: visual-studio assemblies gac


    【解决方案1】:

    在 VS 中,右键单击您的项目,选择“添加引用...”,您将看到 GAC 中存在的所有命名空间。选择 Microsoft.SqlServer.Management.RegisteredServers 并单击确定,您应该一切顺利

    编辑:

    这就是您大多数时候想要这样做的方式。然而,经过一番摸索,我在 MS Connect 上找到了this issue。 MS 说这是一个已知的部署问题,他们没有解决方法。那家伙说,如果他从 GAC 文件夹中复制 dll 并将其放入他的 bin 中,它就可以工作。

    【讨论】:

    • 由于某种原因它不存在!
    • 在您链接的页面上,他们现在(自 2010 年 11 月 17 日起)提到该问题已得到解决。
    【解决方案2】:

    假设您已经尝试过如上所述的“添加引用...”但没有成功,您可以查看here。他们说你必须满足一些先决条件: - .NET 3.5 SP1 - Windows 安装程序 4.5

    编辑:根据post,这是一个已知问题。

    this 可能是您正在寻找的解决方案 :)

    【讨论】:

      【解决方案3】:

      将程序集注册到 GAC 不会在添加引用对话框中放置对程序集的引用。您仍然需要为您的项目按路径引用程序集,主要区别在于您不需要使用复制本地选项,您的应用会在运行时找到它。

      在这种特殊情况下,您只需要通过路径(浏览)引用您的程序集,或者如果您真的想在添加引用对话框中拥有它,那么您可以在注册表设置中添加其他路径。

      请注意,如果您将应用发送给未安装此程序集的人,则需要发送它,在这种情况下,您确实需要使用 SharedManagementObjects.msi 可再发行组件。

      【讨论】:

      • 您的链接已损坏。它looks like 现在是一个 NuGet 包。但也有 MSI 的下载,比如here
      • 这个答案是 9 年前发布的! - 编辑删除链接,但老实说,这个问题和答案基本上是历史性的。
      【解决方案4】:

      我创建了一个完全免费的工具,可以帮助您实现目标。 Muse VSReferences 将允许您从 Add GAC Reference 菜单项中为项目添加全局程序集缓存引用。

      希望这有助于Muse VSExtensions

      【讨论】:

      • 有没有办法让它与 Visual Studio Express Edition 一起工作?
      • @Fetchezlavache:我非正式地修改了扩展以支持 VS2012 和 VS2013。可供下载here
      【解决方案5】:

      正如其他人所说,大多数时候您不想这样做,因为它不会将程序集复制到您的项目中,也不会与您的项目一起部署。但是,如果您像我一样尝试添加所有目标计算机在其 GAC 中的引用,但它不是 .NET Framework 程序集:

      1. 打开 Windows 运行对话框(Windows 键 + r)
      2. 类型 C:\Windows\assembly\gac_msil。这是一种让你浏览 GAC 的奇怪技巧。您只能通过运行对话框访问它。希望我传播这些信息最终不会导致微软对其进行修补和阻止。 (太偏执了?:P)
      3. 找到您的程序集并从地址栏中复制其路径。
      4. 在 Visual Studio 中打开“添加引用”对话框并选择“浏览”选项卡。
      5. 粘贴 GAC 程序集的路径。

      我不知道是否有更简单的方法,但我还没有找到。我还经常使用步骤 1-3 将 .pdb 文件与其 GAC 程序集一起放置,以确保当我以后需要使用远程调试器时它们不会丢失。

      【讨论】:

      • 我最近正在观看第 9 频道的视频或类似的视频,并短暂看到讲师的添加参考窗口包含 GAC 选项(不记得确切)。我不知道那是自制的插件还是外面有可用的插件。有人看过吗?
      • Win7中的“GAC_MSIL不被识别为内部或外部命令”
      • @Rakesh,它适用于 Win7。键入答案中显示的完整路径,而不仅仅是 gac_msil
      • 这里可能还需要搜索:C:\Windows\Microsoft.NET\assembly
      • 谢谢,@DanielDušek。这个答案来自 Windows XP/.NET 2.0 时代。 XP 有一个来自 shfusion.dll 的名为 Assembly Cache Viewer shell 扩展的东西,它提供了一个特殊的(但限制性的)目录视图。无论出于何种原因(我确信这对于更熟悉 shell 的人来说非常有意义),从运行对话框中点击路径绕过了它。我相信也可以在注册表中禁用它。 .NET 4 已经过时了。这是一个很好的关于这个主题的记忆通道:codeproject.com/Articles/4352/…
      【解决方案6】:

      相关文件和参考资料可以在这里找到:

      http://msdn.microsoft.com/en-us/library/cc283981.aspx

      注意它关于实现/等的链接。

      【讨论】:

        【解决方案7】:

        在 VS2010 中,您可以从“添加参考”窗口单击“浏览”并导航到 C:\Windows\Assembly 并添加对所需程序集的引用。请注意,这些文件可能被分组在不同的文件夹下,如 GAC、GAC_32、GAC_64、GAC_MSIL 等。

        【讨论】:

          【解决方案8】:

          对我有用的唯一方法是将 dll 复制到桌面或其他东西,添加对它的引用,然后从桌面删除 dll。 Visual Studio 将自行刷新,并最终从 GAC 引用自身的 dll。

          【讨论】:

            【解决方案9】:

            现在回答可能为时已晚,但我找到了一种非常简单的方法(无需破解)。

            1. 将您的 dll 放入 GAC 中(对于 3.5 Drag Drop inside "C:\Windows\assembly\"
            2. 转到项目 --> 属性
            3. 单击参考路径(对于 3.5,它是 "C:\Windows\assembly\"
            4. 和构建

            希望对你有帮助

            【讨论】:

              【解决方案10】:

              我为 VS 2013 找到了这个扩展 Vitevic GAC Reference

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多