我有一個vanilla .net類庫,其中包含一些類型[ComVisible],程序集本身標記爲「註冊COM Interop」。我正在嘗試爲應用程序構建一個WIX安裝程序,該安裝程序不僅需要將.net程序集複製到目標機器上的INSTALLATIONDIR,還需要註冊該對象以便一些傳統的VB6應用程序可以使用.net程序集。使用wix註冊.Net程序集標記爲COM interop
我一直在使用heat.exe(更準確地說是加熱文件任務)收集我通過componentGroupRef包含在我的主wix文件中的片段。我的問題是,heat.exe正在收穫的文件應該是我的類庫或dll本身輸出的.tlb文件嗎?如果我在.tlb上使用heat.exe,我沒有在片段中獲取任何註冊表元素,但是我使用的是dll。如果我應該使用dll,那麼.tlb在這個過程中扮演什麼角色?
進出口使用下面的散熱任務的MSBuild
<HeatFile
NoLogo="true"
ToolPath="$(WixToolPath)"
TreatWarningsAsErrors="false"
AutogenerateGuids="true"
GenerateGuidsNow="true"
OutputFile="$(MSBuildProjectDirectory)\fragments\DemoTypeLib.wxs"
File="$(SolutionDir)DemoClassLibrary1\bin\Debug\DemoClassLibrary1.dll"
ComponentGroupName="DemoTypeLibComponent"
PreprocessorVariable="var.DemoClassLibrary1.TargetDir"
SuppressCom="false"
DirectoryRefId="INSTALLLOCATION"
SuppressRegistry="false"
SuppressRootDirectory="true" />
嗨克里斯托弗。從你的答案我接受它我需要利用熱量來收穫dll而不是tlb?我只是將生成的片段添加到我的主wix文件中? – 2010-09-12 09:27:49
正確。幾個小心點要注意。有時Heat(以及來自其他供應商的工具)將無法提取一些所需的COM註冊表值。基於.NET程序集中有多少元數據,這看起來幾乎是不可能的,但這是由於當您執行gacutil/regfiles時,類中的任何用戶代碼都不會被調用。有關這方面的證據,請參閱MSDN gacutil幫助主題。 – 2010-09-12 13:34:20
如果它在目標機器上無法正常工作,請使用像InstallWatch這樣的程序來快照註冊表;運行gacutil並執行另一個快照/差異報告以查看所做的任何更改。如果您發現任何相關的手動創作到您的片段並重建/重新部署。 COM是一種痛苦,有時很棘手,但一旦穩定下來,你應該沒問題。 – 2010-09-12 13:35:24