首先,问题类似于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文档,但未找到相关信息
如果需要任何其他信息,请不要犹豫。
非常感谢
更新
要解决我的问题,我在安装过程中将安装添加到GAC
(new Publish()).GacInstall("C:\temp\install\mydll.dll")
发布需要对System.EnterpriseServices
答案 0 :(得分:1)
COM DLL必须始终存在于其注册的文件夹中。您可以在任何应用程序中使用它,但Windows系统需要能够找到DLL。
您的具体问题听起来应该考虑Office插件开发。
像Microsoft Dynamics NAV 5这样的例外情况也很少,它们也要求DLL与应用程序的可执行文件存在于同一个文件夹中,但我想这只是设计中的一个缺陷而且不应该这样做。通常情况是这样(在Dynamics中:如果从经典客户端和应用程序服务器都使用COM类,则COM-DLL需要同时出现在classic-folder和application server文件夹中)。