我有一个解决方案,我有不同的app.configs,给定不同的配置。缺点是为特定配置创建了一个安装程序(使用Wix创建)。我想在安装时执行此操作,以便我可以使用命令行参数启动安装程序以执行xml转换,以便能够在不同的环境中使用相同的安装程序(开发,测试,执行)。
所以,目前我在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.config中的转换。在Wix中有没有办法使用转换实现这一目标?
答案 0 :(得分: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 Installer会发出警告,说明条件必须互斥才能使此技术正常工作。只要MODE
属性一次只能有一个值,这些条件根据定义是互斥的,但警告就在那里。