在发布时将变换应用于配置文件

时间:2014-08-22 09:25:17

标签: msbuild visual-studio-2013 publish msdeploy

我们目前通过MSDeploy发布我们的Web应用程序,以创建.ZIP文件(文件部署)。 我发布时,我想要应用的一些.config文件转换为。所以我创建了appSettings.test.configappSettings.live.config

为方便起见,我已将此添加到我们的网络应用程序的csproj中,该应用程序应用了变换:

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
  <Target Name="ApplyConfigTransforms" BeforeTargets="TransformWebConfigCore">
    <TransformXml Source="appSettings.config" Transform="appSettings.$(Configuration).config" Destination="appSettings.config" />
    <TransformXml Source="connectionStrings.config" Transform="connectionStrings.$(Configuration).config" Destination="connectionStrings.config" />
  </Target>

这会挂钩TransformWebConfigCore目标并完成工作。但是,它将变换应用于我的web文件夹中的appSettings文件(正如目标所期望的那样)。我想要做的是将转换应用于输出pacakge中的文件

我该怎么做?我不知道如何处理发布时创建的临时文件夹..

1 个答案:

答案 0 :(得分:0)

当你在发布后约10分钟找到答案时,难道你不讨厌它。

我攻击了目的地,修复了问题。如果我在一个属性中有这个,那会很好,但我找不到一个使用,所以我做了:

<Target Name="ApplyConfigTransforms" AfterTargets="CopyAllFilesToSingleFolderForMsdeploy">
    <TransformXml Source="appSettings.config" Transform="appSettings.$(Configuration).config" Destination="obj\Test\Package\PackageTmp\appSettings.config" />
    <TransformXml Source="connectionStrings.config" Transform="connectionStrings.$(Configuration).config" Destination="obj\Test\Package\PackageTmp\connectionStrings.config" />
  </Target>

注意,我也更改了目标,以确保它在我的所有文件被复制后发生