Wix 如何有条件地安装多个Web地址?
我有一个网站,我正在为我们的一个内部产品安装,我想知道是否有办法设置多个Wix 如何有条件地安装多个Web地址?,wix,wix3.6,Wix,Wix3.6,我有一个网站,我正在为我们的一个内部产品安装,我想知道是否有办法设置多个块,以便有条件地与此网站一起安装 以下是我的基本网站创作: <Component Id="WebsiteComp" Directory="INSTALLDIR" Guid="{702AF20D-F9F3-45A1-B966-890855904591}" KeyPath="yes"> <iis:WebAppPool Id="AppPool" Nam
块,以便有条件地与此网站一起安装
以下是我的基本网站创作:
<Component
Id="WebsiteComp"
Directory="INSTALLDIR"
Guid="{702AF20D-F9F3-45A1-B966-890855904591}"
KeyPath="yes">
<iis:WebAppPool
Id="AppPool"
Name="OurSite"
ManagedPipelineMode="Integrated"
ManagedRuntimeVersion="v4.0"/>
<iis:WebSite
Id="Website"
Description="[WEBSITENAME]"
Directory="INSTALLDIR">
<iis:WebApplication
Id="WebApp"
Name="[WEBSITENAME]"
WebAppPool="AppPool"/>
<!-- if ENV = "DEV" -->
<iis:WebAddress
Id="DevHostHeader"
Header="dev.product.company.com"
Port="80"/>
<!-- if ENV = "QA" -->
<iis:WebAddress
Id="QaHostHeader"
Header="qa.product.company.com"
Port="80"/>
<iis:WebAddress
Id="QaHostHeader"
Header="product.qa1.company.com"
Port="80"/>
<!-- if ENV = "PROD" -->
<iis:WebAddress
Id="ProdHostHeader"
Header="prod.product.com"
Port="80"/>
</iis:WebSite>
</Component>
是条件可以应用到的最具体的元素。但是为了指定条件,我必须为每个环境复制我的所有网站,对吗
有没有办法编写一个版本的
、
和
,然后根据房地产的价值条件插入/选择不同版本和数量的
(如上例中的QA)
我真的不想为特定环境制作多个版本的安装程序
谢谢你,扎卡里你可以用另一种方式解决这个问题 您可以有一个元素,
标题
属性将获取该属性的值。像这样:
<iis:WebAddress Id="HostHeader" Header="[HOSTHEADER]" Port="80"/>
现在,根据条件(生产、开发、QA)将属性设置为所需的值,例如,
QA.product.company.com
for QA。因此,您将有条件地安装所需的主机头,并在源代码中保留一个WebAddress条目。请注意,端口
属性也可以接受属性值。好吧,我知道了如何在没有代码重复的情况下完成它。。。前置处理器来营救
下面是我的“web服务”目录的简化视图:
ProductName.WebService.wxs
ProductName.DEV.WebAddress.wxi
ProductName.PROD.WebAddress.wx
ProductName.QA1.WebAddress.wxi
ProductName.WebService.wxs
如下所示:
<Wix
xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<Fragment>
<iis:WebDirProperties .../>
<?foreach EnvID in DEV;PROD;QA1 ?>
<?define FullEnvID = "ProductName.$(var.EnvID)" ?>
<?if $(var.EnvID) = "DEV" ?>
<?define CompGUID = "{DFEAC94A-590E-4E92-9206-E574ABDDBB29}" ?>
<?elseif $(var.EnvID) = "PROD" ?>
<?define CompGUID = "{FEE4FBB1-9894-48F4-8DDC-9FC83F8AD778}" ?>
<?elseif $(var.EnvID) = "QA1" ?>
<?define CompGUID = "{EED17AF6-BF99-4B34-821D-6A8487292111}" ?>
<?endif ?>
<Component
Id="$(var.FullEnvID).WebSvc"
Directory="INSTALLDIR"
Guid="$(var.CompGUID)"
KeyPath="yes">
<Condition><![CDATA[ENV="$(var.EnvID)"]]></Condition>
<iis:WebAppPool
Id="$(var.FullEnvID).WebAppPool"
Name="[WEBSITENAME]"
ManagedPipelineMode="Integrated"
ManagedRuntimeVersion="v4.0"/>
<iis:WebSite
Id="$(var.FullEnvID).Website"
Description="[WEBSITENAME]"
Directory="INSTALLDIR">
<iis:WebApplication
Id="$(var.FullEnvID).WebApplication"
Name="[WEBSITENAME]"
WebAppPool="$(var.FullEnvID).WebAppPool"/>
<?include $(var.FullEnvID).WebAddress.wxi ?>
</iis:WebSite>
</Component>
<?undef CompGUID ?>
<?undef FullEnvID ?>
<?endforeach ?>
</Fragment>
</Wix>
嗨,燕,谢谢你的回复。我不确定您是否在上面的示例创作中看到了它,但QA环境的一个问题是网站需要响应至少三个不同的主机值:product.QA.company.com、QA.product.company.com和product.subproduct.company.com。所以,我需要能够在QA中有条件地安装3个地址,在DEV中可能安装2个,在PROD中再次安装3个或更多地址。自从发布这个问题以来,我已经尝试了一些,看起来我必须咬紧牙关,重复代码。谢谢你的回答@扎卡里·杨,啊,我现在明白了。这确实是你的问题样本,我只是没有给予足够的重视,对不起。。。嗯,在这种情况下,我认为您必须为每个环境(dev、qa、prod)复制
元素(以及组件),并且每个网站都将包含必要的WebAddress
元素。基本上,这就是你提到你自己的方式——我看不到其他选择。。。
<Include
xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
<iis:WebAddress
Id="dev.product.company.com"
Header="dev.product.company.com"
Port="80"/>
<iis:WebAddress
Id="product.dev.company.com"
Header="product.dev.company.com"
Port="80"/>
</Include>