我有一个vanilla .net类库,其中包含一些[ComVisible]类型,并且程序集本身标记为“Register for COM Interop” . 我正在尝试为应用程序构建一个WIX安装程序,它不仅需要将.net程序集复制到目标机器上的INSTALLATIONDIR,还需要注册该对象,以便一些传统的VB6应用程序可以使用.net程序集 .
我一直在使用heat.exe(更准确地说是热文件任务)来收集我在主wix文件中通过componentGroupRef包含的片段 . 我的问题是,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" />
2 回答
只需使用DLL和COM发送Fragment即可 . 你不需要TLB .
您应该同时收获.tlb和.dll文件 . 有些工具只能使用DLL注册,但其他工具(如脚本语言)也需要类型库 . 只需加热它们,并在最终项目中包含两个输出 . 例如,python的win32com和Perl的Win32 :: OLE库都需要注册的类型库才能运行 .