2013-06-25 54 views
1

我一直在爲需要我生成.tlb文件的應用程序創建各種插件。在過去,它只是將我的項目的構建屬性配置爲「註冊COM互操作」,從而生成一個.tlb文件以及我的輸出DLL。以前,在使用Visual Studio 2010安裝程序項目模板時,在目標機器上進行安裝期間,這將始終正確地註冊.tlb。如何在Visual Studio 2012中使用InstallShield LE註冊類型庫文件(.tlb)C#

我最近試圖切換到Visual Studio 2012並使用InstallShield LE項目來生成我的安裝程序,但似乎沒有在安裝過程中註冊類型庫,也沒有看到快速添加允許我通過cmd-line regasm路徑手動註冊 - 或者至少對我來說不是那麼明顯。

在InstallShield項目選項中,我必須手動將.tlb應用程序文件(從構建的\ release文件夾中)添加到要包含在安裝程序中的文件列表中,因爲它似乎並未包含由項目輸出或內容選項生成的文件。在.tlb文件的'COM & .Net Settings'屬性中,我將它配置爲註冊類型:'提取COM信息'並啓用'COM Interop'。

我錯過了什麼?

回答

0

試試這個線程了良好的技術說明:Are *.tlb files ever used at runtime?

在大多數情況下,我認爲是不需要的* .tlb文件,因爲它已經被它是否是一個exe文件或編譯成二進制文件最無論一個dll,但.NET Interop要複雜得多,另一個線程解釋了* .tlb文件可能需要處理線程和進程之間的高級通信問題 - 這些我都已經遺忘了。

當實現一個設置時,我從來沒有必要單獨註冊一個* .tlb文件,它已經足以註冊相應的二進制文件(exe/dll),但這一切都取決於產品的用例。

注意的Installshield被註冊爲COM互操作的方式並不總是最好的選擇,據我記得。我不確定他們在做什麼,但我會檢查並與正常的regasm.exe註冊: http://msdn.microsoft.com/en-us/library/tzat5yw6(v=vs.110).aspx。並仔細閱讀鏈接線程(Are *.tlb files ever used at runtime?),瞭解有關代理,存根和編組問題的情況,以防您需要支持這些功能。

這裏有以簡潔的信息,一些進一步的鏈接COM/DCOM:類型庫的

內容: http://msdn.microsoft.com/en-us/library/windows/desktop/ms221355(v=vs.85).aspx

COM,DCOM和類型庫:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366757(v=vs.85).aspx

爲COM接口生成的文件:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366830(v=vs.85).aspx

相關問題