D'exécution pris en charge v4.0 dans l'app.config après la mise à niveau VS11 Bêta pour VS2012 RC
Après la mise à niveau à partir de VS11 Bêta pour VS2012 RC - j'ai modifié à partir de ciblage .NET 4.0 .NET 4.5. J'ai remarqué dans l'app.config section suivante
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
Qu'est-ce que le ci-dessus?
Quand j'ai essayé de créer un nouveau projet (pas de mise à niveau de l'existant du projet) à partir de VS2012 RC je ne vois pas la section ci-dessus dans l'app.config
OriginalL'auteur friend | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
C'est un effet secondaire de l'éternel .NET versioning bourbier. .NET 4.5 n'est pas un side-by-side de la version de la .NET framework, il remplace complètement une .NET 4.0 installer. Un peu comme 3,0 et 3,5 remplacé un .NET 2.0 installer.
La 3.0 et 3.5 des mises à jour ont été assez doux, le cadre vient d'acquérir un tas de nouvelles assemblées. Le CLR et le noyau de base des assemblages de classe n'a pas changé. Beaucoup.
L'clr.dll fichier inclus avec la version 4.5 du cadre a encore le 4.0.30319 numéro de version. Le même numéro de version de la version 4.0 du CLR. Et n'a pas de difficulté de l'exécution .NET applications qui cible les .NET framework 4.0.
Cette version de cadre a toutefois été fortement modifiée en interne. Il a acquis la langue de projection qui permet d'écrire de Métro les applications qui s'exécutent sur Windows 8 dans un langage managé. De lourds changements incluent le déplacement des classes à partir d'un assemblage à l'autre, permettant de le déployer sur un téléphone ou de l'ardoise à être modeste. L'app.exe.fichier de config ajoutée à votre projet veille à ce que votre utilisateur a que la version requise. Le déploiement de la .fichier de configuration est optionnelle, mais l'utilisateur aura un assez opaque message d'exception quand il ne l'a fait .NET 4.0 est installé. Pas vraiment sûr de ce que cela ressemble. L'installation automatique qui est déclenché quand il n'a pas 4.5 probablement aussi ne fonctionne pas.
Oui, mais c'est beaucoup plus difficile à interpréter. Comme MissingMethodException ou FileNotFoundException, pas un sympathique message du genre "Vous n'avez pas .NET 4.5, auriez-vous comme moi de l'installer pour vous?" Voir stackoverflow.com/a/10033128/17034
J'ai toujours été un peu confus quant à la version de .NET j'en avais besoin pour le rendre disponible aux côtés de mon application. Basé sur votre commentaire ci-dessus, dois-je comprendre que les demandes de ciblage .NET 4.5 uniquement ont à faire .NET 4.5 disponible? En d'autres termes, je n'ai pas à vous inquiéter si .NET 3.5, 3.0, etc. sur le système?
Vous obtiendrez une Erreur de Configuration avec ce message:
The 'targetFramework' attribute in the <compilation> element of the Web.config file is used only to target version 4.0 and later of the .NET Framework (for example, '<compilation targetFramework="4.0">'). The 'targetFramework' attribute currently references a version that is later than the installed version of the .NET Framework. Specify a valid target version of the .NET Framework, or install the required version of the .NET Framework.
OriginalL'auteur Hans Passant
Alors que Hans Passant est correct dans tout ce qu'il dit qu'il manque un point essentiel qui est le rôle de l'en-tête PE dans cette débâcle.
Parce que Dotnet 4.5 est un lieu d'installer sur le haut de Dotnet 4.0, et parce qu'il n'a pas de mise à jour de la Dotnet numéro de version, le résultat est que les binaires construit en utilisant Dotnet 4.5, l'ancien Dotnet 4.0 numéro de version dans leurs binaire de l'en-tête PE (4.0.30319).
Parce que le CLR utilise cette valeur dans l'en-tête PE pour déterminer la version de la Dotnet Framework de charge, et parce que cette valeur ne change pas pour les assemblées construit contre Dotnet 4.5, puis en l'absence de toute information supplémentaire le CLR a aucun moyen de savoir si un montage avec des 4.0.30319 dans l'en-tête PE nécessite reliant à Dotnet 4.0 ou 4.5.
C'est la présence de la supportedRuntime élément dans l'app.config qui fournit cette information supplémentaire de la CLR. Donc, si vous lancez un Dotnet 4.5 application avec le supportedRuntime entrée présents sur un système qui n'a que des Dotnet 4.0 est installé, puis le CLR pop up aider, un message vous informant que vous n'avez pas la version requise de Dotnet installé. Alors que si vous lancez le même Dotnet 4.5 application sans la supportedRuntime entrée sur un système qui n'a que des Dotnet 4.0 est installé, l'application peut commencer à courir, mais alors se bloquer lorsqu'il tente ensuite d'utiliser un Dotnet 4.5 fonctionnalité.
Tandis que des projets construits à l'aide de VS2012 RC et le ciblage Dotnet 4.5 peut-être eu la supportedRuntime entrée manquante, les projets réalisés à l'aide de VS2012 RTM ont l'entrée.
OriginalL'auteur Neutrino