在Web部署之外应用Web.Config转换

时间:2011-06-22 08:36:28

标签: asp.net web-config

有没有办法在Web部署之外应用VS 2010 Web.Config转换,比如说在调试期间?能够在不同的环境之间自由切换,这将给我一个很大的推动力。

2 个答案:

答案 0 :(得分:16)

是的,您可以通过在项目文件的TransformXml步骤中调用AfterBuild MSBuild任务来显式执行Web.config转换

以下是一个例子:

<UsingTask
    TaskName="TransformXml"
    AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />

<Target Name="AfterBuild" Condition="exists('Web.$(Configuration).config')">
    <!-- Generates the transformed Web.config in the intermediate directory -->
    <TransformXml
        Source="Web.config"
        Destination="$(IntermediateOutputPath)Web.config"
        Transform="Web.$(Configuration).config" />
    <!-- Overwrites the original Web.config with the transformed configuration file -->
    <Copy
        SourceFiles="$(IntermediateOutputPath)Web.config"
        DestinationFolder="$(ProjectDir)" />        
</Target>

相关资源:

答案 1 :(得分:4)

上面的解决方案对我来说是一个很好的起点,但我最终得到了以下内容,它不需要复制任务,也没有任何文件使用错误的问题。

<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild">
  <TransformXml Condition="exists('$(TempBuildDir)\Web.$(Configuration).config')" Source="$(TempBuildDir)\Web.config" Destination="$(OutputPath)Web.config" Transform="$(TempBuildDir)\Web.$(Configuration).config" />
  <ItemGroup>
    <DeleteAfterBuild Include="$(OutputPath)Web.*.config" />
  </ItemGroup>
  <Delete Files="@(DeleteAfterBuild)">
    <Output TaskParameter="DeletedFiles" PropertyName="deleted" />
  </Delete>
  <Message Text="DELETED FILES: $(deleted)" Importance="high" />
</Target>