Transforming included configuration files using configSource

前端 未结 1 735
花落未央
花落未央 2021-02-09 04:27

This question is kind of a two parter. In VS2015 my MVC project has multiple different build configurations, Test, UAT, Live etc. With my web.config I can simply ri

相关标签:
1条回答
  • 2021-02-09 05:12

    I opted for the solution of using a base Log4Net.config file, a Log4Net.XXX.config file for each build configuration and an additional TransformXml task in the AfterBuild target :

    • Log4Net.config
    • Log4Net.Debug.config
    • Log4Net.Release.config
    • Log4Net.Test.config
    • Log4Net.UAT.config

    The project.csproj file now looks like this :

    <Content Include="Log4Net.config">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
    <None Include="Log4Net.Debug.config">
      <DependentUpon>Log4Net.config</DependentUpon>
    </None>
    <None Include="Log4Net.Release.config">
      <DependentUpon>Log4Net.config</DependentUpon>
    </None>
    <None Include="Log4Net.Test.config">
      <DependentUpon>Log4Net.config</DependentUpon>
    </None>
    <None Include="Log4Net.UAT.config">
      <DependentUpon>Log4Net.config</DependentUpon>
    </None>
    
    ....
    
    <Target Name="AfterBuild">
       <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="$(OutputPath)\$(AssemblyName).config" />
       <TransformXml Source="Log4Net.config" Transform="Log4Net.$(Configuration).config" Destination="$(OutputPath)\Log4Net.config" />
    </Target>
    

    And an example Log4Net.Test.config looks like this (I am using the transform to change connection strings and Log4Net's logging level) :

    <?xml version="1.0" encoding="utf-8"?>
    
    <log4net  xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
        <appender>
            <connectionString
                value="Data Source=example.com;Initial Catalog=ExampleLogs;User ID=xxx;Password=xxx"
                xdt:Transform="Replace" />
        </appender>
    
        <root>
            <level
                value="DEBUG"
                xdt:Transform="Replace" />
        </root>
    </log4net>
    

    This transforms the Log4Net.config file in the output path successfully. It uses the same approach as transforming web.config files and so should be easily understandable by any other developer that picks up the project.

    Whilst this works and has been in production for a while now, I'm still looking for some confirmation that this is the correct way of doing transforms of included config files.

    0 讨论(0)
提交回复
热议问题