Question

Après la mise à niveau de VS11 Beta à VS2012 RC - J'ai modifié à partir de cibler .NET 4.0 à .NET 4.5.Je remarque en app.config après la section suivante

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>

Quel est ce qui précède?

Lorsque j'ai essayé de créer un nouveau projet (pas la mise à niveau du projet existant) à partir de VS2012 RC, je ne vois pas la section ci-dessus dans App.Config

Était-ce utile?

La solution

C'est un effet secondaire de l'éternel .NET Versioning Quagmire. .NET 4.5 n'est pas une version latérale de la structure .NET, elle remplace complètement une installation .NET 4.0. Beaucoup comme 3.0 et 3.5 remplacé une installation .NET 2.0.

Les mises à jour 3.0 et 3.5 étaient assez douces, le cadre vient d'acquérir un groupe de nouveaux assemblages. Le CLR et les assemblages de la classe de base de base n'ont pas changé. Beaucoup.

Le fichier CLR.DLL inclus avec la version 4.5 du framework contient toujours le numéro de version 4.0.30319. Le même numéro de version de la version 4.0 du CLR. Et n'a aucune difficulté à exécuter des applications .NET qui ciblent le cadre .NET 4.0.

Cette version-cadre a cependant été fortement modifiée en interne. Il a acquis la projection de langue qui permet d'écrire des applications de métro exécutées sur Windows 8 dans une langue gérée. Les changements lourds incluent les classes de déplacement d'un assemblage à un autre, permettant au déploiement sur un téléphone ou une ardoise d'être modeste. Le fichier app.exe.config ajouté à votre projet garantit que votre utilisateur a cette version requise. Le déploiement du fichier .config est facultatif, mais l'utilisateur verra un message d'exception assez opaque lorsqu'il n'a installé que .NET 4.0. Pas réellement sûr de ce que cela ressemble. L'installation automatique qui est déclenchée lorsqu'il n'a pas de 4,5 ne fonctionne probablement pas.

Autres conseils

tandis que Hans Passant est correct dans tout ce qu'il dit manquer un point clé qui est le rôle de l'en-tête PE dans cette débâcle.

Parce que DotNet 4.5 est une installation continue sur le haut de DotNet 4.0, et car elle ne met pas à jour le numéro de version DotNet, le résultat est que les fichiers binaires construits à l'aide de DotNet 4.5 ont l'ancien numéro de version DotNet 4.0 dans leur binaire En-tête PE (4.0.30319).

Parce que le CLR utilise cette valeur dans l'en-tête PE pour déterminer quelle version du cadre DotNet à charger, et que cette valeur ne change pas pour les assemblages construits contre DotNet 4.5, alors en l'absence de toute information supplémentaire que le CLR a aucun moyen de savoir si un assemblage avec 4.0.30319 dans l'en-tête PE nécessite une liaison à DotNet 4.0 ou 4.5.

C'est la présence de l'élément supportéRuntime dans App.Config qui fournit ces informations supplémentaires au CLR. Donc, si vous lancez une application DotNet 4.5 avec la saisie durableRuntime présent sur un système uniquement DotNet 4.0 installé, le CLR apparaîtra un message utile vous informant que vous n'avez pas la version requise de DotNet installé. Alors que si vous lancez la même application DotNet 4.5 sans l'entrée durableTruntime sur un système uniquement DotNet 4.0 installé, l'application peut alors commencer à exécuter, mais puis planter lorsqu'il tente plus tard d'utiliser un dotNet 4.5 fonctionnalité.

tandis que les projets construits à l'aide de VS2012 RC et de ciblage DotNet 4.5 ont eu besoin de la saisie durableRuntime manquante, les projets construits à l'aide de VS2012 RTM ont l'entrée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top