Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wix 如何有条件地安装多个Web地址?_Wix_Wix3.6 - Fatal编程技术网

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>