0

我有不同的安装模式。根据参数,我执行以下操作:

<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>

ETC

有没有办法让它像:

<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 回答