2014-12-01 36 views
1

我在Visual Studio 2010 Express中編寫了VB.NET類庫。我確保在Properties - > Application - > Assembly Information選項卡上選擇「Make assembly COM-Visible」。我還確保在屬性窗口的編譯選項卡上選擇「Register for COM Interop」。無法在原始編譯機器以外的機器上部署.Net DLL

生成的DLL在編譯項目的機器上工作正常。該DLL旨在對來自Excel的幾個輸入數組執行一些重要處理並返回一個輸出數組。我能夠在VBA中添加對DLL的引用並使用該功能。

我無法弄清楚如何在其他機器上安裝DLL。我確保將.NET更新到部署機器上的當前版本。然後運行以下批處理文件:

C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe「C:\ Users \ Public \ DRAPERLibrary.dll」/ codebase /tlb:DRAPERLibrary.tlb

RegAsm的這次調用返回時沒有錯誤。

我可以看到Windows註冊表有一些新的引用到這個DLL,但我看不到在Excel中的DLL。如果我手動瀏覽到DLL,它會返回錯誤「無法添加對指定文件的引用」。

我在哪裏出錯了?什麼是Visual Studio創建Excel參考?有什麼我可以添加到我的批處理文件,導致Excel將此DLL識別爲VBA中的可用引用?

非常感謝您花時間回覆。

+2

您可能不應該使用64位版本的Regasm.exe,大多數Office安裝都是32位。使用框架,而不是Framework64。 – 2014-12-01 22:00:32

+0

我強烈建議使用installshield limited或其他類似產品來創建安裝程序,而不是批處理文件路徑。這樣的生活很簡單。 – RubberDuck 2014-12-01 22:05:01

+0

@HansPassant使用32位版本的Regasm導致DLL出現在VBA引用列表中;然而,現在當我在部署機器上運行VBA代碼時,我收到錯誤「ActiveX組件無法創建對象」。這個宏在開發機器上工作。 – NickVise 2014-12-02 14:21:40

回答

0

我能夠在當今的其他機器上使用DLL。我最初犯了一些錯誤,導致DLL失敗。我的問題的起源是由註冊DLL使用64位版本RegAsm而不是32位版本引起的。下面列出的操作順序是最終得到這個結果的順序。

  • 在VBA
  • 取下所有的舊DRAPERLibrary參考使用RegAsm與/ u參數完全註銷該DLL
  • 使用RegAsm的32位版本註冊新的DLL,因爲我有一個32位版本的工作的Excel(\ Microsoft.NET \框架\代替\ Microsoft.NET \ Framework64)
  • 在VBA
  • 更新模塊代碼選擇參考新DRAPERLibrary以反映最新的DLL版本號

感謝@HansPassant幫助我解決了這一切。

相關問題