2015-08-19 16 views
5

Ich habe eine ältere ASP.NET 4.0 Webforms-Anwendung, die seit einiger Zeit in Produktion ist. Ich füge jetzt zusätzliche Funktionalität in Form eines WebAPI-REST-Dienstes hinzu.Verhalten beim "Externalisieren" bestimmter Konfigurationseinstellungen in externe Dateien

die WebAPI NuGet Pakete auch Hinzufügen hinzugefügt einen Eintrag in mein web.config die NewtonSoft.Json Paket Runtime-Version konfigurieren:

Nun, da ich meine config "compartementalized" haben , Ich wollte dies in eine separate runtime.config Datei und verweisen Sie es von der Haupt web.config:

Wenn ich das tue, plötzlich meine Registrierung von WebAPI Routen in global.asax.cs

protected void Application_Start(object sender, EventArgs e) 
{ 
    ... 

    // Route #1 
    GlobalConfiguration.Configuration.Routes.MapHttpRoute("Route1", "test/{list}/{check}", new { Controller = "Devices" }); 
    ... 
}   

schlägt mit einer Ausnahme:

System.IO.FileLoadException durch Benutzercode
Nachricht unhandled war = Die Datei oder Assembly "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" oder eine Abhängigkeit konnte nicht gefunden werden. Source = System.Net.Http.Formatting
filename = Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed

Mir scheint es, als ob der externalisiert runtime.config nicht wird gleichzeitig gelesen als der Inhalt der web.config selbst ...... was für mich eher überraschend ist, hätte ich erwartet, dass die ganze web.config einschließlich aller "externalized" Sub-Config-Dateien vor Code gelesen werden würde in global.asax.cs wird ausgeführt ...

Irgendwelche Einsichten? Ich weiß nicht einmal, wo diese detaillierte Information auf MSDN ....

suchen
+1

Sieht aus, als ob Sie nicht der Erste sind - http://world.episerver.com/Blogs/Magnus-Rahl/Dates/2011/6/Todays-gotcha-configSource-on-the-runtime-section-element/ und https://social.msdn.microsoft.com/Forums/vstudio/en-US/7552df69-d3a0-49e4-b45f-0fa4972fa64c/assembly-version-redirect-doesnt-work-with-a-configsource-in-runtime? Forum = Kl. Nicht sicher, ob/wo es auf MSDN so abgedeckt ist. –

+0

@AlexeiLevenkov: Wenn Sie dies als Antwort hinzufügen, werde ich es glücklich akzeptieren :-) –

Antwort

1

web.config enthält Konfigurationsinformationen für viele verschiedene Teile des Windows-Webstacks.

Einige davon sagt IIS, was zu tun ist, einige davon sagt .NET, was zu tun ist, einige davon sagt Ihrer Anwendung, was zu tun ist. Daher verhalten sich unterschiedliche Elemente sehr unterschiedlich, je nachdem, auf welchen Teil des Stapels sie abzielen.

<runtime> ist ziemlich niedriges Niveau, siehe this from MSDN: "Runtime-Einstellungen festlegen, wie die Common Language Runtime behandelt Garbage Collection und die Version einer Assembly in Konfigurationsdateien verwenden"

configSource="whatever" wird tatsächlich von .NET selbst analysiert, see this from MSDN:

In ASP.NET-Anwendungen können Sie der Runtime-Eigenschaft ConfigSource den Namen einer alternativen Konfigurationsdatei zuweisen.

Also im Grunde ist .NET mit den angegebenen <runtime> Einstellungen laufen, bevor es configSource analysieren wird.

Wenn Sie mit der Datei web.config in Visual Studio herumspielen, werden Sie sehen, dass intellisense Ihnen sagen wird, welche Attribute wohin gehen können.