我有一个.NET 2.0 COM对象,被Excel中的VBA使用。在我的开发机上运行正常,但是在尝试在一个干净的虚拟机工作站上使用时,我收到以下错误:
自动化错误。 系统找不到指定的文件。
该dll已使用"regasm /tlb /codebase mycom.dll"注册,未放置在GAC中。 我没有管理员权限在虚拟机上。
有任何想法吗?
我有一个.NET 2.0 COM对象,被Excel中的VBA使用。在我的开发机上运行正常,但是在尝试在一个干净的虚拟机工作站上使用时,我收到以下错误:
自动化错误。 系统找不到指定的文件。
该dll已使用"regasm /tlb /codebase mycom.dll"注册,未放置在GAC中。 我没有管理员权限在虚拟机上。
有任何想法吗?
您需要使用程序集的完整路径作为 codebase
参数值调用regasm,或将程序集放置于始终在搜索库时进行搜索的某个位置。否则,当客户端尝试实例化COM对象时,它将无法找到该程序集。
In a cmd shell, run
C:\Windows\Microsoft.NET\Framework\v4.0.<whatever you have>\regasm.exe c:\windows\syswow64\<name of dll> /codebase /tlb:c:\windows\syswow64\<name of dll minus '.dll'>.tlb
如果您不需要在注册程序集的计算机上使用智能感知,则可以跳过最后一部分(/tlb:......)。
我遇到的关键问题是,在XP上之前从未使用过/codebase参数,但这是实现此操作所需的关键内容。
我也遇到了自动化错误。我的参考(在MS Access中)是一个TLB文件。相应的DLL文件从保存TLB文件的文件夹中丢失,导致出现“自动化错误”的消息。将DLL文件添加回去后问题得到解决。
重点是,在COM互操作方面,要注意您的依赖项的.NET运行时版本与您所针对的.NET Framework的关系。