Eine unserer ASP.NET MVC 5-Webanwendungen verfügt über die folgenden Einstellungen für web.config:
<system.web>
<compilation debug="true" targetFramework="4.6" />
<httpRuntime targetFramework="4.5" />
<!--... many other things -->
</system.web>
Es ist nicht klar, warum zwei targetFramework-Einstellungen vorhanden sind, und es scheint falsch zu sein, Targeting 4.6 zu kompilieren und dann zu versuchen, unter 4.5 zu laufen ...
Natürlich fehlt mir etwas, aber was?
asp.net
asp.net-mvc
p.pickardou
quelle
quelle
Antworten:
Der Grund für die
targetFramework
Existenz inweb.config
besteht darin, Kompatibilitätsprobleme zwischen Änderungen für jede Version von .NET Framework zu vermeiden. Der Unterschied zwischentargetFramework
oncompilation
undhttpRuntime
gehört zu jeder Entwicklungs- und Bereitstellungsumgebung.Laut MSDN-Blog :
Dieses Element bestimmt die Assemblyversion, die während der Kompilierung zum Erstellen von Abhängigkeiten und zugehörigen Assemblys aus dem aktuellen Projekt verwendet wird.
<httpRuntime targetFramework="4.5" />
bedeutet, dass das aktuelle Projekt zur Verwendung von .NET 4.5-Laufzeitassemblys konzipiert ist, ohne vorhandene Projektassemblys auf dem Bereitstellungscomputer neu zu kompilieren, bevor es in den Speicher geladen wird.Daher können wir daraus schließen, dass die
targetFramework
inhttpRuntime
element definierte Versionsnummer die Kompatibilität zwischen kompiliertem Projekt und verfügbaren Assemblys bei der Laufzeitnutzung gewährleistet, abhängig davon, welche Version von Laufzeitdateien auf dem Zielcomputer verwendet wird.In Ihrem Fall ist dies also kein falsches Verhalten. Die Projektersteller möchten lediglich die Laufzeitkompatibilität mit der niedrigsten auf dem Zielcomputer verfügbaren Laufzeitversion mit ähnlichen Merkmalen (dh Version 4.5) beibehalten, selbst wenn das Projekt mit einer neueren Version von kompiliert wurde .NET-Assemblys. Der Unterschied zwischen Version 4.5 und 4.6 ist relativ gering, sodass die Laufzeitversion auf 4.5 in diesem Kontext immer noch akzeptabel bleibt.
Verwandte Referenzen:
https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/dn833125(v=vs.110).aspx
quelle
Nach meinem Verständnis
<compilation debug="true" targetFramework="4.6" />
wird unterdrückt,<httpRuntime targetFramework="4.5" />
da seitdemhttpRuntime
in folgendes übersetzt wird<compilation targetFramework="4.5" /> <machineKey compatibilityMode="Framework45" /> <pages controlRenderingCompatibilityVersion="4.5" />
Die obige Einstellung ist wahrscheinlich auf ein Missverständnis oder einen Fehler zurückzuführen, wenn sie direkt von VS durchgeführt wird, was ich nicht für wahr halte.
Um zu verstehen, wie diese Einstellung und alle anderen verwandten Dinge dazu führen, dass Ihnen ein Blog mit dem Titel Alles über <httpRuntime targetFramework>, das von einem Microsoft-Mitarbeiter geschrieben wurde, hilft. Aber das Wesentliche ist;
quelle