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

时间:2009-05-19 09:18:07

标签: .net excel com automation

我有一个.NET 2.0 COM对象,由VBA在Excel中使用。它在我的开发机器上工作正常,但是当尝试在干净的VM工作站上使用它时,我收到此错误:

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

dll在“regasm / tlb / codebase mycom.dll”中注册,而不是放在GAC中。 我没有VM框上的管理权限

有什么想法吗?

5 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:8)

在Windows 7,64位和.NET 4.0框架dll(32位)上,我希望它可用作Microsoft Excel 2010 VBA应用程序的COM对象,这对我有用。

  1. 将dll复制到c:\ windows \ syswow64
  2. 在cmd shell中,运行

    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
    
  3. 如果您在要注册装配的机器上不想要或需要智能感知,则可以跳过最后一部分(/ tlb:...)。

    我遇到的关键问题是在XP上我从来没有使用过/ codebase参数,但这是之前需要的关键事项。

答案 2 :(得分:4)

我收到了这个&#34;自动化错误。系统找不到指定的文件&#34;我创建一个.NET .dll(v4.0)后打算在VB6应用程序中使用它(用#34; ClassInterface&#34;和#34; ComVisible&#34;属性,方法装饰我的类)与&#34; ComVisible&#34;)。

我跑了&#34; regasm.exe -tlb C:\ PathTo \ MyDll.dll&#34;但是在我的VB6应用程序中添加.tlb文件作为参考并运行/调试它后收到了上述错误。只有在添加&#34; -codebase&#34; regasm.exe调用的参数并重新添加.tlb引用,错误得到解决。

只是想我分享我的经验。

答案 3 :(得分:0)

我也收到了自动化错误。我的参考(在MS Access中)是一个TLB文件。保存TLB文件的文件夹中缺少相应的DLL文件,这导致了“自动化错误”。要显示的消息。将DLL添加回固定的。

答案 4 :(得分:0)

我遇到了同样的错误(在我最初编写它的第一台机器上工作之后,无法在第二台开发机器上使用传统VB6代码中的.NET对象)。编译和注册的.NET DLL很好 - 我尝试了各种组合 - 使用和不使用VS中的“注册COM Interop”构建设置;通过regasm.exe手动注册并使用和/不包含/ codebase参数尝试此操作;尝试启用和禁止COM Visible程序集级别属性(在抑制时,我在我需要从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 Interop的角度来看,请注意与您所针对的.NET Framework相关的.NET运行时版本的依赖项。