3

私は、wixセットアップを作成したい大きな.NETソースツリー(185のC#およびVBプロジェクト、そのうち60はアプリまたはWebサイト)を持っています。一般的な考え方は、1つのセットアップmsiを用意し、各実行可能ファイルを機能にし、各アプリを別々のディレクトリにインストールすることです。お気に入り

%progfiles%/company/app1
                   /app2
                   /app3

これまでのところ、機能ツリーを使用してwix製品ファイルを作成し、ヒートツールで各.NETプロジェクトのフラグメントファイルを生成することができました。彼らはこのように見えます:

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
    <DirectoryRef Id="Client.Binaries">
        ...component definitions...
    </DirectoryRef>
    <DirectoryRef Id="Client.Content">
        ...etc... 
    </DirectoryRef>
</Fragment>
<Fragment>
    <ComponentGroup Id="Client.Binaries">
       ...ComponentRefs referencing components defined under 
          the DirectoryRef with the same id...
    </ComponentGroup>
    ...etc... 

ただし、この2つをリンクすると問題が発生します。機能はコンポーネントグループを参照でき、コンポーネントグループはコンポーネントを参照できます。コンポーネントはDirectoryRefに含まれています。

DirectoryRef要素によって参照されるDirectory要素を定義すると、問題が発生します。

一部のライブラリは複数のアプリで使用されるため、DirectoryRefは複数のディレクトリを指している必要があり、複数のDirectoryRef(異なるIDを持つ)は同じディレクトリを指している必要がありますディレクトリエイリアストリックが見つかりました)。どちらも不可能と思われます。

間違った方向に進んでいる、またはより深い洞察が欠けているという明確な印象を受けます。(私のwix-fuは完全に3日経過しているので驚きはありません)

誰かがこの暗くて邪悪な問題にろうそくを灯す方法を教えてもらえますか(しゃれは意図されていません...)

4

1 に答える 1

1

1つのMSIのみを使用する場合、同じコンポーネントを異なる場所にインストールすることはできません。同じファイルに対して複数のコンポーネントを作成することもできますが、それは少し醜く、メンテナンスの頭痛の種です。

より良いアプローチは、共有ファイルを1回だけインストールすることです。共有.NETアセンブリの場合は、それらを.NETグローバルアセンブリキャッシュ(GAC)に配置する必要があることを意味します。共有アセンブリごとに2つのことを行う必要があります。

  1. アセンブリに署名して、アセンブリに強い名前を付けます。Visual Studioでは、[アセンブリに署名する]チェックボックスを有効にして、プロジェクト設定から新しいキーファイルを生成できます。
  2. wixソースファイルで、 File要素Assembly=".net"に属性を 追加します

アセンブリがGACに登録されると、任意のアプリケーションでロードできるようになります。

于 2009-11-12T10:05:13.793 に答える