Excel .NET COM - 自动化错误。系统找不到指定的文件。

22

我有一个.NET 2.0 COM对象,被Excel中的VBA使用。在我的开发机上运行正常,但是在尝试在一个干净的虚拟机工作站上使用时,我收到以下错误:

自动化错误。 系统找不到指定的文件。

该dll已使用"regasm /tlb /codebase mycom.dll"注册,未放置在GAC中。 我没有管理员权限在虚拟机上。

有任何想法吗?


1
你的COM平台是否正确?我制作了自己的.dll文件,以便从Excel VBA中使用。但是,由于我将其编译为x64而不是x86,因此出现了这个确切的消息。 - JohnG79
5个回答

18

您需要使用程序集的完整路径作为 codebase 参数值调用regasm,或将程序集放置于始终在搜索库时进行搜索的某个位置。否则,当客户端尝试实例化COM对象时,它将无法找到该程序集。


我尝试在程序集的完整路径(位于c:\ temp中)上使用regasm,但仍然出现相同的错误。 - ingt
1
那么我猜你最好的选择是启动ProcessMonitor - http://technet.microsoft.com/ru-ru/sysinternals/bb896645.aspx - 并查看到底是哪个文件没有找到。这可能是一些你完全不知道的依赖程序集。一旦你确定了,解决起来就会容易得多。 - sharptooth
1
sharptooth,非常感谢您的回答。它今天救了我的命! - Matthew Talbert

8
在 Windows 7 操作系统上,64 位版本,并且我想将一个 .NET 4.0 框架的 32 位 DLL 作为 COM 对象来在 Microsoft Excel 2010 的 VBA 应用程序中使用,下面是我的解决方式。
  1. Copy the dll to c:\windows\syswow64
  2. 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参数,但这是实现此操作所需的关键内容。


7
我在创建一个.NET .dll (v4.0)以供在VB6应用程序中使用时,遇到了“自动化错误。系统找不到指定的文件”错误。 在我的类上添加了“ClassInterface”和“ComVisible”属性,在方法上添加了“ComVisible”。
我运行了“regasm.exe -tlb C:\PathTo\MyDll.dll”,但在将.tlb文件作为VB6应用程序的引用并运行/调试它后仍然出现以上错误。直到在regasm.exe调用时添加“-codebase”参数并重新添加.tlb引用才解决了该错误。
只是想分享一下我的经验。

1

我也遇到了自动化错误。我的参考(在MS Access中)是一个TLB文件。相应的DLL文件从保存TLB文件的文件夹中丢失,导致出现“自动化错误”的消息。将DLL文件添加回去后问题得到解决。


1
我在第二台开发机上遇到了同样的错误(无法从旧版VB6代码中使用.NET对象),而在第一台机器上,我最初编写时可以正常工作。 .NET DLL编译并注册得很好-我尝试了各种组合-使用和不使用VS中的“注册COM互操作”构建设置;通过regasm.exe手动注册,并尝试使用/ codebase参数进行注册;启用和禁用COM可见性程序集级属性(当禁用时,我将属性设置在需要从COM中消耗的类上)。 但是没有什么效果,我仍然收到相同的错误。
结果表明,在第二台机器上,我已将DLL输出升级到了.NET 4.5,而最初则是构建一个.NET 2.0程序集。我的项目有一些引用目标是运行在.NET 2.0上的第三方Interop DLL。当我更新这些引用并重新构建DLL,或者将我的项目设置回运行在.NET 2.0上时,我的问题就解决了。当使用/codebase(VS自动执行)时,我发现我不需要将我的DLL放在应用程序目录或\syswow64中。此外,MSDN文档指出,在使用/codebase时必须为您的程序集使用SN(强名称),但我发现您不必这样做;您只会从regasm.exe命令行工具获得警告。

重点是,在COM互操作方面,要注意您的依赖项的.NET运行时版本与您所针对的.NET Framework的关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接