作为我的WiX安装的一部分,我将所有已转换/编译的web.config文件复制到安装目录。已编译的web.config的名称格式为web。{ENV} .config。在我的安装UI中,我创建了一个自定义对话框,我在其中解析ENV并填充组合框,以便用户可以选择我们部署到的环境。此组合框设置属性ENV。
我需要了解如何使用此属性将已安装的配置文件复制到网站根目录。
更新:@Rob_Mensching - 您的解决方案可行,但是,在编译时,WiX强制我为每个此类组件创建一个GUID。有没有办法可以避免它?问题是,我将通过在我的wxs文件上运行XSLT来生成这段代码,该文件是使用heat生成的;并且我无法使用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>
答案 0 :(得分: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
答案 1 :(得分: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>
在上面的文件中,只有前两个片段由Harvest工具生成。包含用于WebconfigFiles的UI / ComboBox定义和ComponentGroup的下两个片段是通过读取第一个片段中的File元素中的信息使用XML转换创建的。