2009-05-19 78 views
16

我有一個在Excel中由VBA使用的.NET 2.0 COM對象。它在我的開發機器上工作正常,但是當試圖在乾淨的VM工作站上使用它時,出現此錯誤:Excel .NET COM - 自動化錯誤。系統找不到指定的文件

自動化錯誤。 系統找不到指定的文件。

該DLL註冊爲「regasm/tlb/codebase mycom.dll」,未放入GAC。 我對VM方框沒有管理權限

任何想法?

回答

13

您需要使用參數值爲codebase的參數值或以程序的完整路徑調用regasm,或者將程序集放入始終位於搜索庫路徑上的某個位置。否則當客戶端嘗試實例化COM對象時將不會找到它。

+0

我嘗試使用位於c:\ temp的程序集的完整路徑上的regasm,但仍然是相同的錯誤 – ingt 2009-05-19 14:07:13

7

在Windows 7,64位和.NET 4.0框架DLL(32位),我希望可以用作Microsoft Excel 2010 VBA應用程序的COM對象,這裏是我的工作。

  1. 複製DLL到C:(。。/ TLB:。)\ WINDOWS \ SysWow64資料
  2. 在CMD外殼,運行

    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 
    

可以跳過最後一部分如果您不希望或需要智能感知機器,您正在註冊組裝。

我所擁有的關鍵掛斷是在XP上我從來沒有必須使用/ codebase參數,但這是在此之前需要的關鍵事情。

3

我收到這個「自動化錯誤,系統找不到指定的文件」錯誤後,我創建了一個.NET .dll(v4.0),目的是在VB6應用程序中使用它(用「 ClassInterface「和」ComVisible「屬性,具有」ComVisible「的方法)。

我運行了「regasm.exe -tlb C:\ PathTo \ MyDll.dll」,但在我的VB6應用程序中添加.tlb文件作爲參考並運行/調試之後收到了上述錯誤。只有在向regasm.exe調用添加「-codebase」參數並重新添加.tlb引用後,才能解決錯誤。

只是想我會分享我的經驗。

0

我還收到自動化錯誤。我的參考(在MS Access中)是一個TLB文件。保存TLB文件的文件夾中缺少相應的DLL文件,這導致出現「自動化錯誤」消息。將DLL添加回去。

0

我得到了同樣的錯誤(不能使用來自傳統VB6鱈第二個開發計算機上的.NET對象,這是工作,我原來寫的第一臺機器上後)。 .NET DLL編譯和註冊很好 - 我嘗試了各種組合 - 有和沒有使用VS中的「Register for 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運行時版本與您所針對的.NET Framework相關。

相關問題