2

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

我需要了解如何使用此属性将安装的配置文件复制到网站根目录。

更新:@Rob_Mensching - 您的解决方案有效,但是,在编译时,WiX 迫使我为每个此类组件创建一个 GUID。有什么办法可以避免吗?问题是我将通过在我的 wxs 文件上运行 XSLT 来生成这段代码,该文件是使用热量生成的;并且我无法使用 XSLT 生成 GUID(或者我可以吗?)

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

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

2 回答 2

2

我会使用“组件条件”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

于 2013-03-13T05:30:22.353 回答
2

在 Rob 提供的代码的帮助下,经过更多研究,我发现如果您的安装文件夹不是标准文件夹,如何避免为每个组件提供 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>

在上述文件中,收获工具仅生成前两个片段。接下来的两个片段包含 UI/ComboBox 定义和 WebconfigFiles 的 ComponentGroup,是使用 XML 转换通过从第一个片段中的 File 元素中读取信息来创建的。

于 2013-03-15T03:52:19.123 回答