我有一个香草.NET类库,其中包含一些类型的[Comvisible],并且组件本身标记为“登记为com Interop”。我正在尝试为应用程序构建WIX安装程序,不仅需要将.NET组件复制到目标计算机上的安装dir,而且还需要进行注册该对象的工作,以便某些Legacy 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" />
有帮助吗?

解决方案

只需将碎片和DLL和COM运送。您不需要TLB。

其他提示

您应该同时收集.tlb和.dll文件。有些工具只能使用DLL注册,而其他工具(例如脚本语言)也需要类型库。只需加热两个,然后将两个输出都包括在您的最后一个项目中。例如,Python的Win32COM和Perl的Win32 :: Ole库都需要注册的类型库来函数。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top