当dll与注册

时间:2015-08-19 07:30:48

标签: .net dll com assemblies regasm

首先,问题类似于Deploying .NET COM dll, getting error (0x80070002),但它没有回答我的问题。

我已经在Excel / Word中构建了一个与VBA一起使用的dll(.net4)。

原理:

  • 我使用regasm.exe从临时文件夹注册dll(没问题)

    RegAsm.exe `C:\temp\install\mydll.dll` /codebase
    
  • 加载Excel / Word时,文档(excel或word)在引用中加载dll

    Call ThisWorkbook.VBProject.References.AddFromFile("C:\working\anyfolder\mydll.tlb")
    

文件夹路径可以根据用户而改变(他创建他想要的文档),并且他可以将文档发送给其他用户(如果dll不在文件夹中,则文档以降级模式工作。

所有这一切都很好。

我的问题:最近我决定改进这个dll的安装。安装完成后,我添加了一个干净的安装文件夹(C:\ temp \ install)。但是在这样做之后,当我尝试在Excel / Word中使用我的dll时,我有error 0x80070002 File not found,即使dll位于使用的文件夹中(它与我注册的dll的版本相同)

我所知道的:我明白他想要安装文件夹中的dll。

我想要的是什么:

  • 注册regasm后,有没有办法从安装文件夹中删除dll,只使用文件夹中的文件夹(根据需要将文件夹中的dll移动到文件夹中)。
  • 我应该看看GAC吗? (如果dll与文档位于同一文件夹中,我认为不需要GAC)

我阅读了regasm文档,但未找到相关信息

如果需要任何其他信息,请不要犹豫。

非常感谢

更新

要解决我的问题,我在安装过程中将安装添加到GAC

(new Publish()).GacInstall("C:\temp\install\mydll.dll")

发布需要对System.EnterpriseServices

的引用

1 个答案:

答案 0 :(得分:1)

COM DLL必须始终存在于其注册的文件夹中。您可以在任何应用程序中使用它,但Windows系统需要能够找到DLL。

您的具体问题听起来应该考虑Office插件开发。

像Microsoft Dynamics NAV 5这样的例外情况也很少,它们也要求DLL与应用程序的可执行文件存在于同一个文件夹中,但我想这只是设计中的一个缺陷而且不应该这样做。通常情况是这样(在Dynamics中:如果从经典客户端和应用程序服务器都使用COM类,则COM-DLL需要同时出现在classic-folder和application server文件夹中)。

相关问题