【问题标题】:How to make .dll available for C# and Excel VBA如何使 .dll 可用于 C# 和 Excel VBA
【发布时间】:2014-08-25 11:39:32
【问题描述】:

我有一个要在 C# 项目和 Excel VBA 中使用的 DLL。我使用 regasm.exe 注册 DLL 并创建 TLB 。我现在可以在 VBA 中引用它。我的问题是,我需要我的 C# 应用程序仍然无法find DLL。我必须在每个 C# 应用程序的文件夹中添加 DLL 的副本或 .config - 文件才能使它们工作。我可以在 COM 下的 Visual Studio 中看到该引用,但在尝试使用该引用时出现错误(与 Active-X 相关的东西,如果它很重要,我可以查找它)。

所以我尝试使用 gacutil.exe(首先使用 regasm.exe 取消注册)并在 GAC 中注册了我的 DLL。现在我不需要副本或 .config,我的 C# 应用程序再次工作。 Excel VBA 仍然需要注册 regasm.exe,我只使用 gacutil.exe 后无法添加引用。

我的问题是:当您想将 DLL 用于 C# 应用程序和 Excel VBA 时,如何注册它?是否可以同时使用 regasm 和 gacutil 而不会出现任何问题?

【问题讨论】:

  • @Steve 是的,我只是不知道它是否会导致任何问题,它注册了不止一次。这就是我所关心的。这是第一次,我会同时使用 regasm 和 gacutil。
  • 我不知道您为什么认为这两个注册以任何方式交互。 COM(regasm)注册将其内容写入注册表,这是 VBA 之类的语言查找内容所需的繁琐方式,第二种方式涉及特殊文件夹和用于查找正确库的万无一失的机制,它被 NET 使用程序集(或 VS 引用系统)
  • @Steve 好吧,我没有任何注册 .dll 的经验。我找不到任何关于这两者之间交互的信息,也许我应该猜到没有...不过,感谢您的快速帮助。
  • 当您更新 NET 库并且需要更新注册表时,应该会出现唯一的问题。这始终是基于 COM 的注册的主要问题。在您控制的机器上做这件事相对容易,有时在安装了大量其他软件的客户机器上是一场噩梦。 (顺便说一句,我更喜欢将我的 NET 库放在我的应用程序文件夹中,并尝试实现一种快速安全的方式来通过互联网 Web 服务更新我的应用程序,这也允许对许可问题进行一定程度的控制)

标签: c# excel dll vba


【解决方案1】:

运行regasm 后,您可以使用gacutil /i 将程序集安装到GAC 中。完成此操作后,使用“浏览”选项卡将程序集的引用添加到您的 .NET 项目。添加参考后,在项目中找到参考并查看该参考的属性。将“复制本地”更改为“假”。

在运行时,您的 .NET 项目将在本地查找程序集,当找不到时,将检查 GAC。假设您已经运行了gacutil 命令,它将在那里找到它。

【讨论】:

  • 这样在客户端机器上部署解决方案时会增加额外的开销。如果您不是安装它的人,我可以想象指导用户(假设他们在机器/网络上具有管理员访问级别)使用 regasm 和 gacutil 将是一场噩梦。这些工具也可以在没有安装 VS 的情况下使用吗?
  • 感谢您的回答,我会这样做的。 @mehow 我开发的应用程序仅供内部使用,我们的用户(幸运的是)不必自己使用注册工具。
  • 不管怎样,我从 .NET 1.1 开始就没有使用 GAC 了,但我也有一段时间不必使用 COM 互操作了。如果我们只谈论 .NET 应用程序,我会说没有 gacutil 和 CopyLocal=True 并尽可能保持 xcopy 样式部署。但是,由于 VBA 也需要它,所以故事更复杂,对我来说,将 DLL 集中在一个明显的地方并且只有一个副本以避免混淆是否可能存在版本不匹配对我来说更有意义。不过,我对此没有强烈的看法。
【解决方案2】:

另一种稍微不同的方法是将您的 C# 库合并到 Excel-DNA .xll 加载项中。这使您无需注册或需要管理员权限即可在 Excel 中将库提供给 VBA,并且相同的加载项可以包括工作表 UDF 函数、功能区自定义等。

可以在此处找到 Mikael Katajamäki 通过 Excel-DNA 将 C# 库公开到 Excel VBA 的详细文章: http://mikejuniperhill.blogspot.com/2014/03/interfacing-c-and-vba-with-exceldna-no.htmlhttp://mikejuniperhill.blogspot.com/2014/03/interfacing-c-and-vba-with-exceldna_16.html.

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多