2013-05-03 26 views
15

インストールが必要な場合は、.NET Framework 4.0をインストールするためのバンドルを作成しようとしています。私は同様の質問があることを認識していますが、すべての回答は単なるスニペットで、どのファイルに入っているか、どのように.wxsファイルにインポートされているかは記述されていません。.NETをインストールするためのWiXバンドル

これはBundle.wxsファイルにあるものです。私は複数の入力セクションについてコンパイラの警告を受け取ります。

エラー2「{CF06625F-7B6B-4B6E-A24E-FDDCA7CFFFF4}」と「{0D1EE60A-FC4F-4083-8B1E-311E75A67B4C}」という複数のエントリセクションが見つかりました。 1つのエントリには1つのエントリセクションしか存在しない場合があります。

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Bundle UpgradeCode="{C6FF478E-C3DA-4D78-929D-24C3F3307356}" Version="4.0"> 
    <Chain> 
     <PackageGroupRef Id="NetFx40Redist"/> 
    </Chain> 
    </Bundle> 
</Wix> 

WiXのページのリンクのほとんどが壊れている、とバンドルタグに使用する属性については何も言及し、パッケージ/製品を交換していないようです。バンドルのGUIDを設定することについて、Wixのページで言及を見つけることができませんでした。それはWix 3.7の新機能ですか?

http://wix.sourceforge.net/manual-wix3/install_dotnet.htm

  1. は、どのように私は/ PayloadGroupRef
  2. が、それはBundle.wxsにする必要もありませんPackageGroupRef定義済みの.NET 4.0を使用していますか?それは私の主要なProduct.wxsにどこでインポートされますか?

答えて

18

というエラーは、あなたのプロジェクトは、これらの要素の複数を含むファイルを構築していることを示しています。あなたの場合は、すでにProduct要素を持つプロジェクトにBundle要素のファイルを追加したようです。これは、今日のWiXツールセットではサポートされていません。別のプロジェクトにBundle要素を配置する必要があります。

したがって、ブートストラップとMSIを作成するときは、2つの.wixprojファイルがあります。最初の.wixprojにはProductという情報が含まれます。 2番目の.wixprojにはBundleの情報が含まれ、最初の.wixprojへのプロジェクト参照があり、ビルド順が正しいようになります。

+0

これで、バンドル用のsepetate projを作成します。そして、1つのバンドルには複数のインストーラが連鎖することがあります。私のチェーンは、.NET 3.5、.NET 4.0、SQL Serverインストーラなどを持つことができます。 –

+0

はい、正確です。 'Bundle'は'パッケージの集合 'です。 –

+11

+1 - 2つのWixプロジェクトを参照/作成しなければならないという要件に関する参照/情報が見つかりませんでした。 – abbottdev

9

Wix/Bundle要素は、ブートストラッププロジェクトのルートです。 Product.wxsと同じプロジェクトには含まれません。 Visual Studioには、新しいWix Bootstrapperプロジェクト用のテンプレートがあります。あなたはおそらくそれを作成していないでしょう。

次にバンドルチェーンで、例のように.NETとアプリケーションのMSIが必要になります。 NetFx40Webを使用するには、WixNetfxExtensionを参照する必要があります。他のWixプロジェクトを参照するWixプロジェクトには事前定義された変数があり、TargetPathなどのプロパティを使用できます。この例では、このBootstrapperプロジェクトがMyApplicationSetupという名前のセットアッププロジェクトを参照していることを前提としています。 ProductModulePatchPatchCreationBundle

<Chain> 
    <PackageGroupRef Id="NetFx40Web"/> 
    <MsiPackage Id="MyApplication" SourceFile="$(var.MyApplicationSetup.TargetPath)"/> 
</Chain> 
+0

はい、私はVSのBootstrapper projを使用していませんでしたが、私はそれを認識していませんでした。 MsiPackage Idが私のメインインストーラプロジェクトのパッケージIDを参照しているとしますか?私のパッケージにはIDがないし、Msiへの参照もないので、私はこれを混乱させる。 –

+0

パッケージrefで "NetFx40Redist"を使いたければ、上記のようにバンドルファイルで私のprojを作成しました。 EXEがビルドされましたが、それは約1 MBです。私は、Visual Studioデプロイメントプロジェクトで行われているように、それに隣接して.NET 4のセットアップファイルがあることを期待しています。私はそれが実際にそのパッケージを引っ張ったかどうかはわかりません。 –

+0

WiX Toolsetスキーマは、一貫して一貫しています。つまり、ID属性は要素に一意の名前を与え、名前がRefで終わる要素で参照できます。したがって、MsiPackage Idは、SourceFileが指すパッケージに与える任意の名前です。ブートストラップのコンテキストでは、「パッケージ」は任意の種類のインストーラを指し、「msi」はWindowsインストーラパッケージのニックネームです。 WiX Setupプロジェクトによってmsiファイルが作成されます。 –

関連する問題