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

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

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

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

有任何想法吗?

您需要使用程序集的完整path作为codebase参数值调用regasm,或者将程序集放到始终位于search库path上的某个位置。 否则当客户端尝试实例化COM对象时,将不会find它。

在Windows 7,64位和一个.NET 4.0框架的DLL(32位),我想作为一个COM对象的Microsoft Excel 2010 VBA应用程序,这里是我的工作。

  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 

如果您不希望或需要在注册程序集的计算机上使用智能感知function,则可以跳过最后一部分(/ tlb :.)。

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

我创build了一个.NET .dll(v4.0),打算在VB6应用程序中使用它(我的类用“ClassInterface”和“ ComVisible“属性,方法与”ComVisible“)。

我运行了“regasm.exe -tlb C:\ PathTo \ MyDll.dll”,但在我的VB6应用程序中添加.tlb文件作为参考并运行/debugging之后,收到了上述错误。 只有在向regasm.exe调用添加“-codebase”参数并重新添加.tlb引用后,才能解决错误。

只是想我会分享我的经验。

我也收到一个自动化错误。 我的参考(在MS Access)是一个TLB文件。 保存TLB文件的文件夹中缺less相应的DLL文件,导致出现“自动化错误”消息。 将DLL添加回去。

我得到了同样的错误(无法使用第二台开发机器上的传统VB6 cod的.NET对象,在我最初编写它的第一台机器上工作之后)。 NET DLL编译和注册就好 – 我尝试了各种组合 – 有和没有使用VS中的“注册COM互操作”构build设置; 通过regasm.exe手动注册并尝试使用/不使用/ codebase参数; 尝试启用和禁止COM Visible程序集级属性(当压制时,我设置了我需要从COM使用的类的属性)。 但没有任何工作,我一直得到同样的错误。

原来,我已经升级到第二台机器上的.NET 4.5的DLL输出,而它最初是build立一个.NET 2.0程序集。 我的项目有几个参考针对运行.NET 2.0的第三方Interop DLL。 当我更新这些引用并重buildDLL – 或者 – 将我的项目设置回.NET 2.0上运行 – 我的问题解决了。 当使用/ codebase(VS自动),我发现我不需要把我的DLL在应用程序目录或在\ syswow64。 此外,MSDN文档声明,在使用/ codebase时,您必须为您的程序集使用SN(强名称),但我发现您不必; 你只是从regasm.exe命令行工具得到一个警告。

关键是,从COM Interop的angular度来看,要注意.NET运行时版本的依赖关系。