维克斯 - 复制基于环境网站根web.config文件编译(WiX - Copy compiled

2019-08-17 13:16发布

由于我的WiX安装的一部分,我复制所有的转换/编译web.config文件中的安装目录。 编译web.config文件的名称是格式网页。{} ENV的.config。 在我安装UI我创建了一个自定义对话框,在这里我解析ENV和填充组合框,使用户可以选择,这是我们部署到环境中。 此组合框设置属性ENV。

我需要了解我可以使用这个属性来配置安装文件复制到网站根目录。

更新:@Rob_Mensching - 您的解决方案的工作,但是,在编译维克斯迫使我必须为每个这样的组件创建一个GUID。 有没有一种方法,我可以避开它? 事情是我要去通过它获取使用产生的热量我的WXS文件运行XSLT生成这段代码; 有没有办法,我可以生成一个GUID使用XSLT(或可以吗?)

这是我的代码现在的样子:

<ComponentGroup Id='web.config' Directory='CONFIGLOCATION'>
  <Component Id='CopyWebConfigForDev1' Guid='{F207C26A-5D9C-4F19-96A3-D818BB226EFC}' >
    <Condition>ENV="Dev1"</Condition>
    <CopyFile Id='CopyDev1Config' FileId='fil9C4CFE42035F1A63180142352CF441BC' DestinationDirectory='CONFIGLOCATION' DestinationName='web.config'/>
  </Component>
  <Component Id='CopyWebConfigForQA1' Guid='{F207C26A-5D9C-4F19-96A3-D818BB226EFC}' >
    <Condition>ENV="QA1"</Condition>
    <CopyFile Id='CopyQA1Config' FileId='fil12F8B50F03F1BD91A579F6B6CE7195DF' DestinationDirectory='CONFIGLOCATION' DestinationName='web.config'/>
  </Component>
</ComponentGroup>

Answer 1:

我会用一个“零件条件” B这样做。 像下面这样的东西应该很好地工作:

<Fragment>
  <ComponentGroup Id='web.config' Directory='ConfigFolder'>
    <Component>
      <Condition>ENV~="Production"</Condition>
      <File Source='web.Production.config'>
         <CopyFile DestinationDirectory='INSTALLFOLDER' DestinationName='web.config' />
      </File>
    </Component>

    <Component>
      <Condition>ENV~="Test"</Condition>
      <File Source='web.Test.config'>
         <CopyFile DestinationDirectory='INSTALLFOLDER' DestinationName='web.config' />
      </File>
    </Component>
  </ComponentGroup>
</Fragment>

条件语法如下记载: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx



Answer 2:

从罗布提供经过一番更多的研究,我发现了如何避免必须提供的GUID每个组件,如果你的安装文件夹是不是一个标准的文件夹中的代码帮助。 只需指定ComponentGuidGenerationSeed下您要安装该组件的自定义目录。 在这里指定这个属性的目录不必是位置的直接父目录,要安装该组件。 这是我的目录结构现在的样子:

<Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="INETPUBFOLDER" Name="inetpub">
        <Directory Id="WWWROOTFOLDER" Name="wwwroot" ComponentGuidGenerationSeed="PUT-YOUR-GUID">
          <Directory Id="CONFIGLOCATION" Name="$(var.PublishLocation)" />
          <Directory Id="INSTALLLOCATION" Name="$(var.PublishLocation)" >
            <Directory Id="APPFOLDER" Name="bin" />
            <Directory Id="MyProject.Web.Content" />
            <Directory Id="CONFIGSFOLDER" Name="Configs">
              <Directory Id="WEBFOLDER" Name="Web">
                <Directory Id="WEBCONFIGFILES" />
              </Directory>
              <Directory Id="NLOGFOLDER" Name="NLog">
                <Directory Id="NLOGCONFIGFILES" />
              </Directory>
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>

这是我的收获和XML转换WXS文件如何现在看起来:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="WEBCONFIGFILES">
            <Component Id="cmp9CAF0D4A0C62775945002986D1D99926" Guid="PUT-YOUR-GUID">
                <File Id="fil9C4CFE42035F1A63180142352CF441BC" KeyPath="yes" Source="$(var.WebConfigFilesDir)\Web.Dev1.config" />
            </Component>
            <Component Id="cmpB5117E2029EA9A7CC3AFC247EA4483AD" Guid="PUT-YOUR-GUID">
                <File Id="fil0F80FEAFAD0333C3B74BB742C4FE118C" KeyPath="yes" Source="$(var.WebConfigFilesDir)\Web.Prod.config" />
            </Component>
            <Component Id="cmp340743041F12BBE6C7C40D4351407D08" Guid="PUT-YOUR-GUID">
                <File Id="fil12F8B50F03F1BD91A579F6B6CE7195DF" KeyPath="yes" Source="$(var.WebConfigFilesDir)\Web.QA1.config" />
            </Component>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="WebConfigFiles">
            <ComponentRef Id="cmp9CAF0D4A0C62775945002986D1D99926" />
            <ComponentRef Id="cmpB5117E2029EA9A7CC3AFC247EA4483AD" />
            <ComponentRef Id="cmp340743041F12BBE6C7C40D4351407D08" />
        </ComponentGroup>
    </Fragment>
    <Fragment>
        <UI Id="EnvironmentComboBox">
            <ComboBox Property="ENV">
                <ListItem Value="Dev1" Text="Dev1" />
                <ListItem Value="Prod" Text="Prod" />
                <ListItem Value="QA1" Text="QA1" />
            </ComboBox>
        </UI>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="web.config" Directory="CONFIGLOCATION">
            <Component Id="cmpWebConfigForDev1">
                <Condition>ENV="Dev1"</Condition>
                <File Id="CopyDev1Config" Source="$(var.WebConfigFilesDir)\Web.Dev1.config" Name="web.config" />
            </Component>
            <Component Id="cmpWebConfigForProd">
                <Condition>ENV="Prod"</Condition>
                <File Id="CopyProdConfig" Source="$(var.WebConfigFilesDir)\Web.Prod.config" Name="web.config" />
            </Component>
            <Component Id="cmpWebConfigForQA1">
                <Condition>ENV="QA1"</Condition>
                <File Id="CopyQA1Config" Source="$(var.WebConfigFilesDir)\Web.QA1.config" Name="web.config" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

在上述文件中只有前两个片段通过收获工具生成的。 含有WebconfigFiles的UI /组合框定义和ComponentGroup接下来的两个片段的创建使用XML通过读取在第一片断文件要素信息变换。



文章来源: WiX - Copy compiled web.config based on environment to website root
标签: xslt wix guid