web-dev-qa-db-fra.com

Que signifient les paramètres TargetFramework dans web.config dans ASP .NET MVC?

Une de nos applications Web ASP.NET MVC 5 possède les paramètres web.config suivants:

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

Pourquoi deux paramètres targetFramework ne sont-ils pas clairs, et il semble erroné de compiler le ciblage 4.6, puis de l'exécuter sous la version 4.5 ...

Evidemment il me manque quelque chose, mais quoi?

62
g.pickardou

La raison d'être de targetFramework dans web.config est de ne pas tenir compte des problèmes de compatibilité entre les modifications importantes pour chaque version de .NET Framework. La différence entre targetFramework sur compilation et httpRuntime appartient à chaque environnement de développement et de déploiement.

Selon blog MSDN :

<compilation targetFramework="4.6" />

Sélectionne la version des assemblys de référence du .NET Framework à utiliser lors de la compilation. (Remarque: Visual Studio nécessite que cet élément soit présent dans Web.config, même si nous l'inférons automatiquement.)

Cet élément détermine la version d'assembly utilisée lors de la compilation pour créer des dépendances et des assemblys associés à partir du projet en cours.

<httpRuntime targetFramework="4.5" /> signifie que le projet actuel est conçu pour utiliser des assemblys d'exécution .NET 4.5 sans recompiler les assemblys de projet existants dans la machine de déploiement avant de le charger en mémoire.

Par conséquent, nous pouvons conclure que le numéro de version défini sur targetFramework dans httpRuntime élément est conçu pour maintenir la compatibilité entre le projet compilé et les assemblys disponibles dans l'utilisation d'exécution, en fonction de la version des fichiers d'exécution utilisée dans la machine cible.

Ainsi, dans votre cas, ce n’est pas un mauvais comportement, le ou les créateurs du projet souhaitent simplement conserver la compatibilité avec la version la plus basse possible, disponible sur la machine cible présentant des caractéristiques similaires (par exemple, la version 4.5), même le projet compilé avec la version la plus récente de Assemblages .NET. La différence entre les versions 4.5 et 4.6 est relativement petite, ce qui permet de garder la version d'exécution à 4.5 toujours acceptable dans ce contexte.

Références associées:

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

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

46
Tetsuya Yamamoto

Selon ma compréhension, <compilation debug="true" targetFramework="4.6" /> est supprimé par <httpRuntime targetFramework="4.5" /> puisque httpRuntime est traduit en suivant.

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

Le réglage ci-dessus est probablement dû à un malentendu ou à un bug si cela est fait directement par le VS, ce que je ne crois pas vrai.

Pour comprendre comment ce paramètre et tous les autres éléments associés s’entendent, ce blog intitulé Tout au sujet de <httpRuntime targetFramework> écrit par un employé de Microsoft peut vous aider. Mais l'essentiel est;

Le .NET Framework (y compris ASP.NET) s'efforce de maintenir une compatibilité proche de 100% lorsqu'un framework existant est mis à jour sur une machine. Nous essayons de nous assurer autant que possible que si une application était développée et déployée sous .NET Framework 4, elle continuerait à fonctionner sur la version 4.5. Cela implique généralement de conserver les comportements insolites, erronés ou indésirables dans le produit entre les versions, car leur correction peut avoir des conséquences néfastes sur les applications qui utilisaient ces comportements.

8
Mubashar