2

短いバージョン:ビルドサーバーでParaffinを使用して、コンポーネントGUIDが安定していることを確認するにはどうすればよいですか?


私は現在、WiX経由で展開する必要のあるプロジェクトに取り組んでいます。これはWebプロジェクトであるため、多くのファイルが含まれています(まだ初期段階で、すでに200近くのファイルがあります)。また、開発中、ファイルは絶えず追加および削除されるため、WiXコンポーネントリストを手動で維持することは単にオプションではありません。

コンポーネントルールについてたくさん読んだので、それらを破る人々は地獄に行くので、私は収穫機としてパラフィンを使うことにしました。このツールは、既存のコンポーネントリストを更新できるため、既存のコンポーネントの新しいGUIDを再作成することはできません。

ただし、新しいコンポーネントが作成されると、ツールは新しいGUIDを割り当てます。コンポーネントファイルが同一であっても、初期GUIDは、マシンごとに、または時間によってのみ異なります。

したがって、明らかに、最初のGUIDを修正するための中央権限が必要です。私のアイデアは、空のコンポーネントリストをコミットすることでした。このリストは、ビルド時にParaffinを呼び出すビルドサーバーによって埋められます。したがって、ビルドサーバーによって作成されたMSIのみを配布する場合、コンポーネントのルールが守られていることを確認できます。

ただし、このアプローチの問題は、ビルドサーバーがクラッシュしたり、ローカルリポジトリが空になったりした場合に、GUIDを追跡する手段がないことです。ビルドサーバーに生成されたコンポーネントリストをリポジトリにコミットさせることを考えていましたが、それはクリーンなアイデアではないようです。

私が考えたもう1つの解決策は、コミットする前にすべての開発者にビルドさせる(したがって、Paraffinと呼ぶ)ことでした。したがって、各開発者は、新しく追加されたファイルの初期GUIDを作成し、それらをコンポーネントリストにコミットします。

このアプローチの明らかな問題:人々(例えば開発者A)はコミットする前にビルドするのを忘れます。したがって、これらの場合、ビルドサーバーは新しいファイルの初期GUIDを作成しますが、それらもローカルにのみ保存されます。数回のコミットの後、開発者Bがやって来てソリューションをビルドし、開発者Aが作成したファイルの新しいGUIDを作成します。開発者Aは、このGUIDを含むコンポーネントリストをコミットし、ビルドサーバーがそれをチェックアウトします。これで、ビルドサーバーはパッケージのGUID(開発者Aによって作成された)を取得しました。ファイルはその間に変更されていませんが、以前は別の(自己作成された)GUIDを使用していました。

では、開発者がコミットする前にソリューションをビルドすることに依存することなく、GUIDがビルド間で安定していることをどのように確認できますか?上で概説したアプローチはどちらも私には満足のいくものではないように思えますが、今私が考えることができるのはそれだけです。

4

2 に答える 2

1

私に関する限り、コンポーネントルールは、同じGUID(完全に同じリソースである必要があります)でコンポーネントを共有する複数のインストーラーがある場合、またはwixlibまたはマージモジュールを使用している場合にのみ実際に機能します。その後、さまざまなインストーラーの一部として含まれます。

あなたが上で言ったことから、私にはあなたがそうするようには聞こえないので、ビルドごとに異なるコンポーネントGUIDを持っていても害はありません。これは、Webサイトをアップグレードすると、変更されていないファイルが削除され、別のコンポーネントGUIDで再インストールされることを意味します。インストーラーがサイトが機能するために必要なすべてのファイルを正しくインストールし、他の製品からコンポーネントを削除しない限り、実際には問題ではないIMHO。

MajorUpgrade要素を使用する場合、新しい製品がインストールされる前に古い製品が完全に削除されるため、2つのバージョン間で共有されているコンポーネントGUIDはすべて削除されてから、とにかく再インストールされます。

私は常に自分のGUID要素をそのままにしておきGuid='*'ます。そうすれば、複数の製品のコンポーネントでGUIDの衝突が発生することは決してないことがわかります。

^これは理論的には真実ではないことはわかっていますが、このユースケースでは真実です。

于 2013-01-09T11:28:07.250 に答える
1

完全に真実ではありません。コンポーネントのGUIDをビルドからビルドに変更するのは、新しいGUIDを再インストールする前にファイルがシステムから離れるように、RemoveExistingProductsを早期にスケジュールする場合にのみ問題ありません。このアプローチは、ファイル数が少ない小規模なインストーラーには適していますが、インストーラーが大きくなるにつれて、ファイルを上書きするだけでなく、削除してから再インストールするときに、2倍のIOを実行する必要があるというピンチを感じるようになります。要するに、それはあなた次第ですが、提案されたアプローチに飛び込む前に、アプリケーションがどれだけ大きくなる可能性があるかを慎重に考える必要があります。

于 2013-01-15T21:15:13.097 に答える