【问题标题】:Transforming included configuration files using configSource使用 configSource 转换包含的配置文件
【发布时间】:2015-09-29 00:51:06
【问题描述】:

这个问题有点像两个部分。在 VS2015 中,我的 MVC 项目有多种不同的构建配置,Test、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 会自动通过 project.csproj 文件中的以下 AfterBuild 目标进行转换:

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

如何使用相同的配置转换来转换包含的Log4Net.config 文件?我意识到我可以将另一个 TransformXml 放入 AfterBuild 目标,但这是进行此转换的正确方法,还是我遗漏了什么?

【问题讨论】:

  • 我遇到了同样的问题。你解决了吗?
  • @MatiasCicero 我已经在 AfterBuild 目标中使用额外的 TransformXml 解决了它。我在下面的答案中概述了它。 HTH。

标签: c# asp.net-mvc visual-studio web-config web-config-transform


【解决方案1】:

我选择了使用基本Log4Net.config 文件、每个构建配置的Log4Net.XXX.config 文件和AfterBuild 目标中的附加TransformXml 任务的解决方案:

  • Lo​​g4Net.config
  • Lo​​g4Net.Debug.config
  • Lo​​g4Net.Release.config
  • Lo​​g4Net.Test.config
  • Lo​​g4Net.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 文件相同的方法,因此任何其他选择该项目的开发人员都应该很容易理解。

虽然这可行并且已经投入生产一段时间了,但我仍在寻找一些确认这是对包含的配置文件进行转换的正确方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2021-11-04
    • 2015-08-02
    • 2012-03-24
    相关资源
    最近更新 更多