我想基于WIX项目中的用户输入将互斥的应用程序部署到互斥的环境中。我所做的研究告诉我,我不能用条件来http://www.joyofsetup.com/2007/05/30/feature-conditions-and-ui/这似乎是一个相当普遍的问题,一个明确的最佳实践将是有价值的。
我已根据上述文章使用功能和发布事件来实现此功能。我的UI中的事件如下。
在我的情况下,我将两个互斥的Web应用程序之一安装到三个不同的环境之一。我这样做是为了创建8个功能,1个用于应用程序,1个用于除web.config之外的所有文件,6个用于web.config文件,具体取决于正在安装的应用程序和要安装的环境。我必须在每个功能中包含一个条件以通过ICE验证,即使它们由下面的发布元素控制,因为它们被安装到不同服务器上名为相同的目录。有没有更好的方法,或者这是这种情况的标准做法?
<Publish Event="AddLocal" Value="WebApp"><![CDATA[ServerType="Web"]]></Publish>
<Publish Event="Remove" Value="WebApp"><![CDATA[ServerType<>"Web"]]></Publish>
<Publish Event="AddLocal" Value="DataApp"><![CDATA[ServerType="App"]]></Publish>
<Publish Event="Remove" Value="DataApp"><![CDATA[ServerType<>"App"]]></Publish>
<Publish Event="AddLocal" Value="WebDevConfigFeature"><![CDATA[ServerType="Web" AND Environment="Dev" ]]></Publish>
<Publish Event="Remove" Value="WebDevConfigFeature"><![CDATA[ServerType<>"Web" OR Environment<>"Dev"]]></Publish>
<Publish Event="AddLocal" Value="WebQAConfigFeature"><![CDATA[ServerType="Web" AND Environment="QA" ]]></Publish>
<Publish Event="Remove" Value="WebQAConfigFeature"><![CDATA[ServerType<>"Web" OR Environment<>"QA"]]></Publish>
<Publish Event="AddLocal" Value="WebProdConfigFeature"><![CDATA[ServerType="Web" AND Environment="Prod" ]]></Publish>
<Publish Event="Remove" Value="WebProdConfigFeature"><![CDATA[ServerType<>"Web" OR Environment<>"Prod"]]></Publish>
<Publish Event="AddLocal" Value="AppDevConfigFeature"><![CDATA[ServerType="App" AND Environment="Dev" ]]></Publish>
<Publish Event="Remove" Value="AppDevConfigFeature"><![CDATA[ServerType<>"App" OR Environment<>"Dev"]]></Publish>
<Publish Event="AddLocal" Value="AppQAConfigFeature"><![CDATA[ServerType="App" AND Environment="QA" ]]></Publish>
<Publish Event="Remove" Value="AppQAConfigFeature"><![CDATA[ServerType<>"App" OR Environment<>"QA"]]></Publish>
<Publish Event="AddLocal" Value="AppProdConfigFeature"><![CDATA[ServerType="App" AND Environment="Prod" ]]></Publish>
<Publish Event="Remove" Value="AppProdConfigFeature"><![CDATA[ServerType<>"App" OR Environment<>"Prod"]]></Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
答案 0 :(得分:2)
我喜欢做的技巧是有2个组件和2个不同的密钥文件
c1 - &gt; f1(web.config.dev) c2 - &gt; f2(web.config.qa) c3 - &gt; f3(web.config.prod)
然后给每个文件提供web.config的复制文件元素和互斥条件
DEPLOYMENTTYPE〜= “DEV” DEPLOYMENTTYPE〜= “QA” DEPLOYMENTTYPE〜= “PROD”
结果是不会再安装这些组件中的一个。你可能会得到一个web.config.dev和一个web.config,它会起作用。
所有这一切都可以使用一个功能完成。
答案 1 :(得分:1)
根据您是要按环境选择文件(无问题),间接用户输入(相关问题)还是直接用户输入(功能选择),有多种方法可供选择。 Christopher Painter的方法适用于前两种方法,但对于特征选择,您可以尝试使用此InstallTalk blog post中描述的技术。
答案 2 :(得分:0)