2013-03-13 56 views
2

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

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

更新:@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> 

回答

2

与罗布提供经过一番更多的研究,我发现了如何避免提供代码帮助如果您的安装文件夹不是标准文件夹,请指向每个组件。只需指定您想要将组件安装到的自定义目录的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/ComboBox定义和ComponentGroup的接下来的两个片段是使用XML转换通过从第一个Fragment中的File元素读取信息来创建的。

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

+0

我不知道我是否正确地构建了我的问题,但是您提供的解决方案实际上会将该环境的web.config文件安装到我的安装位置,例如INSTALLLOCATION/configs文件夹。 但我实际上希望我所有的web.configs都去INSTALLLOCATION/configs文件夹位置,然后根据我选择的环境,然后安装程序应该将环境的web.config从INSTALLLOCATION/configs文件夹复制到INSTALLLOCATION。 – vaibinewbee 2013-03-14 15:55:10

+2

好的,根据这些信息更新我的代码。 – 2013-03-14 16:26:21