天天看點

Primary Interop Assemblies裡面的dll部署時一定要注冊

程式集注冊工具 (Regasm.exe) 程式集注冊工具讀取程式集中的中繼資料,并将所需的項添加到系統資料庫中。系統資料庫允許 COM 客戶程式以透明方式建立 .NET Framework 類。類一經注冊,任何 COM 客戶程式都可以使用它,就好像該類是一個 COM 類。類僅在安裝程式集時注冊一次。程式集中的類執行個體直到被實際注冊時,才能從 COM 中建立。regasm assemblyFile [options] 參數說明 assemblyFile 要向 COM 注冊的程式集。 選項說明 /codebase 在系統資料庫中建立一個 Codebase 項。Codebase 項指定未安裝到全局程式集緩存中的程式集的檔案路徑。如果随後要安裝正在注冊到全局程式集緩存中的程式集,則不應指定此選項。用 /codebase 選項指定的 assemblyFile 參數必須是具有強名稱的程式集。 /help 顯示該工具的指令文法和選項。 /nologo 取消顯示 Microsoft 啟動标題。 /regfile [:regFile] 為程式集生成指定的 .reg 檔案,該檔案包含所需的系統資料庫項。指定此選項不更改系統資料庫。此選項不能與 /u 選項或 /tlb 選項一起使用。 /silent 或 /s 取消顯示成功消息。 /tlb [:typeLibFile] 從指定的程式集生成類型庫,該類型庫包含在程式集中定義的可通路類型的定義。 /unregister 或 /u 登出在 assemblyFile 中找到的可建立類。省略此選項将導緻 Regasm.exe 注冊程式集中的可建立類。 /verbose 指定詳細模式;當用 /tlb 選項指定時,顯示任何需要為其生成類型庫的引用程式集的清單。 /? 顯示該工具的指令文法和選項。注意   Regasm.exe 指令行選項不區分大小寫。隻需提供足夠的選項來唯一辨別它。例如,/n 等效于 /nologo,而 /t:outfile.tlb 等效于 /tlb:outfile.tlb。備注可以使用 /regfile 選項生成包含系統資料庫項的 .reg 檔案,而不是直接對系統資料庫進行更改。通過系統資料庫編輯器工具 (Regedit.exe) 導入 .reg 檔案,可以在計算機上更新系統資料庫。請注意,.reg 檔案不包含任何可由使用者定義的注冊函數完成的系統資料庫更新。指定 /tlb 選項時,Regasm.exe 生成并注冊一個描述在程式集中找到的類型的類型庫。Regasm.exe 将生成的類型庫放到目前的工作目錄中或為輸出檔案指定的目錄中。為引用其他程式集的程式集生成類型庫可能導緻同時生成幾個類型庫。可使用類型庫向開發工具(如 Visual Studio .NET)提供類型資訊。如果正在注冊的程式集是由類型庫導入程式 (Tlbimp.exe) 産生的,則不應使用 /tlb 選項。如果程式集是從類型庫導入的,則不能從它導出類型庫。除了類型庫導出程式 (Tlbexp.exe) 不能注冊它産生的類型庫外,使用 /tlb 選項同使用 Tlbexp.exe 和 Regasm.exe 的效果相同。當您注冊一個程式集供 COM 使用時,Regasm.exe 會在本地計算機的系統資料庫中添加一些項。更具體地說就是,它建立與版本相關的系統資料庫項,這些項允許在一台計算機上并行運作同一程式集的多個版本。第一次注冊程式集時,會為該程式集建立一個頂級項并為這個程式集版本建立一個唯一的子項。每次注冊該程式集的新版本時,Regasm.exe 都為新版本建立一個子項。 例如,假設您要注冊一個版本為 1.0.0.0 的托管元件 myComp.dll 供 COM 使用。後來,您又注冊版本為 2.0.0.0 的 myComp.dll。您确定計算機上的所有 COM 用戶端應用程式都要使用 2.0.0.0 版本的 myComp.dll,并且決定登出 myComponent.dll 版本 1.0.0.0。此系統資料庫方案允許您登出 myComp.dll 版本 1.0.0.0,這是因為登出操作隻移除 1.0.0.0 版本子項。 使用 Regasm.exe 注冊程式集之後,可以将該程式集安裝在全局程式集緩存中,以便可以從任何 COM 用戶端激活它。如果程式集僅準備由單個應用程式激活,則可以将它放到該應用程式的目錄中。示例下面的指令注冊 myTest.dll 中包含的所有公共類。regasm myTest.dll 下面的指令生成檔案 myTest.reg,該檔案包含所有必要的系統資料庫項。此指令不更新系統資料庫。regasm myTest.dll /regfile:myTest.reg 下面的指令注冊 myTest.dll 中包含的所有公共類,并生成和注冊類型庫 myTest.tlb,該類型庫包含 myTest.dll 中定義的所有公共類型的定義。regasm myTest.dll /tlb:myTest.tlb

繼續閱讀