2015-08-19 17 views
5

Ho un'applicazione legacy ASP.NET 4.0 in produzione da un po 'di tempo. Ora aggiungo funzionalità aggiuntive sotto forma di servizio WebAPI REST.Comportamento diverso quando si "esternalizzano" determinate impostazioni di configurazione in file esterni

Aggiungendo i pacchetti WebAPI Nuget anche aggiunto una voce nel mio web.config configurazione della versione del pacchetto runtime NewtonSoft.Json:

Ora, dal momento che ho il mio config "compartementalized" , Volevo inserire questo in un file separato runtime.config e facendolo riferimento al numero principale web.config:

Quando faccio questo, improvvisamente la mia registrazione dei percorsi WebAPI 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" }); 
    ... 
}   

fallisce con un'eccezione:

System.IO.FileLoadException è stata gestita dal codice utente
Messaggio = il file o l'assembly "Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed" oppure non è stato possibile trovare una dipendenza. Source = System.Net.Http.Formatting
FileName = Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed

A me, sembra come se il esteriorizzata runtime.config non essere leggere allo stesso tempo del contenuto dello stesso web.config ...... il che è piuttosto sorprendente per me, mi sarei aspettato che l'intero web.config compresi i file di "sub-config" esternalizzati venisse letto prima del codice in global.asax.cs è in esecuzione ...

Eventuali approfondimenti? Non so nemmeno dove andare a cercare questo livello di informazioni dettagliate su MSDN ....

+1

Sembra che tu non sia il primo - http://world.episerver.com/Blogs/Magnus-Rahl/Dates/2011/6/Todays-gotcha-configSource-on-the-runtime-section-element/ e 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 = CLR. Non sono sicuro se/dove è coperto su MSDN così. –

+0

@AlexeiLevenkov: se lo aggiungi come risposta, lo accetto felicemente :-) –

risposta

1

web.config contiene informazioni di configurazione per molte parti differenti dello stack Web di Windows.

Alcuni di questi dicono a IIS cosa fare, alcuni di essi dicono a .NET cosa fare, alcuni dicono all'applicazione cosa fare. In quanto tali, diversi elementi si comportano in modo molto diverso a seconda della parte della pila che prendono di mira.

<runtime> è piuttosto basso livello, vedi this from MSDN: "impostazioni runtime specificano come il Common Language Runtime gestisce garbage collection e la versione di un assembly da utilizzare in file di configurazione"

configSource="whatever" è effettivamente analizzato da NET sé, see this from MSDN:

In ASP.Le applicazioni NET, in fase di esecuzione, è possibile assegnare alla proprietà ConfigSource il nome di un file di configurazione alternativo.

Quindi, in pratica NET viene eseguito con l'<runtime> impostazioni specificate prima che possa analizzare configSource.

Se giochi con il file web.config in Visual Studio vedrai che intellisense ti dirà quali attributi possono andare dove.