我有一个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