7

私の会社は最近、Wix Toolset(v.4.0.12)の使用を強制しました。これは、残念ながらインストーラープロジェクトが含まれなくなったVisualStudio2012にアップグレードしたためです。

私の問題は次のとおりです。私は多くのプロジェクトで大きな解決策を持っており、それらはすべてexeファイルといくつかのdllになります。

次に、ソリューションでWixセットアッププロジェクトを作成し、exeファイルを生成するプロジェクトへの参照を追加します。そのプロジェクト参照のプロパティで、とを設定Harvest: trueProject Output Groups: Binariesました。

WiXプロジェクトのビルドでは、参照されているプロジェクトから依存関係を収集することを期待しているため、手動で参照を追加する必要はありません。これにより、メンテナンスが増えるからです。

さらに、heat.exe参照されたプロジェクトファイルで実行すると、ファイルのexe出力のみが取得され、プロジェクトが依存するdllは取得されません。

上記は非常に標準的であり、wixツールがその情報を収集できるはずです。そして、なぜネット上で広範囲に検索した後、同様の問題を抱えている人を見つけることができないのか、私は本当に疑問に思います。

上記の理由を誰かが知っているなら、WiXで何かをする方法の基本的なチュートリアルを送ってみてください。適切なものを見つけるのは不可能のようです。

4

3 に答える 3

8

WiXv3.6以降はVS2012をサポートしています。WiX v4.0はほとんど起動されておらず、現時点では使用をお勧めしません。v4.0には多くの重大な変更が加えられているため、今のところv3.xの行に固執してください。

Votiveの自動収集機能は完全には機能していません。これが、デフォルトで無効になっている理由です。多くのプロジェクトタイプがそれを破っていることを発見しました。ご存知のように、ハーベスティングは複数のプロジェクト参照をウォークスルーしません。正しく機能する前に、より多くの作業が必要なすべてのもの。

Fileそれまでの間、要素内の要素を一覧表示できますComponent

于 2013-03-26T15:03:32.157 に答える
2

まだリリースされていないときにv4.0.12をどのように使用しているかわからない!:) Wix v3.8は最新バージョンです:http ://wixtoolset.org/releases 。

公式ドキュメントにはたくさんのガイドがあり、チュートリアルにもかなりの情報があります。

ただし、特定のケースでは、自動ハーベスティングがまだサポートされていないため、各プロジェクトの出力とその依存関係をインストーラーに手動で含める必要があります。

<Component>
    <File Id="ProjectA.Output"
          Name="$(var.ProjectA.TargetFileName)"
          Source="$(var.ProjectA.TargetPath)"
          KeyPath="yes" />
</Component>

<Component>
    <File Id="ProjectA.NlogDependancy"
          Name="NLog.dll"
          Source="$(var.ProjectA.TargetDir)\Nlog.dll"
          KeyPath="yes" />
</Component>

<Component>
    <File Id="ProjectB.Output"
          Name="$(var.ProjectB.TargetFileName)"
          Source="$(var.ProjectB.TargetPath)"
          KeyPath="yes" />
</Component>

<Component>
    <File Id="ProjectB.AutofacDependancy"
          Name="Autofac.dll"
          Source="$(var.ProjectB.TargetDir)\Autofac.dll"
          KeyPath="yes" />
</Component>

これはそれほど難しいことではなく、数百のバイナリがない限り、それほど時間はかかりません。

于 2013-03-26T12:04:13.347 に答える
1

ソリューションの.msiインストールを作成しようとしたときに、同様の問題が発生しました。

この問題を克服し、プロジェクトに新しい.dllやその他の依存関係を挿入した場合でも長期間持続させるために、次のことを行いました。

私のProduct.wxsには、この「ディレクトリ」があります

<!--Here We Install Our Main App-->
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLFOLDER" Name="MyAppDir"/>
  </Directory>
...
</Directory>

Wixプロジェクト->プロパティ->ビルドイベント->ビルド前イベントコマンドラインで、次のコマンドを追加しました:

 "%wix%\bin\heat" dir "$(SolutionDir)MainProject\bin\Debug" -dr INSTALLFOLDER -scom -frag -srd -sreg -gg -cg Components  -var var.MainProject.TargetDir -o $(SolutionDir)MainProject\Includedheat.wxs

wixプロジェクトをビルドすると、MainProjectディレクトリにIncludedheat.wxsファイルが作成され、MainProject \ bin\Debugディレクトリのすべてのファイルが一覧表示されます。

次のステップ-私が追加した機能セクションよりも、Includedheat.wxsをwixプロジェクトに追加します。

<!--Add Component-->
<Feature Id="MainApplication" Title="Main Application" Level="1">
...
<ComponentGroupRef Id="Components" />
</Feature>

これで、.msiを再構築してインストールすると、MainProject \ bin \ Debugディレクトリにあるすべてのコンテンツが、ターゲットの場所のMyAppDirディレクトリにも含まれるようになります。

いくつかの詳細については:私はこのガイドに従いました:

動作するWixプロジェクトを作成します。

簡単な方法heat.exe。

また、コマンドで使用するフラグを削除するために読むことをお勧めします。

于 2015-11-08T08:41:48.867 に答える