@Jeff - 我一直在处理同样的情况,我们的问题是我们不想每次从一个环境迁移到另一个环境时都重新编译应用程序。这是 Web 转换的一个问题(重新编译代码!)。
我们在 MSI 中打包了基础 web.config 以及转换文件。所以我们打包了 web.config、web.config.DEV、web.config.Prod 等。然后在安装 MSI 之后,我更新了我们古老的部署脚本以调用一个 MSBUILD 脚本,该脚本在 PROD 服务器上进行转换。
我的 powershell 脚本首先会找到所有以当前环境名称(.DEV、.PROD 等)结尾的配置文件。然后它会找到默认文件,如果是 web.config.dev 它将尝试找到 web.config。在此之后,它会将这些参数传递给 MSBUILD 并进行转换。转换后,输出将保存在默认位置,稍后将复制回原始位置。
<UsingTask TaskName="TransformXml"
AssemblyFile="Microsoft.Web.Publishing.Tasks.dll"/>
<PropertyGroup>
<FilePath></FilePath>
<ConfigFileName></ConfigFileName>
<TransformFileName></TransformFileName>
<OutputFileName></OutputFileName>
<StackTraceEnabled>False</StackTraceEnabled>
</PropertyGroup>
<Target Name="Transform">
<Message Text="FilePath = $(FilePath)" />
<Message Text="ConfigFileName = $(ConfigFileName)" />
<Message Text="TransformFileName = $(TransformFileName)" />
<Message Text="OutputFileName = $(OutputFileName)" />
<TransformXml Source="$(FilePath)$(ConfigFileName)"
Transform="$(FilePath)$(TransformFileName)"
Destination="$(OutputFileName)"
StackTrace="$(StackTraceEnabled)" />
</Target>