5

そのため、複数の wxs ファイルがあるマージ モジュールを作成しようとしています。プロジェクトのビルドが成功したので、すべて問題ないと思っていました。後で、セカンダリ wxs ファイルの 1 つのソース属性で使用されているパスが完全に間違っていることに気付きましたが、コンパイラは次のエラーを表示しませんでした。

システムはファイル '..\..\release_area\WrongPath\Component2.dll' を見つけることができません。

セカンダリ wxs ファイルに、メイン wxs ファイルのAssemblyFolderフォルダーを参照するDirectoryRef要素を追加して、2 つのファイル間の参照を作成しました。

メイン wxs ファイル:

<Module Id="MyModule" Language="1033" Version="1.0.0.0">
    <Package InstallerVersion="200" Platform="x86"/>
    <Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="AssemblyFolder">   
            <Component Id="Component1.dll">
             <File Id="Component1.dll" Name="Component1.dll" 
          KeyPath="yes" Assembly=".net" 
          Source="..\..\release_area\Comp\Component1.dll" />
         </Component>
        </Directory>
    </Directory>
</Module>

セカンダリ wxs ファイル:

<Fragment>
    <DirectoryRef Id="AssemblyFolder">
        <Component Id="Component2.dll">
         <File Id="Component2.dll" Name="Component2.dll" 
             KeyPath="yes" Assembly=".net" 
             Source="..\..\release_area\WrongPath\Component2.dll" />
     </Component>
    </DirectoryRef>
</Fragment>

明確にするために: テストするため<Component Id="Component2.dll">に、メイン wxs に直接コピーしたところ、エラーが発生しました:システムはファイル '..\..\release_area\WrongPath\Component2.dll' を見つけることができません。

私の推測では、セカンダリ wxs ファイルとメイン wxs ファイルの間の参照が完全に間違っているため、コンパイラはファイル パスを検証しませんが、何が問題なのかわかりません。

4

1 に答える 1

5

問題はコンパイラ (candle.exe) にはありません。Candle.exe は個別の「セクション」を作成します (モジュールとフラグメントは両方とも「セクション」です)。すべてをまとめるのはリンカー (light.exe) です。Light.exe は「エントリ セクション」(製品、モジュール、またはパッチ) から始まり、そこから参照をたどります。Main.wxs から Secondary.wxs への参照がないため、Secondary.wxs 内のものは取り込まれません。これを解決するには、次を追加するだけです。

<ComponentRef Id="Component2.dll"/>

Module要素の下のどこかに(私は通常それらを最後に置きます)。多くのコンポーネントを取得する場合は、ComponentGroup と ComponentGroupRef が役立ちます。

于 2009-09-26T06:51:33.640 に答える