1

[ComVisible] であるいくつかの型を含むバニラ .net クラス ライブラリがあり、アセンブリ自体は "Register for COM Interop" とマークされています。.net アセンブリをターゲット マシンの INSTALLATIONDIR にコピーするだけでなく、一部のレガシー VB6 アプリケーションが使用できるようにオブジェクトを登録する作業を行う必要があるアプリ用の WIX インストーラーを構築しようとしています。 .net アセンブリの。

メインのwixファイルにcomponentGroupRefを介して含めたフラグメントを収集するために、heat.exe(より正確にはheatファイルタスク)を使用しています。私の質問は、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" />
4

2 に答える 2

3

.tlb ファイルと .dll ファイルの両方を収集する必要があります。一部のツールは DLL 登録のみを使用できますが、スクリプト言語のようにタイプ ライブラリも必要とするツールもあります。単純に両方を加熱し、両方の出力を最終プロジェクトに含めます。たとえば、python の win32com ライブラリと Perl の Win32::OLE ライブラリはどちらも、機能するためにタイプ ライブラリを登録する必要があります。

于 2010-12-30T18:41:53.650 に答える
1

Fragment を DLL とそのための COM とともに出荷するだけです。TLB は必要ありません。

于 2010-09-12T01:14:08.477 に答える