2015-11-04 37 views
0

我有一個解決方案,我有不同的app.configs,給出不同的配置。缺點是安裝程序(使用Wix創建)是爲特定配置而創建的。我想在安裝時這樣做,這樣我就可以使用命令行參數啓動安裝程序來執行xml轉換,以便能夠在不同的環境(開發,測試,應用)中使用相同的安裝程序。Wix而不是編譯執行XmlTransform

所以,目前我在的csproj文件轉換:

<Target Name="AfterBuild"> <TransformXml Source="App.config" Transform="App.$(Configuration).config" Destination="$(OutputPath)\$(AssemblyName).exe.config" /> </Target>

我想要做的是:

msiexec /i installer.msi PROD

使得app.PROD改造。配置被執行。 Wix中有沒有一種方法可以實現轉換?

回答

0

不是在安裝時轉換原始文件,而是更容易將所有轉換後的app.config文件包含到MSI包中,然後通過傳遞屬性值在安裝期間選擇適當的文件。

wxs文件的片段可能會是這樣的:

<Component Id="AppConfigDev" Guid="..."> 
    <Condition>MODE = "DEV"</Condition> 
    <File Name="app.config" Id="app.dev.config" KeyPath="yes" Source="$(var.Source)\app.DEV.config" /> 
</Component> 
<Component Id="AppConfigTest" Guid="..."> 
    <Condition>MODE = "TEST"</Condition> 
    <File Name="app.config" Id="app.test.config" KeyPath="yes" Source="$(var.Source)\app.TEST.config" /> 
</Component> 
<Component Id="AppConfigProd" Guid="..."> 
    <Condition>MODE = "PROD"</Condition> 
    <File Name="app.config" Id="app.prod.config" KeyPath="yes" Source="$(var.Source)\app.PROD.config" /> 
</Component> 

其結果是,當你在MODE值通過命令行中傳遞,只是上面的組件之一將被安裝,並它將以目標目錄app.config結束。

請注意,Windows安裝程序會發出警告,說明條件必須相互排斥才能使此技術起作用。只要MODE屬性一次只能有一個值,這些條件根據定義是相互排斥的,但警告就在那裏。