0

さまざまなインストール モードがあります。パラメータに応じて、次のようなことを行います。

<Property Id="PROP1" Value="Value1" />
<SetProperty Id="PROP1" Before="CostFinalize" Sequence="execute" Value="Value2"></SetProperty>

問題は、2 つ以上のオプションがあることです。それらを追加すると、取得します。

Duplicate symbol 'CustomAction:SetPROP1' found.

ある種の switch ステートメントを使用する方法はありますか、または複数の条件をどのように処理しますか?

もう1つの問題は、値に応じて複数の変数が設定されていることです(現在約10個)。それらすべてをまったく同じコードでリストするのは非常に面倒です

  <SetProperty Id="PROP2" Before="CostFinalize" Sequence="execute" Value="Value2"></SetProperty>
  <SetProperty Id="PROP3" Before="CostFinalize" Sequence="execute" Value="Value3"></SetProperty>

次のようにする方法はありますか?

<Condition val="...">
 <setProperty.../>
 <setProperty.../>
 <setProperty.../>
</Condition>

ありがとう!

4

1 に答える 1

1

まず、インストール プログラムのアーキテクチャを再考してみてください。同じ条件に基づいてこれらすべてのプロパティを設定する必要は本当にありますか? それとも、適切な機能とコンポーネントをより単純な方法で「条件付け」する方がよいのでしょうか?

質問の技術的な側面に戻りましょう。このSetProperty要素は、プロパティを設定して適切にスケジュールするカスタム アクションを定義するための「オールインワン」ソリューションである単なるショートカットです。SetProperty要素自体の ID 属性がないため、同じプロパティを異なる値に設定するために使用できないことは事実です。

代わりに、カスタム アクションを定義して手動でスケジュールするという古き良きスタイルを使用してください。

<CustomAction Id="SetProp11" Property="PROP1" Value="Value1" />
<CustomAction Id="SetProp12" Property="PROP1" Value="Value2" />
...
<InstallExecuteSequence>
  <Custom Action="SetProp11" After="...">your condition here</Custom>
  <Custom Action="SetProp12" After="...">your condition here</Custom>
  ...
</InstallExecuteSequence>

これにより、間違いなく余分な入力作業が追加され、コードが読みにくくなりますが、この方法で問題を回避できます。ただし、もう一度強調しておきます。回避策を考え出さなければならないということは、コードに匂いがつき始め、再考することが理にかなっている可能性があるということです。

また、switch ステートメントのように、多数のプロパティをまとめて設定する方法については知りません。または、技術的には、たとえば C# カスタム アクションを作成し、すべてのプロパティに対して一度にジョブを実行させることもできます。

お役に立てれば。

于 2013-11-05T07:42:32.563 に答える