【发布时间】: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 服务更新我的应用程序,这也允许对许可问题进行一定程度的控制)