【问题标题】:How to use an assembly from the GAC?如何使用来自 GAC 的程序集?
【发布时间】:2014-11-23 08:29:12
【问题描述】:

我在C:\Windows\Microsoft.NET\assembly\GAC_32\MyFolder\ 中有一个dll,我想在我的C# 项目中使用它。
我尝试向它添加参考(参考->添加参考->浏览),它看起来很好,但在运行时程序被AccessViolationException粉碎。
我不确定引用是否是问题,所以我决定调查一下,我在这个post 中找到了一个答案,说你不能以这种方式从GAC 引用程序集。我没有找到的是我应该怎么做。
当我删除对dll 的引用时,程序当然不会编译。

【问题讨论】:

  • 请添加您的代码,几乎不可能帮助突然冒出一个问题
  • 为什么需要代码?我在问一个技术问题。我在GAC 中有一个dll,我该如何使用它?我不希望人们弄清楚我为什么会出现异常,只要告诉我是否像我应该的那样引用 dll
  • @GM6 - 您是如何将其添加到 GAC 的?你用过 GacUtil 吗?您究竟使用了哪些命令参数?当您说“在运行时”时,您是指在 VS.net IDE 中还是在另一台机器上执行时?您如何知道 DLL 已在 GAC 中正确注册?您是否使用 GacUtil 列出了目标机器上的 GAC 内容?
  • 出现异常的原因有很多。我们不知道为什么会发生,只是因为你这么说。根据你告诉我的内容,我唯一能做的就是在谷歌中搜索你想要的解决方案。但我们想提供帮助的不一定是您想听到的确切答案,而是您的程序需要的答案。这就是我们坚持使用代码的原因,这就是您的观看次数如此之低的原因,这就是我向您索要代码的原因
  • @PhillipH 都是好问题,但恐怕我的答案很少。我安装了一个msi 文件,其中放置了那个dll,所以我不能告诉你它是如何完成的,因为我不知道。

标签: c# .net-assembly gac


【解决方案1】:

在使用 GAC 程序集之前,您需要了解一些事项。

1) GAC 中的程序集必须是strong-named

2) 你不能只复制那里的文件,here 的如何将程序集正确部署到 GAC。

3)A strong-named assembly can only use types from other strong-named assemblies.

4) Here 的如何在编译时(使用编译器选项)和运行时引用强名称程序集,here 的如何从 Visual Studio 中引用 GAC 程序集。另请阅读 this 线程中 Hans Passant 的答案。

【讨论】:

    【解决方案2】:

    'Referencing DLL from GAC in Visual Studio' 可能重复。请特别查看this answer,它解释了为什么添加来自 GAC 的引用是不好的做法。但是,您仍然可以使用计算机上的完整路径来执行此操作。考虑以下场景:

    1. 您的参考是第三方 dll
    2. 您依赖于您正在部署的计算机已经注册了该 dll 的事实

    分辨率:

    1. 将您依赖的第 3 方程序集复制到某个选择的文件夹中。
    2. 使用这些引用仅用于编译目的。您没有运送这些物品。
    3. 安装后,这些引用将由该计算机上的 GAC 解析。如果没有,您需要将这些程序集安装到 GAC。

    为 SharePoint 构建自定义应用程序的人员(例如)使用此方案。

    【讨论】:

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