使用configSource转换包含的配置文件

本文关键字:配置文件 包含 转换 configSource 使用 | 更新日期: 2023-09-27 18:01:57

这个问题有两个部分。在VS2015中,我的MVC项目有多个不同的构建配置,测试,UAT, Live等。使用我的web.config,我可以简单地右键单击它并选择Add Config Transform为每个构建配置创建转换文件。

如果我有一个外部配置文件,如Log4Net.config,我怎么能配置它有依赖的转换,如web.config ?这是通过编辑project.csproj文件手动完成的吗?

其次,我有一个web.config文件:

<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, Log4net" />
    </configSections>
    ...
    <log4net configSource="Log4Net.config" />
</configuration>

当我构建项目时,web.config自动通过以下AfterBuild目标在project.csproj文件中进行转换:

<Target Name="AfterBuild">
    <TransformXml Source="Web.config"
            Transform="Web.$(Configuration).config"
            Destination="$(OutputPath)'$(AssemblyName).config" />
</Target>

如何使用相同的配置转换转换包含的Log4Net.config文件?我意识到我可以将另一个TransformXml放入AfterBuild目标,但这是进行此转换的正确方式,还是我错过了一些东西?

使用configSource转换包含的配置文件

我选择了使用基本Log4Net.config文件的解决方案,每个构建配置使用一个Log4Net.XXX.config文件,并在AfterBuild目标中使用一个额外的TransformXml任务:

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

project.csproj文件现在看起来像这样:

<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>

和一个示例Log4Net.Test.config看起来像这样(我使用转换来改变连接字符串和Log4Net的日志级别):

<?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>

成功转换输出路径中的Log4Net.config文件。它使用与转换web.config文件相同的方法,因此对于任何其他选择该项目的开发人员来说都应该很容易理解。

虽然这工作,已经在生产一段时间了,我仍然在寻找一些确认,这是做包含的配置文件转换的正确方式