使用 configSource 转换包含的配置文件
Transforming included configuration files using configSource
这个问题有点像两个问题。在 VS2015 中,我的 MVC 项目有多种不同的构建配置、测试、UAT、Live 等。使用我的 web.config
我可以简单地右键单击它并 select 添加配置转换 为每个构建配置创建转换文件。
如果我有外部配置文件,例如 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 目标中,但这是执行此转换的正确方法,还是我遗漏了什么?
我选择了使用基础 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
文件相同的方法,因此选择该项目的任何其他开发人员应该很容易理解。
虽然这有效并且已经投入生产一段时间了,但我仍在寻找确认这是对包含的配置文件进行转换的正确方法。
这个问题有点像两个问题。在 VS2015 中,我的 MVC 项目有多种不同的构建配置、测试、UAT、Live 等。使用我的 web.config
我可以简单地右键单击它并 select 添加配置转换 为每个构建配置创建转换文件。
如果我有外部配置文件,例如 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 目标中,但这是执行此转换的正确方法,还是我遗漏了什么?
我选择了使用基础 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
文件相同的方法,因此选择该项目的任何其他开发人员应该很容易理解。
虽然这有效并且已经投入生产一段时间了,但我仍在寻找确认这是对包含的配置文件进行转换的正确方法。