我有不同的安装模式。根据参数,我会执行以下操作:
<Property Id="PROP1" Value="Value1" />
<SetProperty Id="PROP1" Before="CostFinalize" Sequence="execute" Value="Value2"></SetProperty>
问题在于,当我添加它们时,我有两个以上的选项。
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 :(得分: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#自定义操作,让它一次完成所有属性的工作。
希望这有帮助。