Che cosa fare il TargetFramework impostazioni di media nel web.config in ASP .NET MVC?

Uno dei nostri ASP.NET MVC 5 applicazioni web è il seguente web.impostazioni di configurazione:

<system.web>
  <compilation debug="true" targetFramework="4.6" />
  <httpRuntime targetFramework="4.5" />
  <!--... many other things -->
</system.web>

Non è chiaro perché sono due targetFramework impostazioni, e sembra essere sbagliato a compilare il targeting 4.6 poi cercando di correre sotto i 4,5…

Ovviamente mi manca qualcosa, ma cosa?

 

2 Replies
  1. 46

    Il motivo di targetFramework esistenza in web.config è quello di mantenere i problemi di compatibilità tra modifiche di rilievo per ogni versione .NET Framework. La differenza tra targetFramework su compilation e httpRuntime appartiene a ciascuno di sviluppo e di ambiente di sviluppo.

    Secondo Sul blog di MSDN:

    <compilation targetFramework="4.6" />

    Seleziona la versione della .NET Framework di riferimento per le assemblee sono
    utilizzato quando si esegue la compilazione. (Nota: Visual Studio richiede che
    questo elemento di essere presenti nel Web.config, anche se ci siamo auto-inferire.)

    Questo elemento determina la versione di assembly utilizzati durante la compilazione per creare le dipendenze e le relative assemblee dal progetto corrente.

    <httpRuntime targetFramework="4.5" /> significa che l’attuale progetto è stato progettato per utilizzare .NET 4.5 runtime assemblee senza ricompilare progetto esistente assemblee in distribuzione la macchina prima di caricare in memoria.

    Quindi, possiamo concludere che il numero di versione definita su targetFramework in httpRuntime elemento progettato per mantenere la compatibilità tra il progetto compilato e assembly disponibili in fase di runtime di utilizzo, a seconda della versione di runtime di file che vengono utilizzati in computer di destinazione.

    Quindi, nel tuo caso, questo non è un comportamento sbagliato, creatore del progetto(s) vuole semplicemente mantenere la compatibilità di runtime più basso per la versione di runtime disponibili nel computer di destinazione con caratteristiche simili (cioè la versione 4.5), anche il progetto compilato con la versione più recente di .NET assembly. La differenza tra la versione 4.5 e 4.6 è relativamente piccolo, in modo da mantenere la versione di runtime giù a 4,5 ancora accettabile in questo contesto.

    Riferimenti correlati:

    https://msdn.microsoft.com/en-us/library/dn833123(v=vs. 110).aspx

    https://msdn.microsoft.com/en-us/library/dn833125(v=vs. 110).aspx

    • Forse è a me, io ancora non capisco come può qualcosa “…progettato per l’uso .NET 4.5…” quando abbiamo usato 4.6 quando è selezionato “…una versione del .NET Framework di riferimento per le assemblee sono utilizzati durante l’esecuzione di compilazione…”
    • .NET 4.6 è un sottoinsieme di aggiornamento di .NET 4.5, quindi, anche in base da .NET 4.5 riferimenti agli assembly con alcune piccole differenze (nota che .NET ha la compatibilità di supporto a partire dalla versione 2.0). Infatti, il progetto verrà compilato utilizzando la versione 4.6 riferimenti agli assembly, ma in grado di utilizzare la versione 4.5 di runtime riferimenti nel computer di destinazione quando una versione superiore non sono disponibili.
    • Si fa riferimento “compatibilità”. Tuttavia significa per definizione: e ‘ una cosa che si aspetta di versione inferiore, funzionerà perfettamente nel contesto di una versione superiore. (perché la versione superiore è compatibile” e Non il contrario.
    • Trovato un buon articolo che può spiegare qualcosa in più su msdn. blogs.msdn.microsoft.com/webdev/2012/11/19/…
  2. 8

    Come per la mia comprensione <compilation debug="true" targetFramework="4.6" /> è stato soppresso dalla <httpRuntime targetFramework="4.5" /> dal httpRuntime viene tradotto in seguito

    <compilation targetFramework="4.5" />
    <machineKey compatibilityMode="Framework45" />
    <pages controlRenderingCompatibilityVersion="4.5" />

    Così l’impostazione di cui sopra è probabilmente a causa di qualche incomprensione o un bug se fatto da valori di VS, direttamente, che non credo sia vero.

    Per capire come questa impostazione e tutte le altre cose significa questo blog dal titolo Tutto su <httpRuntime targetFramework> scritto da un dipendente Microsoft potrebbe aiutare. Ma l’essenza di esso è;

    L’ .NET Framework (tra cui ASP.NET) si impegna a mantenere quasi il 100%
    la compatibilità di un quadro esistente viene aggiornata, su di una macchina. Noi
    cercare di garantire per quanto possibile, che se un’applicazione è stata sviluppata
    e schierati contro .NET Framework 4, sarà solo continuare a lavorare
    a 4.5. Questo di solito significa mantenere eccentrico, buggy, o indesiderabili
    comportamenti in cui il prodotto tra le versioni, in quanto la fissazione di loro possono
    influenzare negativamente le applicazioni che si sono basati su tali comportamenti.

    • In un post del blog suggerisce che le impostazioni che sono esplicitamente definite nel web.config non verrà sovrascritto da quello che è implicita la httpRuntime impostazione: “Anche se <httpRuntime targetFramework=”4.5″ /> normalmente comporta <pagine controlRenderingCompatibilityVersion=”4.5″ />, il runtime noterà che avete già impostato in modo esplicito controlRenderingCompatibilityVersion e di rispettare l’impostazione.”
    • Solo per informazione, se la compilazione è impostato mentre httpRuntime non è impostato, il machinekey e pagine di impostazione non avrà 4.5 come valore di default, è necessario impostare manualmente. Questo è molto importante durante il tentativo di condividere cookie tra eredità sito web .net core sito web.
    • che cosa è l’interpretazione che se il targetFramework manca sia per la Compilazione e la HttpRuntime?
    • si prega di confermare con google, ma penso che questi attributi sono utilizzati per limitare l’ambito di applicazione e struttura di una versione specifica tuttavia, se non specificato, si sarebbe probabilmente assumere che non vi è alcuna restrizione e si tenta di eseguire qualunque sia installato l’ultima versione. Questo potrebbe non essere una buona idea, però supponendo che si dispone di alcune applicazioni in esecuzione in versione vecchia ad esempio 4.0, mentre è possibile installare un’altra app che potrebbe essere utilizzando la recente quadro funzionalità ad esempio 4.7.2.

Lascia un commento