1

WIX プロジェクトのユーザー入力に基づいて、相互に排他的なアプリケーションを相互に排他的な環境にデプロイしたいと考えています。私が行った調査によると、条件を使用してこれを行うことはできないことがわかりましたhttp://www.joyofsetup.com/2007/05/30/feature-conditions-and-ui/ これはかなり一般的な質問であり、決定的なもののようですベストプラクティスは価値があります。

上記の記事に従って、機能と発行イベントを使用してこれを実装しました。私のUIのイベントは以下の通りです。

私の状況では、相互に排他的な 2 つの Web アプリケーションのいずれかを 3 つの異なる環境のいずれかにインストールしています。インストールするアプリケーションとインストール先の環境に応じて、アプリケーションと web.config 以外のすべてのファイルに 1 つ、web.config ファイルに 6 つの 8 つの機能を作成して、これを行いました。以下のパブリッシュ要素によって制御されているにもかかわらず、ICE 検証に合格するために各機能に条件を含める必要がありました。これは、これらの機能が異なるサーバー上の同じ名前のディレクトリにインストールされているためです。より良い方法はありますか、またはこれはこの種の状況の標準的な方法ですか?

      <Publish Event="AddLocal" Value="WebApp"><![CDATA[ServerType="Web"]]></Publish>
      <Publish Event="Remove" Value="WebApp"><![CDATA[ServerType<>"Web"]]></Publish>
      <Publish Event="AddLocal" Value="DataApp"><![CDATA[ServerType="App"]]></Publish>
      <Publish Event="Remove" Value="DataApp"><![CDATA[ServerType<>"App"]]></Publish>
      <Publish Event="AddLocal" Value="WebDevConfigFeature"><![CDATA[ServerType="Web" AND Environment="Dev" ]]></Publish>
      <Publish Event="Remove" Value="WebDevConfigFeature"><![CDATA[ServerType<>"Web" OR Environment<>"Dev"]]></Publish>
      <Publish Event="AddLocal" Value="WebQAConfigFeature"><![CDATA[ServerType="Web" AND Environment="QA" ]]></Publish>
      <Publish Event="Remove" Value="WebQAConfigFeature"><![CDATA[ServerType<>"Web" OR Environment<>"QA"]]></Publish>
      <Publish Event="AddLocal" Value="WebProdConfigFeature"><![CDATA[ServerType="Web" AND Environment="Prod" ]]></Publish>
      <Publish Event="Remove" Value="WebProdConfigFeature"><![CDATA[ServerType<>"Web" OR Environment<>"Prod"]]></Publish>
      <Publish Event="AddLocal" Value="AppDevConfigFeature"><![CDATA[ServerType="App" AND Environment="Dev" ]]></Publish>
      <Publish Event="Remove" Value="AppDevConfigFeature"><![CDATA[ServerType<>"App" OR Environment<>"Dev"]]></Publish>
      <Publish Event="AddLocal" Value="AppQAConfigFeature"><![CDATA[ServerType="App" AND Environment="QA" ]]></Publish>
      <Publish Event="Remove" Value="AppQAConfigFeature"><![CDATA[ServerType<>"App" OR Environment<>"QA"]]></Publish>
      <Publish Event="AddLocal" Value="AppProdConfigFeature"><![CDATA[ServerType="App" AND Environment="Prod" ]]></Publish>
      <Publish Event="Remove" Value="AppProdConfigFeature"><![CDATA[ServerType<>"App" OR Environment<>"Prod"]]></Publish>
      <Publish Event="EndDialog" Value="Return">1</Publish>
4

3 に答える 3

2

私がやりたいトリックは、2つの異なるキーファイルを持つ2つのコンポーネントを持つことです

c1-> f1(web.config.dev)c2-> f2(web.config.qa)c3-> f3(web.config.prod)

次に、これらの各ファイルには、web.configのコピーファイル要素と相互に排他的な条件が与えられます。

DEPLOYMENTTYPE〜= "DEV" DEPLOYMENTTYPE〜= "QA" DEPLOYMENTTYPE〜= "PROD"

その結果、これらのコンポーネントの1つだけがインストールされます。web.config.devとweb.configを取得すると、機能します。

これはすべて、単一の機能を使用して実行できます。

于 2012-05-08T16:56:53.127 に答える
1

環境(質問なし)、間接的なユーザー入力(関連する質問)、また​​は直接的なユーザー入力(機能の選択)のいずれでファイルを選択するかによって、さまざまなアプローチをとることができます。Christopher Painterのアプローチは、最初の2つには適していますが、機能の選択については、このInstallTalkブログ投稿で説明されている手法を試してみてください。

于 2012-05-09T11:53:30.310 に答える
0

個人的には、2 つの別個のアプリケーションを 2 つの msi に分割し、重複コード用の共通ライブラリを使用します。必要に応じて、burn を使用して一緒にブートストラップできます。

XmlFileまた、要素または要素を使用してインストール時に異なる値を変更できるため、web.config の異なるバージョンをすべて保存する必要はありませんXmlConfig。web.config ファイルを変更するこの方法の利点は、値が変更された場合にコマンドラインで値をインストーラーに渡すこともできるため、構成の変更のためだけに msi を再構築する必要がなくなることです。作業を簡単にするために、msiexec 経由で渡すのではなく、ダイアログを作成して設定することもできます。

于 2012-05-09T08:54:56.573 に答える