首页 文章

使用wix注册标记为COM interop的.Net程序集

提问于
浏览
1

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

  • 2

    只需使用DLL和COM发送Fragment即可 . 你不需要TLB .

  • 1

    您应该同时收获.tlb和.dll文件 . 有些工具只能使用DLL注册,但其他工具(如脚本语言)也需要类型库 . 只需加热它们,并在最终项目中包含两个输出 . 例如,python的win32com和Perl的Win32 :: OLE库都需要注册的类型库才能运行 .

相关问题