6

Diese Frage ist eine Art von zwei Teilhaber. In VS2015 hat mein MVC-Projekt mehrere verschiedene Build-Konfigurationen, Test, UAT, Live usw. Mit meiner web.config kann ich einfach mit der rechten Maustaste darauf klicken und Add Config Transform auswählen, um die Transformationsdateien für jede Build-Konfiguration zu erstellen.Umwandlung enthaltene Konfigurationsdateien mit ConfigSource

Wenn ich eine externe Konfigurationsdatei habe, wie Log4Net.config Wie kann ich dies konfigurieren, um abhängige Transformationen wie web.config zu haben? Wird dies manuell durch Bearbeiten der project.csproj Datei getan?

Zweitens, ich habe eine web.config Datei so:

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

Wie kann:

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

    ... 

    <log4net configSource="Log4Net.config" /> 
</configuration> 

Als ich das Projekt zu erstellen, das web.config automatisch durch das folgende Afterbuild Ziel in der project.csproj Datei umgewandelt wird Ich transformiere die enthaltene Log4Net.config Datei mit der gleichen Konfigurationsumwandlung? Mir ist klar, dass ich ein weiteres TransformXml in das AfterBuild-Ziel einfügen könnte, aber ist das die richtige Art, diese Transformation durchzuführen, oder fehlt mir etwas?

+0

Ich habe das gleiche Problem. Hast du es geschafft, es zu lösen? –

+0

@MatiasCicero Ich habe es mit einem zusätzlichen TransformXml im AfterBuild Ziel gelöst. Ich habe es in der Antwort unten umrissen. HTH. – MrDeveloper

Antwort

3

I entschied sich für die Lösung mit einer Base Log4Net.config Datei zu verwenden, eine Log4Net.XXX.config Datei für jede Build-Konfiguration und eine zusätzliche TransformXml Aufgabe im AfterBuild Target:

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

Die project.csproj Datei sieht nun wie folgt aus:

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

Und ein Beispiel Log4Net.Test.config sieht wie folgt aus (ich die Transformation bin mit Verbindungszeichenfolgen und Log4Net der Protokollebene ändern):

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

Dadurch wird die Datei Log4Net.config im Ausgabepfad erfolgreich transformiert. Es verwendet den gleichen Ansatz wie die Umwandlung von web.config Dateien und sollte daher von jedem anderen Entwickler, der das Projekt aufnimmt, leicht verständlich sein.

Während dies funktioniert und schon eine Weile in Produktion ist, suche ich immer noch nach einer Bestätigung, dass dies der richtige Weg ist, Transformationen der enthaltenen Konfigurationsdateien durchzuführen.

Verwandte Themen