2013-03-13 69 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

相關問題