2013-11-04 64 views
0

我有不同的安裝模式。根據參數我做這樣的事情:wix:根據具體情況設置多個值

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

問題是,我有超過2個選項,當我添加他們我越來越。

Duplicate symbol 'CustomAction:SetPROP1' found. 

有沒有辦法讓某種switch語句或者如何處理多個條件?

另一個麻煩是,我有多個變量設置爲根據值(約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> 

謝謝!

回答

0

首先,嘗試重新思考安裝程序的體系結構。是否真的有必要根據相同的條件設置所有這些屬性?或者,「條件」更好 - 以更簡單的方式使相應的功能和組件更好?

讓我們回到你的問題的技術方面。 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#自定義操作,讓它一次完成所有屬性的工作。

希望這會有所幫助。