6

Этот вопрос является разновидностью двух партеров. В VS2015 мой проект MVC имеет несколько различных конфигураций сборки: Test, UAT, Live и т. Д. С моим web.config я могу просто щелкнуть его правой кнопкой мыши и выбрать . Добавить Config Transform, чтобы создать файлы преобразования для каждой конфигурации сборки.Преобразование файлов конфигурации с использованием configSource

Если у меня есть внешний файл конфигурации, такой как 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, но это правильный способ сделать это преобразование, или я чего-то не хватает?

+0

У меня такая же проблема. Удалось ли вам это решить? –

+0

@MatiasCicero Я решил использовать его с помощью дополнительного TransformXml в TargetBuild. Я изложил это в ответе ниже. НТН. – MrDeveloper

ответ

3

Я выбрал решение с использованием файла базы Log4Net.config, A Log4Net.XXX.config файл конфигурации для каждой сборки и дополнительный TransformXml задача в AfterBuild цели:

  • 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, поэтому должен быть легко понятен любому другому разработчику, который забирает проект.

Несмотря на то, что это работает и работает в течение некоторого времени, я все еще ищу подтверждение, что это правильный способ преобразования преобразованных включенных конфигурационных файлов.