Problèmes de migration du .NET Framework 4
Cette rubrique décrit les problèmes de migration entre .NET Framework version 3.5 Service Pack 1 et .NET Framework version 4, y compris les correctifs, mises en conformité avec les normes et la sécurité, et modifications basées sur les commentaires des clients. La plupart de ces modifications ne requièrent aucun changement dans la programmation de vos applications. Dans les cas où des changements s'avèrent nécessaires, consultez la colonne Modifications recommandées du tableau.
Cette rubrique décrit des modifications importantes dans les domaines suivants :
ASP.NET et Web
Fondamentaux
Données
Windows Communication Foundation (WCF)
Windows Presentation Foundation (WPF)
XML
Pour une vue d'ensemble globale des problèmes dans cette rubrique, consultez Guide de migration du .NET Framework 4.
Pour les problèmes de migration après Bêta 2, consultez Migration Issues for .NET Framework 4 Applications: Beta 2 to RTM.
Pour plus d'informations sur les nouvelles fonctionnalités, consultez Nouveautés de .NET Framework 4.
ASP.NET et Web
Espaces de noms : System.Web, System.Web.Mobile, System.Web.Security, System.Web.UI.WebControls ; assembly : System.Web (dans System.Web.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Fichiers de définition de navigateur |
Les fichiers de définition de navigateur ont été mis à jour pour inclure des informations sur les navigateurs et les appareils récemment sortis sur le marché et mis à jour. Des navigateurs et appareils anciens (comme Netscape Navigator) ont été supprimés tandis que de nouveaux navigateurs et appareils (comme Google Chrome et Apple iPhone) ont été ajoutés. Si votre application contient des définitions de navigateur personnalisées qui héritent de l'une des définitions de navigateur supprimées, une erreur s'affichera. L'objet HttpBrowserCapabilities (qui est exposé par la propriété Request.Browser de la page) est régi par les fichiers de définition de navigateur. Par conséquent, les informations retournées lors de l'accès à une propriété de cet objet dans ASP.NET 4 peuvent être différentes de celles retournées dans une version antérieure d'ASP.NET. |
Si votre application s'appuie sur les anciens fichiers de définitions de navigateur, vous pouvez les copier à partir du dossier suivant : Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers Copiez les fichiers dans le dossier \CONFIG\Browsers correspondant pour ASP.NET 4. Après avoir copié les fichiers, exécutez l'outil en ligne de commande Aspnet_regbrowsers.exe. Pour plus d'informations, consultez le site Web https://www.asp.net/mobile. |
Applications enfants qui fonctionnent sous des versions mixtes d'ASP.NET |
Les applications ASP.NET 4 configurées comme enfants d'applications qui exécutent des versions antérieures d'ASP.NET risquent de ne pas démarrer à cause d'erreurs de configuration ou de compilation. L'erreur spécifique qui se produit dépend si l'application s'exécute sous IIS 6.0, IIS 7 ou IIS 7.5. |
Vous pouvez apporter des modifications aux fichiers de configuration des applications affectées afin que le système de configuration reconnaisse l'application ASP.NET 4 correctement. Pour plus d'informations sur les modifications que vous devez apporter, consultez la section « ASP.NET 4 Child Applications Fail to Start When Under ASP.NET 2.0 or ASP.NET 3.5 Applications » dans le document ASP.NET 4 Breaking Changes sur le site Web ASP.NET. |
Modifications de ClientID |
Le nouveau paramètre ClientIDMode dans ASP.NET 4 vous permet de spécifier la façon dont ASP.NET génère l'attribut id pour les éléments HTML. Dans les versions antérieures d'ASP.NET, le comportement par défaut était équivalent au paramètre AutoID de ClientIDMode. Le paramètre par défaut est désormais Predictable. Pour plus d'informations, consultez Identification du contrôle serveur Web ASP.NET. |
Si vous utilisez Visual Studio 2010 pour mettre à niveau votre application à partir d'ASP.NET 2.0 ou d'ASP.NET 3.5, l'outil ajoute automatiquement un paramètre au fichier Web.config pour conserver le comportement des versions antérieures du .NET Framework. Toutefois, si vous mettez à niveau une application en modifiant le pool d'applications dans IIS pour cibler .NET Framework 4, ASP.NET utilise le nouveau mode par défaut. Pour désactiver le nouveau mode ID client, ajoutez le paramètre suivant au fichier Web.config : <pages ClientIDMode="AutoID" / > |
Sécurité d'accès du code (CAS, Code Access Security) |
Les fonctionnalités ASP.NET 2.0 ajoutées dans ASP.NET 3.5 utilisent le modèle de sécurité d'accès du code (CAS) .NET Framework 1.1 et .NET Framework 2.0. Toutefois, l'implémentation de la sécurité d'accès du code dans ASP.NET 4 a été considérablement revue. Par conséquent, les applications ASP.NET de confiance partielle qui s'appuient sur du code de confiance exécuté dans le Global Assembly Cache peuvent échouer avec différentes exceptions de sécurité. Les applications de confiance partielle qui s'appuient sur d'importantes modifications apportées à la stratégie CAS de l'ordinateur peuvent également échouer et lever des exceptions de sécurité. |
Vous pouvez rétablir le comportement ASP.NET 1.1 et 2.0 pour des applications ASP.NET 4 de confiance partielle en utilisant le nouvel attribut legacyCasModel dans l'élément de configuration trust, comme indiqué dans l'exemple suivant : <trust level= "Medium" legacyCasModel="true" />
Note de sécurité
Un rétablissement au modèle CAS antérieur peut entraîner des problèmes de sécurité.
Pour plus d'informations sur le nouveau modèle ASP.NET 4 de sécurité d'accès du code, consultez Sécurité d'accès du code dans les applications ASP.NET 4. |
Fichiers de configuration |
Les fichiers de configuration racine (le fichier machine.config et le fichier racine Web.config) pour le .NET Framework et ASP.NET 4 ont été mis à jour pour inclure la plupart des informations de configuration réutilisables qui se trouvaient dans les fichiers d'application Web.config dans ASP.NET 3.5. En raison de la complexité des systèmes de configuration IIS 7 et IIS 7.5 managés, l'exécution d'applications ASP.NET 3.5 sous ASP.NET 4 et sous IIS 7 et IIS 7.5 peut provoquer des erreurs ASP.NET ou des erreurs IIS. |
Mettez à niveau vos applications ASP.NET 3.5 vers ASP.NET 4 à l'aide des outils de mise à niveau de projet dans Visual Studio 2010. Visual Studio 2010 modifie automatiquement le fichier Web.config des applications ASP.NET 3.5 pour qu'il contienne les paramètres appropriés pour ASP.NET 4. Toutefois, vous pouvez exécuter des applications ASP.NET 3.5 à l'aide de .NET Framework 4 sans effectuer de recompilation. Dans ce cas, vous devrez peut-être modifier manuellement le fichier Web.config de l'application avant d'exécuter l'application sous .NET Framework 4 et sous IIS 7 ou IIS 7.5. La modification spécifique à effectuer dépend de la combinaison de logiciels que vous utilisez, notamment les versions de Service Pack (SP). Pour plus d'informations sur les éventuelles combinaisons de logiciels affectées par cette modification et sur la résolution de problèmes à l'aide de combinaisons spécifiques, consultez la section « Configuration Errors Related to New ASP.NET 4 Root Configuration » dans le document ASP.NET 4 Breaking Changes sur le site Web ASP.NET. |
Rendu des contrôles |
Dans les versions antérieures d'ASP.NET, certains contrôles émettaient un balisage que vous ne pouviez pas désactiver. Par défaut, ce type de balisage n'est plus généré dans ASP.NET 4. Les modifications de rendu affectent les contrôles suivants :
Les contrôles qui ne sont pas conçus pour l'entrée d'utilisateur (par exemple, le contrôle Label ) ne restituent plus l'attribut disabled="disabled" si leur propriété Enabled a la valeur false (ou s'ils héritent de ce paramètre d'un contrôle conteneur). |
Si vous utilisez Visual Studio 2010 pour mettre à niveau votre application à partir d'ASP.NET 2.0 ou d'ASP.NET 3.5, l'outil ajoute automatiquement un paramètre au fichier Web.config pour conserver le rendu hérité. Toutefois, si vous mettez à niveau une application en modifiant le pool d'applications dans IIS pour cibler .NET Framework 4, ASP.NET utilise le nouveau mode de rendu par défaut. Pour désactiver le nouveau mode de rendu, ajoutez le paramètre suivant au fichier Web.config : <pages controlRenderingCompatibilityVersion="3.5" /> |
Gestionnaires d'événements dans les documents par défaut |
ASP.NET 4 restitue la valeur d'attribut action de l'élément HTML form sous la forme d'une chaîne vide lorsqu'une demande est effectuée à une URL sans extension à laquelle est mappé un document par défaut. Dans les premières versions d'ASP.NET, une demande à https://contoso.com entraînait une demande à Default.aspx. Dans ce document, la balise form ouvrante était restituée comme dans l'exemple suivant : <form action="Default.aspx" /> Dans ASP.NET 4, une demande à https://contoso.com entraîne également une demande à Default.aspx, mais ASP.NET restitue maintenant la balise form HTML ouvrante comme dans l'exemple suivant : <form action="" /> Lorsque l'attribut action est une chaîne vide, l'objet IIS DefaultDocumentModule crée une demande enfant à Default.aspx. Dans la plupart des conditions, cette demande enfant est transparente pour le code d'application, et la page Default.aspx s'exécute normalement. Toutefois, en raison d'une interaction potentielle entre du code managé et le mode intégré IIS 7 ou IIS 7.5, les pages .aspx managées peuvent cesser de fonctionner correctement pendant la demande enfant. Si les conditions suivantes se produisent, la demande enfant à un document .aspx par défaut provoquera une erreur ou un comportement inattendu :
Étant donné qu'il n'y a pas de corps d'entité, il n'existe aucune variable de formulaire et aucun état d'affichage. Par conséquent, le gestionnaire de page .aspx ne dispose d'aucune information pour déterminer quel événement doit être déclenché (le cas échéant). Par conséquent, aucun des gestionnaires d'événements de publication pour la page .aspx concernée ne s'exécute. |
Pour plus d'informations sur les façons de contourner les problèmes liés à cette modification, consultez la section « Event Handlers Might Not Be Not Raised in a Default Document in IIS 7 or IIS 7.5 Integrated Mode » dans le document ASP.NET 4 Breaking Changes sur le site Web ASP.NET. |
Algorithme de hachage |
ASP.NET utilise des algorithmes de chiffrement et de hachage pour sécuriser des données telles que les cookies d'authentification par formulaire et l'état d'affichage. Par défaut, ASP.NET 4 utilise l'algorithme HMACSHA256 pour les opérations de hachage sur les cookies et l'état d'affichage. Les versions antérieures d'ASP.NET utilisaient l'ancien algorithme HMACSHA1. |
Si vous exécutez des applications qui combinent ASP.NET 2.0 et ASP.NET 4 (dans lesquelles des données telles que les cookies d'authentification par formulaire doivent fonctionner sous différentes versions du .NET Framework), configurez une application Web ASP.NET 4 pour qu'elle utilise l'ancien algorithme HMACSHA1 en ajoutant le paramètre suivant dans le fichier Web.config : <machineKey validation="SHA1" /> |
Hébergement de contrôles dans Internet Explorer |
Vous ne pouvez plus héberger de contrôles Windows Forms dans Internet Explorer, car il existe de meilleures solutions pour l'hébergement de contrôles sur le Web. Par conséquent, les assemblys IEHost.dll et IEExec.exe ont été supprimés du .NET Framework. |
Vous pouvez utiliser les technologies suivantes pour le développement de contrôles personnalisés dans les applications Web :
|
Méthodes HtmlEncode et UrlEncode |
Les méthodes HtmlEncode et UrlEncode des classes HttpServerUtility et HttpUtility ont été mises à jour pour encoder le guillemet simple (') comme suit :
|
Dans votre code, recherchez les emplacements où vous utilisez les méthodes HtmlEncode et UrlEncode, et vérifiez que la modification d'encodage ne provoque pas un changement susceptible d'affecter le comportement de votre application. |
Erreurs HttpException dans les applications ASP.NET 2.0 |
Une fois ASP.NET 4 activé sur IIS 6, les applications ASP.NET 2.0 qui s'exécutent sur IIS 6 (dans Windows Server 2003 ou Windows Server 2003 R2) peuvent générer des erreurs telles que les suivantes : System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. |
|
Types d'appartenance |
Certains types (par exemple, System.Web.Security.MembershipProvider) utilisés dans l'appartenance ASP.NET ont été déplacés de System.Web.dll vers l'assembly System.Web.ApplicationServices.dll. Les types ont été déplacés pour résoudre des dépendances de couches architecturales entre des types dans le client et dans des références .NET Framework étendues. |
Les bibliothèques de classes mises à niveau à partir de versions antérieures d'ASP.NET et qui utilisent des types d'appartenance déplacés risquent de ne pas être compilées correctement lorsqu'elles sont utilisées dans un projet ASP.NET 4. Si c'est le cas, ajoutez une référence dans le projet de bibliothèque de classes à System.Web.ApplicationServices.dll. |
Modifications au contrôle Menu |
Les modifications au contrôle Menu entraînent le comportement suivant :
|
|
Assembly mobile dans le fichier Web.config |
Dans les versions antérieures d'ASP.NET, une référence à l'assembly System.Web.Mobile.dll a été incluse dans le fichier Web.config racine dans la section assemblies sous system.web/compilation. Pour améliorer les performances, la référence à cet assembly a été supprimée.
Remarque
L'assembly System.Web.Mobile.dll et les contrôles mobiles ASP.NET sont inclus dans ASP.NET 4, mais ils sont déconseillés.
|
Si vous souhaitez utiliser des types de cet assembly, ajoutez une référence à l'assembly dans le fichier Web.config racine ou dans un fichier Web.config d'application. |
Mise en cache de sortie |
Dans ASP.NET 1.0, en raison d'un bogue, les pages mises en cache qui spécifiaient Location="ServerAndClient" en tant que paramètre de cache de sortie émettaient un en-tête HTTP Vary:* dans la réponse. Par conséquent, les navigateurs clients ne mettaient jamais en cache la page localement. La méthode HttpCachePolicy.SetOmitVaryStar ajoutée dans ASP.NET 1.1 pouvait être appelée pour supprimer l'en-tête Vary:*. Toutefois, les rapports de bogues indiquent que les développeurs ignorent le comportement SetOmitVaryStar existant. Dans ASP.NET 4, l'en-tête HTTP Vary:* n'est plus émis à partir des réponses qui spécifient la directive suivante : <%@ OutputCache Location="ServerAndClient" %> Par conséquent, la méthode HttpCachePolicy.SetOmitVaryStar n'est plus requise pour supprimer l'en-tête Vary:*. Dans les applications qui spécifient « ServerAndClient » pour l'attribut Location, les pages pourront être mises en cache dans le navigateur sans que vous ayez besoin d'appeler HttpCachePolicy.SetOmitVaryStar. |
Si des pages de l'application doivent émettre Vary:*, appelez la méthode HttpResponse.AppendHeader comme indiqué dans l'exemple suivant : HttpResponse.AppendHeader("Vary","*"); Vous pouvez également modifier l'attribut Location de mise en cache de sortie en lui affectant la valeur "Server". |
Analyse de page |
L'analyseur de page pour les pages Web ASP.NET (fichiers .aspx) et les contrôles utilisateur (fichiers .ascx) est plus strict dans ASP.NET 4 que dans les versions antérieures d'ASP.NET et il signale plus de balisages comme non valides que dans les versions antérieures. |
Examinez les messages d'erreur produits lorsqu'une page s'exécute et corrigez les erreurs qui résultent d'un balisage non valide. |
Types Passport |
La prise en charge de Passport intégrée à ASP.NET 2.0 est obsolète et n'est plus gérée en raison des modifications apportées à Passport (kit de développement logiciel de Live ID). Par conséquent, les types liés à Passport dans System.Web.Security sont désormais marqués avec l'attribut ObsoleteAttribute. |
Modifiez votre code pour qu'il utilise le Kit de développement logiciel Windows Live ID (page éventuellement en anglais) au lieu des types Passport dans l'espace de noms System.Web.Security (par exemple, System.Web.Security.PassportIdentity). |
Informations PathInfo dans la propriété FilePath |
ASP.NET 4 n'inclut plus la valeur PathInfo dans les valeurs de retour des propriétés comme HttpRequest.FilePath, HttpRequest.AppRelativeCurrentExecutionFilePath et HttpRequest.CurrentExecutionFilePath. À la place, les informations PathInfo sont disponibles dans HttpRequest.PathInfo. Par exemple, imaginez le fragment d'URL suivant : /testapp/Action.mvc/SomeAction Dans les versions antérieures d'ASP.NET, les propriétés System.Web.HttpRequest ont les valeurs suivantes :
Dans ASP.NET 4, les propriétés System.Web.HttpRequest ont plutôt les valeurs suivantes :
|
Dans votre code, recherchez les cas où vous utilisez les propriétés de la classe System.Web.HttpRequest pour retourner des informations sur les chemins d'accès ; modifiez le code pour qu'il soit conforme aux modifications concernant le retour des informations sur les chemins d'accès. |
Validation de la demande |
Pour améliorer la validation de la demande, la validation de la demande ASP.NET est appelée plus tôt dans le cycle de vie des demandes. Par conséquent, la validation de la demande s'exécute pour les demandes qui ne concernent pas les fichiers .aspx (par exemple, pour les appels de service Web et les gestionnaires personnalisés). Elle est également active lorsque des modules HTTP personnalisés sont exécutés dans le pipeline de traitement des demandes. En raison de cette modification, les demandes de ressources qui ne concernent pas les fichiers .aspx peuvent générer des erreurs de validation de la demande. Du code personnalisé qui s'exécute dans le pipeline de demande (par exemple, des modules HTTP personnalisés) peut également générer des erreurs similaires. |
Si nécessaire, vous pouvez revenir à l'ancien comportement qui consiste à déclencher une validation des demandes uniquement pour les pages .aspx. Pour ce faire, utilisez le paramètre suivant dans le fichier de configuration Web : <httpRuntime requestValidationMode="2.0" />
Note de sécurité
Si vous rétablissez l'ancien comportement, assurez-vous que tout le code dans les gestionnaires existants, modules et les autres codes personnalisés effectuent des vérifications visant à détecter les entrées HTTP potentiellement dangereuses susceptibles d'être des vecteurs d'attaques XSS.
|
Routage |
Si vous créez un site Web de système de fichiers dans Visual Studio 2010 et que le site Web est situé dans un dossier dont le nom comporte un point (.), les routages d'URL ne fonctionneront pas de manière fiable. Une erreur Http 404 est retournée à partir de certains chemins d'accès virtuel. Cela se produit parce que Visual Studio 2010 lance le serveur Visual Studio Development (Cassini) à l'aide d'un chemin d'accès incorrect pour le répertoire virtuel racine. |
|
Sites SharePoint |
Si vous essayez d'exécuter un site Web ASP.NET 4 déployé comme un enfant d'un site Web SharePoint qui contient un niveau de confiance partielle personnalisé nommé WSS_Minimal, vous obtiendrez l'erreur suivante : Could not find permission set named 'ASP.Net'. |
Actuellement, aucune version de SharePoint n'est compatible avec ASP.NET. Par conséquent, vous ne devez pas essayer d'exécuter un site Web ASP.NET 4 comme un enfant d'un site Web SharePoint. |
Normes XHTML 1.1 |
Pour que les nouveaux sites Web soient conformes à XHTML 1.1, les contrôles ASP.NET dans le .NET Framework 4 généreront un code HTML conforme à XHTML 1.1. Ce rendu est activé à l'aide de l'option suivante dans le fichier Web.config : <system.Web> <pages controlRenderingCompatibilityVersion="4.0"/> </system.Web> Par défaut, cette option est définie sur 4.0. À des fins de compatibilité, le paramètre 3.5 sera activé pour les projets Web mis à niveau à Visual Studio à partir de Visual Studio 2008. |
Aucun |
Retour au début
Fondamentaux
Fonctionnalités générales
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
CardSpace |
Windows CardSpace n'est plus inclus dans le .NET Framework ; il est fourni séparément. |
Téléchargez Windows CardSpace à partir du Centre de téléchargement Microsoft. |
Fichiers de configuration |
Des corrections ont été apportées à la façon dont le .NET Framework accède aux fichiers de configuration de l'application. |
Si votre fichier de configuration d'application est nommé application-name.config, renommez-le application-name.exe.config. Par exemple, renommez MyApp.config en MyApp.exe.config. |
Compilateur de code C# |
Les classes Compiler, CompilerError et ErrorLevel qui étaient dans l'espace de noms Microsoft.CSharp ne sont plus disponibles et leur assembly (cscompmgd.dll) n'est plus inclus dans le .NET Framework. |
Utilisez la classe CodeDomProvider et d'autres classes dans l'espace de noms System.CodeDom.Compiler. Pour plus d'informations, consultez Utilisation du CodeDOM. |
Hébergement (API non managée) |
Pour améliorer les fonctions d'hébergement, certaines API d'activation d'hébergement sont déconseillées. Des fonctionnalités d'exécution côte à côte in-process permettent à une application de charger et de démarrer plusieurs versions du .NET Framework dans le même processus. Par exemple, vous pouvez exécuter des applications qui chargent des compléments (ou des composants) basés sur le .NET Framework 2.0 SP1 et des compléments basés sur le .NET Framework 4 dans le même processus. Les composants plus anciens continuent à utiliser la version du .NET Framework plus ancienne, et les nouveaux composants utilisent la nouvelle version de celui-ci. |
Utilisez les configurations décrites dans Exécution côte à côte in-process. |
Nouveau modèle de sécurité |
La stratégie de sécurité d'accès du code (CAS) a été désactivée et remplacée par un modèle simplifié, comme décrit dans Modifications de sécurité dans le .NET Framework 4. |
Des modifications peuvent être nécessaires si vos applications dépendent de la sécurité d'accès du code. Pour plus d'informations, consultez Compatibilité de la stratégie de sécurité d'accès du code et migration. |
Retour au début
Date et heure
Espace de noms : System ; assembly : mscorlib (dans mscorlib.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Heures d'été et d'hiver |
Pour garantir une cohérence avec l'horloge système, les propriétés d'heure (telles que TimeZoneInfo.Local et DateTime.Now) utilisent maintenant les règles du système d'exploitation au lieu des autres données .NET Framework pour le passage aux heures d'été et d'hiver. |
Aucun |
Chaînes de mise en forme |
Pour prendre en charge la mise en forme dépendante de la culture, la structure TimeSpan inclut de nouvelles surcharges des méthodes ToString, Parse et TryParse, en plus des nouvelles méthodes ParseExact et TryParseExact. |
Aucun |
Retour au début
Globalisation
Pour une liste des nouvelles cultures neutres et spécifiques, consultez Nouveautés en matière de globalisation et de localisation.
Espace de noms : System.Globalization ; assembly : mscorlib (dans mscorlib.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Noms de cultures |
Les modifications de noms suivantes affectent les cultures allemande, maldivienne et africaine :
|
Notez les changements dans les noms de cultures. |
Paramètre LCID |
Pour garantir une cohérence avec le comportement attendu dans les paramètres de serveur Automation, le CLR ne passe plus la culture actuelle pour le paramètre LCID aux applications COM non managées. À la place, il passe 1033 (en-us) pour la culture. |
Aucune modification nécessaire sauf pour les applications natives qui requièrent une culture spécifiée. |
Types de cultures obsolètes |
Les types de cultures FrameworkCultures et WindowsOnlyCultures sont désormais obsolètes. Pour des raisons de compatibilité descendante, FrameworkCultures retourne maintenant les cultures neutres et spécifiques qui étaient incluses dans le .NET Framework précédent, et WindowsOnlyCultures retourne désormais une liste vide. |
Utilisez d'autres valeurs de l'énumération CultureTypes. |
Récupération de la culture |
Depuis Windows 7, .NET Framework 4 recupère les informations de culture à partir du système d'exploitation au lieu de stocker les données lui-même. De plus, le .NET Framework se synchronise avec Windows pour le tri et la casse des données. |
Aucun |
Normes Unicode 5.1 |
Le .NET Framework prend désormais en charge tous les caractères Unicode 5.1 (et environ 1400 caractères supplémentaires). Ces nouveaux caractères incluent des symboles, des flèches, des signes diacritiques, des signes de ponctuation, des symboles mathématiques, des idéogrammes et des traits CJC, des chiffres supplémentaires pour le Malayâlam et le Télugu et différents caractères birmans, latins, arabes, grecs, mongols et cyrilliques. Les nouvelles écritures suivantes sont prises en charge avec Unicode 5.1 : sundanais, lepcha, ol tchiki, vaï, saurachtra, kayah li, redjang, gurmukhi, oriya, tamoul, télugu, malayâlam et cham. |
Aucun |
Retour au début
Exceptions
Espaces de noms : System, System.Runtime.ExceptionServices ; assembly : mscorlib (dans mscorlib.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Exceptions pour un état de processus endommagé |
Le CLR n'envoie plus d'exception pour un état de processus endommagé aux gestionnaires d'exceptions en code managé. |
Ces exceptions indiquent que l'état d'un processus a été endommagé. Nous vous déconseillons d'exécuter votre application dans cet état. Pour plus d'informations, consultez HandleProcessCorruptedStateExceptionsAttribute et l'entrée Handling Corrupted State Exceptions dans le blog Les coulisses du CLR. |
Exceptions du moteur d'exécution |
ExecutionEngineException est désormais obsolète, car une exception saisissable permettra à un processus instable de continuer à fonctionner. Cette modification améliore la prévisibilité et la fiabilité dans le runtime. |
Utilisez un InvalidOperationException pour signaler la condition. |
Retour au début
Réflexion
Espace de noms : System.Reflection ; assembly : mscorlib (dans mscorlib.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Algorithmes de hachage d'assembly |
La propriété AssemblyName.HashAlgorithm retourne désormais AssemblyHashAlgorithm.None, car le runtime ne reconnaît pas l'algorithme de hachage de l'assembly référencé lorsque l'assembly n'est pas chargé. (Cela fait référence à l'utilisation de la propriété sur un assembly référencé tel que celui retourné par la méthode Assembly.GetReferencedAssemblies.) |
Aucun |
Chargement des assemblys |
Pour empêcher le chargement redondant des assemblys et enregistrer l'espace d'adressage virtuel, le CLR charge désormais les assemblys à l'aide de la fonction Win32 MapViewOfFile uniquement. De même, il n'appelle plus la fonction LoadLibrary. Cette modification affecte les applications de diagnostic des façons suivantes :
|
Aucun |
Type déclarant |
La propriété Type.DeclaringType retourne désormais la valeur Null correctement lorsque le type n'a pas de type déclarant. |
Aucun |
Délégués |
Un délégué lève maintenant un ArgumentNullException au lieu d'un NullReferenceException lorsqu'une valeur Null est passée au constructeur du délégué. |
Vérifiez que toutes les gestions d'exceptions interceptent ArgumentNullException. |
Modification de l'emplacement du Global Assembly Cache |
Pour les assemblys .NET Framework 4, le Global Assembly Cache a été déplacé du répertoire Windows (% WINDIR%) vers le sous-répertoire Microsoft.Net (%WINDIR%\Microsoft.Net). Les assemblys des versions antérieures restent dans l'ancien répertoire. L'énumération ASM_CACHE_FLAGS non managée contient le nouvel indicateur ASM_CACHE_ROOT_EX. Cet indicateur obtient l'emplacement du cache pour les assemblys .NET Framework 4, qui peut être obtenu par la fonction GetCachePath. |
Aucune, à condition que les applications n'utilisent pas de chemins d'accès explicites vers les assemblys, ce qui n'est pas recommandé. |
Outil Global Assembly Cache |
Le Gacutil.exe (outil Global Assembly Cache) ne prend plus en charge la visionneuse du plug-in du shell. |
Aucun |
Interopérabilité
Espace de noms : System.Runtime.InteropServices ; assembly : mscorlib (dans mscorlib.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Longueur de la mémoire tampon (API non managée) |
Pour économiser de la mémoire, la fonctionnalité pour le paramètre pBufferLengthOffset de la méthode ICorProfilerInfo2::GetStringLayout a été modifiée pour correspondre au paramètre pStringLengthOffset. Les deux paramètres pointent désormais sur l'emplacement d'offset de la longueur de la chaîne. La longueur de la mémoire tampon a été supprimée de la représentation de la classe de chaîne. |
Supprimez toute dépendance sur la longueur de la mémoire tampon. |
Débogage juste-à-temps |
Afin de simplifier l'inscription pour le débogage juste-à-temps (JIT), le débogueur .NET Framework utilise désormais uniquement la clé de Registre AeDebug, qui contrôle le comportement du débogage JIT pour le code natif. Cette modification entraîne le résultat suivant :
|
Ajustez les opérations de débogage selon les besoins. |
Appel de code non managé |
Pour améliorer les performances dans l'interopérabilité avec du code non managé, les conventions d'appel incorrectes dans un appel de code non managé provoquent désormais un échec de l'application. Dans les versions antérieures, la couche de marshaling résolvait ces erreurs en haut de la pile. |
Le débogage de vos applications dans Microsoft Visual Studio 2010 vous signalera ces erreurs pour que vous puissiez les corriger. Si vous avez des binaires qui ne peuvent pas être mises à jour, vous pouvez inclure l'élément <NetFx40_PInvokeStackResilience> dans le fichier de configuration de votre application pour permettre la résolution des erreurs d'appel en haut de la pile, comme dans les versions antérieures. Toutefois, cette opération peut affecter les performances de votre application. |
Interfaces supprimées (API non managée) |
Pour simplifier la tâche des développeurs, les interfaces suivantes ont été supprimées, car elles ne fournissaient aucun scénario d'exécution utile et le CLR ne fournissait ou n'acceptait aucune implémentation :
|
Aucun |
Retour au début
Données
Cette section décrit des problèmes de migration pour l'utilisation des groupes de données et des clients SQL, Entity Framework, LINQ to SQL et WCF Data Servers (anciennement appelé ADO.NET Data Services).
DataSet et client SQL
Le tableau suivant décrit les améliorations apportées aux fonctionnalités qui présentaient précédemment des limitations ou d'autres problèmes.
Espaces de noms : System.Data, System.Data.Objects.DataClasses, System.Data.SqlClient ; assemblys : System.Data (dans System.Data.dll), System.Data.Entity (dans System.Data.Entity.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Scénarios de gestion des droits numériques (POCO) |
L'interface System.Data.Objects.DataClasses.IRelatedEnd a de nouvelles méthodes qui facilitent son utilisation dans des scénarios POCO (Plain Old CLR Object). Ces nouvelles méthodes utilisent un Object au lieu d'une entité IEntityWithRelationships comme paramètre. |
Modification de lignes |
La méthode IndexOf, telle qu'elle est implémentée par la classe DataView, retourne désormais correctement la valeur d'une ligne modifiée, au lieu de retourner -1. |
Événements |
L'événement DataRowView.PropertyChanged est maintenant déclenché lorsqu'une ligne est dans un état modifié et que la méthode RejectChanges est appelée. Cette modification facilite la création des contrôles d'interface utilisateur qui exposent le contenu d'un objet DataSet. |
Exceptions |
La méthode Prepare lève maintenant une InvalidOperationException lorsqu'une connexion n'est pas définie ni ouverte, au lieu d'une NullReferenceException. |
Mappage des vues |
Les erreurs de mappage de l'affichage des requêtes sont désormais interceptées au moment du design au lieu de lever un NullReferenceException au moment de l'exécution. La validation de mappage intercepte désormais l'erreur où deux ensembles d'associations dans Conceptual Schema (CSDL) sont mappés à la même colonne. |
Transactions |
Si une application essaie d'exécuter une instruction sur une connexion une fois qu'une transaction a été effectuée (voire interrompue ou restaurée), un InvalidOperationException est désormais levé. Les versions antérieures ne levaient pas d'exceptions et vous permettaient d'exécuter d'autres commandes même si une transaction était annulée. |
Retour au début
Entity Framework
Le tableau suivant décrit les améliorations apportées aux fonctionnalités qui présentaient précédemment des limitations ou d'autres problèmes.
Espaces de noms : System.Data, System.Data.Objects, System.Data.Objects.DataClasses ; assembly : System.Data.Entity (dans System.Data.Entity.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Objets d'entité |
Il existe désormais une parité entre la méthode ObjectContext.Detach et l'état de l'objet d'entité lorsque la méthode ObjectContext.SaveChanges est appelée. Cette cohérence améliorée empêche la levée d'exceptions inattendues. |
Entity SQL |
Les règles ont été améliorées pour les résolutions d'identificateurs dans Entity SQL. L'analyseur Entity SQL a amélioré la logique de résolution des identificateurs multiparties. |
Annotations structurelles |
L'Entity Framework reconnaît désormais les annotations structurelles. |
Requêtes |
Les améliorations suivantes ont été effectuées dans les requêtes :
|
Retour au début
LINQ to SQL
Le tableau suivant décrit les améliorations apportées aux fonctionnalités qui présentaient précédemment des limitations ou d'autres problèmes.
Espace de noms : System.Data.Linq ; assembly : System.Data.Linq (dans System.Data.Linq.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Événements |
Une collection System.Data.Linq.EntitySet<TEntity> déclenche désormais l'événement ListChanged pour des opérations d'ajout et de suppression si le EntitySet<TEntity> est déchargé, en plus de déclencher l'événement lorsque la collection est chargée. |
Requêtes |
Skip(0) n'est plus ignoré dans les requêtes LINQ to SQL. Par conséquent, les requêtes qui ont cette méthode peuvent se comporter différemment. Par exemple, dans certains cas, une clause OrderBy est obligatoire avec Skip(0) et la requête lèvera désormais une exception NotSupportedException si la clause OrderBy n'a pas été incluse. |
Retour au début
services de données WCF
Le tableau suivant décrit les améliorations apportées aux fonctionnalités qui présentaient précédemment des limitations ou d'autres problèmes.
Espaces de noms : System.Data.Services, System.Data.Services.Client, System.Data.Services.Common, System.Data.Services.Providers ; assemblys : System.Data.Services (dans System.Data.Services.dll), System.Data.Services.Client (dans System.Data.Services.Client.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Contenu binaire par lot |
Les services de données WCF prennent désormais en charge le contenu binaire par lot dans les demandes et les réponses. |
Intercepteurs de modification |
Les intercepteurs de modification sont désormais exécutés pour une demande de suppression. Un intercepteur de modification est une méthode qui s'exécute chaque fois que le serveur reçoit une demande de modification pour une entité dans le jeu d'entités. Il s'exécute avant l'exécution de la requête entrante. L'intercepteur de modification fournit un accès à l'entité modifiée et à l'opération exécutée. |
Exceptions |
Les conditions suivantes lèvent désormais des exceptions plus utiles au lieu d'une NullReferenceException :
Dans vos applications, vous devez modifier la gestion des exceptions pour intercepter les nouvelles exceptions. |
Headers |
Les améliorations suivantes ont été effectuées dans les en-têtes :
|
Lecteur JSON |
Le lecteur JSON (JavaScript Object Notation) retourne désormais une erreur correctement lorsqu'il lit une seule barre oblique inverse (« \ ») en tant que caractère d'échappement, lorsqu'il traite des charges JSON envoyées à un service de données WCF. |
Fusions |
Les améliorations suivantes ont été effectuées dans l'énumération MergeOption :
|
Demandes |
La méthode DataService<T>.OnStartProcessingRequest est maintenant appelée avant qu'une requête aux services de données ne soit traitée. La requête peut ainsi fonctionner correctement pour les services ServiceOperation. |
Flux |
Les services de données WCF ne ferment plus le flux sous-jacent pour les opérations en lecture et en écriture. |
URI |
L'échappement des URI par le client des services de données WCF a été corrigé. |
Windows Communication Foundation (WCF)
Le tableau suivant décrit les améliorations apportées aux fonctionnalités qui présentaient précédemment des limitations ou d'autres problèmes.
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Fichiers de configuration |
Pour permettre l'héritage des comportements via la hiérarchie de fichiers de configuration, WCF prend désormais en charge la fusion dans les fichiers de configuration. Le modèle d'héritage de configuration est maintenant développé pour permettre aux utilisateurs de définir des comportements qui s'appliqueront à tous les services exécutés sur l'ordinateur. Vous pouvez rencontrer des changements de comportement si des comportements ont le même nom à différents niveaux de la hiérarchie. |
Hébergement de services |
Vous ne pouvez plus spécifier l'élément de configuration <serviceHostingEnvironment> au niveau du service en ajoutant l'attribut allowDefinition="MachineToApplication" à la définition de l'élément. La spécification de l'élément <serviceHostingEnvironment> au niveau du service n'est pas correcte d'un point de vue technique et engendre un comportement incohérent. |
Retour au début
Windows Presentation Foundation (WPF)
Applications
Espaces de noms : System.Windows, System.Windows.Controls ; assembly : PresentationFramework (dans PresentationFramework.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Gestion des exceptions |
Pour détecter les erreurs plus tôt, WPF lève un TargetInvocationException et définit la propriété InnerException sur des exceptions critiques, telles que NullReferenceException, OutOfMemoryException, StackOverflowException et SecurityException, au lieu d'intercepter l'exception d'origine. |
Aucun |
Ressources liées |
Pour faciliter les liaisons, les fichiers de ressources (tels que des images), non situés dans la structure de dossiers du projet utilisent le chemin d'accès complet du fichier de ressources comme ID lorsque l'application est générée, au lieu d'utiliser simplement le nom de fichier de la ressource. L'application sera en mesure de trouver les fichiers au moment de l'exécution. |
Aucun |
Applications de confiance partielle |
Pour des raisons de sécurité, les applications Windows qui fonctionnent en mode de confiance partielle et qui contiennent un contrôle WebBrowser ou un contrôle Frame contenant HTML lèveront un SecurityException lorsque le contrôle sera créé. Les applications de navigateur lèveront une exception et afficheront un message si toutes les conditions suivantes sont respectées :
Notez que les applications qui s'exécutent à partir de sites approuvés ou de la zone intranet ne seront pas affectées. |
Dans vos applications de navigateur, vous pouvez atténuer cette modification en effectuant l'une des opérations suivantes :
|
Dictionnaires de ressources |
Pour améliorer les dictionnaires de ressources au niveau du thème et les empêcher de changer, des ressources figeables définies dans un dictionnaire de ressources et fusionnées dans un dictionnaire au niveau du thème restent désormais marquées comme figées et sont immuables. Il s'agit du comportement attendu pour les ressources Freezable. |
Les applications qui modifient une ressource définie dans un dictionnaire fusionné au niveau du thème doivent cloner la ressource et modifier la copie clonée. La ressource peut aussi être marquée comme x:Shared="false" afin que le ResourceDictionary crée une copie chaque fois que la ressource est interrogée. |
Windows 7 |
Pour permettre un fonctionnement optimal des applications WPF sur Windows 7, les améliorations suivantes ont été effectuées pour corriger le comportement d'une fenêtre :
|
Aucun |
Style et transparence des fenêtres |
Un InvalidOperationException est levé si vous essayez d'affecter à WindowStyle une valeur différente de None lorsque AllowsTransparency est true et que WindowState est Minimized. |
Si vous devez modifier le WindowStyle lorsque AllowsTransparency est true, vous pouvez appeler la fonction Win32 SetWindowLongPtr. |
Visionneuse XPS |
WPF n'inclut pas Microsoft XML Paper Specification Essentials Pack (XPSEP). XPSEP est inclus avec Windows 7 et Windows Vista. Sur un ordinateur qui exécute Windows XP sans que .NET Framework 3.5 SP1 ne soit installé, l'impression à l'aide d'une API WPF différente de celles dans PrintDialog utilisera le WINSPOOL. Certaines fonctions d'imprimante ne seront pas signalées et certains paramètres de l'imprimante ne seront pas appliqués pendant l'impression. |
Si nécessaire, installez le Microsoft XML Paper Specification Essentials Pack. |
Retour au début
Contrôles
Espaces de noms : System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input ; assemblys : PresentationFramework (dans PresentationFramework.dll), PresentationCore (dans PresentationCore.dll), WindowsBase (dans WindowsBase.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Boîtes de dialogue |
Pour améliorer la fiabilité, la méthode CommonDialog.ShowDialog est appelée sur le même thread qui a créé le contrôle Microsoft.Win32.FileDialog. |
Veillez à créer un contrôle FileDialog et à appeler la méthode ShowDialog sur le même thread. |
Fenêtres flottantes |
Pour corriger la logique de restauration du focus qui réactive sans cesse une fenêtre flottante (en l'affichant comme une boîte de dialogue modale), la restauration du focus est désormais bloquée si le candidat n'est pas un enfant de la fenêtre. |
Aucun |
Éléments dans les collections |
Lorsqu'un élément est déplacé ou ajouté à une collection sous-jacente, il s'affiche dans le CollectionView au même emplacement relatif si le CollectionView n'est pas trié. Cela garantit une cohérence entre la position de l'élément dans la collection et le CollectionView associé. |
Utilisez la méthode ItemContainerGenerator.ContainerFromItem ou CollectionView.IndexOf pour trouver l'emplacement d'un élément dans un CollectionView au lieu de vous reposer sur l'emplacement fixe d'un élément. |
Dispositions |
Pour empêcher des redispositions inutiles, la modification de la Page.ShowsNavigationUI n'invalide plus la disposition et n'engendre plus une autre passe de disposition. |
Si vous pensez que ShowsNavigationUI provoquera une autre passe de disposition, appelez UIElement.InvalidateVisual après avoir défini la propriété. |
Menus |
Pour activer du texte ClearType dans les menus contextuels, des modifications ont été effectuées dans la classe ControlTemplate, le contrôle MenuItem et d'autres contrôles. |
Les applications ne doivent pas s'appuyer sur la structure visuelle des modèles de contrôle. Seules les parties nommées d'un ControlTemplate font partie du contrat public. Si une application doit rechercher un certain objet dans un ControlTemplate, recherchez un type spécifique dans l'arborescence d'éléments visuels au lieu de vous reposer sur un emplacement fixe d'un objet dans l'arborescence. |
Navigation |
Si un Frame navigue directement jusqu'à un emplacement, la propriété IsNavigationInitiator a la valeur true après la navigation initiale. Cette modification empêche des événements supplémentaires d'être déclenchés au cours des scénarios au démarrage. |
Aucun |
Menus contextuels |
Le délégué CustomPopupPlacementCallback peut désormais être appelé plusieurs fois pendant une passe de disposition au lieu d'une seule fois. |
Si votre délégué CustomPopupPlacementCallback calcule la position d'un Popup en fonction de sa position précédente, recalculez la position uniquement si les valeurs des paramètres popupSize, targetSize ou offset sont modifiées. |
Valeurs de la propriété |
La méthode DependencyObject.SetCurrentValue vous permet désormais d'affecter à une propriété une valeur effective même si elle continue de respecter les liaisons, les styles ou les déclencheurs qui affectent la propriété. |
Les auteurs de contrôles doivent utiliser SetCurrentValue chaque fois que la valeur de propriété se transforme sous l'effet d'une quelque autre action, notamment une manipulation d'utilisateur. |
Zones de texte |
Pour des raisons de sécurité, les méthodes TextBoxBase.Copy et TextBoxBase.Cut échouent silencieusement lorsqu'elles sont appelées en mode de confiance partielle. De plus, l'exécution par programmation de la propriété ApplicationCommands.Copy ou ApplicationCommands.Cut sur un contrôle qui hérite de TextBoxBase sera bloquée en mode de confiance partielle. Toutefois, les commandes de copier et couper initiées par l'utilisateur, telles que le clic sur un bouton dont la propriété ButtonBase.Command est liée à l'une de ces commandes, fonctionneront. Les actions copier et couper standard effectuées via des raccourcis clavier et le menu contextuel continueront de fonctionner comme avant en mode de confiance partielle. |
Liez la commande ApplicationCommands.Copy ou ApplicationCommands.Cut à une action initiée par l'utilisateur (par exemple, lorsqu'il clique sur un bouton). |
Retour au début
Graphiques
Espaces de noms : System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Media.Effects ; assemblys : PresentationFramework (dans PresentationFramework.dll), PresentationCore (dans PresentationCore.dll), WindowsBase (dans WindowsBase.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Effets bitmap |
Pour améliorer les performances, la classe BitmapEffect et les classes qui héritent de la classe BitmapEffect, même si elles sont encore présentes, sont désactivées. L'effet sera restitué à l'aide du pipeline de rendu accéléré par le matériel si les conditions suivantes sont vérifiées :
Si ces conditions ne sont pas réunies, un objet BitmapEffect n'aura aucun effet. De même, Visual Studio 2010 produira un avertissement du compilateur lorsqu'il rencontrera l'objet BitmapEffect ou une sous-classe. La méthode PushEffect est marquée comme obsolète. |
Cessez d'utiliser le BitmapEffect hérité et les classes dérivées et, à la place, utilisez les nouvelles classes dérivées de Effect : BlurEffect, DropShadowEffect et ShaderEffect. Vous pouvez également créer vos propres effets en héritant de la classe ShaderEffect. |
Trames bitmap |
Les objets clonés BitmapFrame reçoivent désormais les événements DownloadProgress, DownloadCompleted et DownloadFailed. Les images téléchargées à partir d'Internet et appliquées au contrôle Image via un Style peuvent ainsi fonctionner correctement. Vous constaterez une modification dans le comportement seulement si toutes les instructions suivantes ont la valeur true :
|
Vérifiez l'émetteur dans le gestionnaire d'événements et intervenez uniquement si l'émetteur est le BitmapFrame d'origine. |
Décodage d'images |
Pour empêcher un problème de gestion de IOException lorsque des images ne peuvent pas être décodées, la classe BitmapSource déclenchera l'événement DecodeFailed lorsqu'elle ne décodera pas une image. |
Supprimez les gestions d'exceptions pour IOException et utilisez l'événement DecodeFailed pour vérifier l'échec du décodage. |
Retour au début
Entrée
Espaces de noms : System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input ; assemblys : PresentationFramework (dans PresentationFramework.dll), PresentationCore (dans PresentationCore.dll), WindowsBase (dans WindowsBase.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Liaison d'instances de commande |
Pour fournir un mécanisme permettant de lier des instances de commande basées sur le modèle Vue à des mouvements d'entrée basés sur la Vue, la classe InputBinding hérite désormais de Freezable au lieu de DependencyObject. Les propriétés suivantes sont maintenant des propriétés de dépendance : Cette modification entraîne le résultat suivant :
|
Créez des instances distinctes d'une classe InputBinding sur les threads séparés si les liaisons doivent être mutables, sinon figez-les. Ne mutez pas un InputBinding statique de niveau classe après son inscription. |
Applications de navigateur |
Les applications de navigateur WPF (.XBAP) traitent maintenant de la même manière les événements de touche que les applications WPF autonomes afin que les objets reçoivent des événements routés de touche dans l'ordre correct. |
Aucun |
Combinaisons de touches mortes |
WPF obscurcit les touches mortes, qui ne produisent aucun caractère visible mais indiquent à la place que la touche sera combinée avec la touche suivante afin de produire un caractère. Les événements de saisie, tels que l'événement KeyDown, indiquent lorsqu'une touche est une touche morte en affectant à la propriété Key la valeur DeadCharProcessed. Ce comportement est connu car les applications ne projettent généralement pas de répondre à l'entrée au clavier qui crée un caractère combiné. |
Les applications qui s'attendent à lire des touches faisant partie des caractères combinés peuvent obtenir la touche maintenant obscurcie à l'aide de la propriété DeadCharProcessedKey. |
Gestionnaire du focus |
Lorsque la méthode FocusManager.GetFocusedElement est passée à un élément dont la propriété jointe IsFocusScope a la valeur true, la méthode retourne un élément qui constitue le dernier élément qui a le focus du clavier au sein de cette portée de focus, si et seulement si l'élément retourné appartient au même objet PresentationSource que l'élément qui est passé à la méthode. |
Aucun |
Retour au début
UI Automation
Espace de noms : System.Windows, System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.Data, System.Windows.Input ; assemblys : PresentationFramework (dans PresentationFramework.dll), PresentationCore (dans PresentationCore.dll), UIAutomationProvider (dans UIAutomationProvider.dll), WindowsBase (dans WindowsBase.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Hiérarchie de classes de vues |
Les classes TreeViewAutomationPeer et TreeViewItemAutomationPeer héritent de ItemsControlAutomationPeer au lieu de FrameworkElementAutomationPeer. |
Si vous héritez des classes TreeViewItemAutomationPeer et substituez la méthode GetChildrenCore, envisagez de retourner un objet qui hérite de la nouvelle classe TreeViewDataItemAutomationPeer. |
Conteneurs hors-écran |
Pour résoudre une valeur de retour incorrecte, la méthode UIElementAutomationPeer.IsOffscreenCore retourne maintenant correctement la valeur false pour les conteneurs d'éléments qui sortent de l'affichage par défilement. De même, la valeur de la méthode n'est pas affectée par l'occlusion par d'autres fenêtres, ou par le fait que l'élément est visible ou non, sur un écran spécifique. |
Aucun |
Menus et objets enfants |
Pour activer l'UI Automation des menus qui contiennent des enfants différents des objets MenuItem, la méthode GetChildrenCore retourne maintenant l'objet AutomationPeer d'un objet UIElement enfant, au lieu d'un objet MenuItemAutomationPeer. |
Aucun |
Nouvelles interfaces et nouvel assembly |
Pour permettre aux nouvelles fonctions d'utiliser l'UI Automation, les interfaces suivantes ont été ajoutées : |
Tout projet qui génère des homologues Automation WPF doit ajouter une référence explicite à UIAutomationProvider.dll. |
Types Thumb |
La méthode GetClassNameCore retourne une valeur au lieu de la valeur Null. Par conséquent, les contrôles, tels que GridSplitter, qui héritent de la classe Thumb signaleront un nom à l'UI Automation. |
Aucun |
Éléments virtualisés |
Pour améliorer les performances, la méthode UIElementAutomationPeer.GetChildrenCore retourne uniquement les objets enfants qui sont réellement dans l'arborescence d'éléments visuels, au lieu de tous les objets enfants, qu'ils soient virtualisés ou non. |
Utilisez ItemContainerPattern pour itérer au sein de tous les éléments d'un ItemsControlAutomationPeer. |
Retour au début
XAML
Espaces de noms : System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Markup ; assemblys : PresentationFramework (dans PresentationFramework.dll), PresentationCore (dans PresentationCore.dll), WindowsBase (dans WindowsBase.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
Modifications recommandées |
---|---|---|
Extension de balisage |
WPF utilise maintenant toujours correctement la valeur de la méthode MarkupExtension.ProvideValue au lieu de retourner l'objet MarkupExtension dans certains cas lorsqu'une extension de balisage est utilisée pour définir une propriété ou créer un élément dans une collection. Une extension de balisage peut se retourner elle-même dans certains cas. |
Si votre application accède à une ressource qui a retourné un objet MarkupExtension dans les versions antérieures, référencez l'objet retourné de ProvideValue, plutôt que de l'objet MarkupExtension. |
Attributs d'analyse |
Les attributs dans XAML peuvent désormais avoir un seul point. Les exemples suivants sont valides : <Button Background="Red"/> (aucun point) <Button Button.Background = "Red"/> (un point) L'exemple suivant n'est plus valide : <Button Control.Button.Background = "Red"/> (plusieurs points) |
Attributs XAML corrects qui ont plusieurs points. |
Retour au début
XML
Les lignes de cette table décrivent les améliorations apportées aux fonctionnalités qui présentaient précédemment des limitations ou d'autres problèmes.
Schéma et transformations
Espaces de noms : System.Xml.Linq, System.Xml.Schema, System.Xml.XPath ; assemblys : System.Xml (in System.Xml.dll), System.Xml.Linq (dans System.Xml.Linq.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Schémas caméléons |
Pour empêcher une altération des données, les schémas caméléons sont désormais correctement clonés lorsqu'ils sont inclus avec plusieurs schémas. Les schémas caméléons sont des schémas qui n'ont pas d'espace de noms cible, et lorsqu'ils sont inclus dans un autre XSD, ils utilisent l'espace de noms cible du schéma importateur. Ils sont souvent utilisés pour inclure des types communs dans un schéma. |
Fonctions id |
La fonction id XSLT retourne désormais la valeur correcte au lieu de la valeur Null lorsqu'un objet XmlReader est passé à un XLST. Si l'utilisateur créait un objet XmlReader à partir d'une classe LINQ to XML à l'aide de la méthode CreateReader, et que cet objet XmlReader était passé à un XSLT, toutes les instances de la fonction id dans le XSLT retournaient la valeur Null. Ce n'est pas une valeur de retour autorisée pour la fonction id. |
Attribut d'espace de noms |
Pour empêcher l'altération de données, un objet XPathNavigator retourne désormais correctement le nom local de l'attribut x:xmlns. |
Déclarations d'espaces de noms |
Un objet XmlReader sur une sous-arborescence ne crée plus de déclarations d'espace de noms en double dans un élément XML. |
Validation de schéma |
Pour empêcher toute erreur de validation de schéma, la classe XmlSchemaSet permet aux schémas XSD d'être compilés de façon correcte et cohérente. Ces schémas peuvent inclure d'autres schémas ; par exemple, A.xsd peut inclure B.xsd, qui peut inclure C.xsd. Lorsque l'un d'eux est compilé, ce graphique de dépendances est parcouru. |
Fonctions de script |
La fonction function-available ne retourne plus une valeur false incorrecte lorsque la fonction est réellement disponible. |
URI |
La méthode XElement.Load retourne maintenant la BaseURI correcte dans les requêtes LINQ. |
Retour au début
Validation
Espaces de noms : System.Xml.Linq, System.Xml.Schema, System.Xml.XPath ; assemblys : System.Xml (in System.Xml.dll), System.Xml.Linq (dans System.Xml.Linq.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Résolveurs d'espace de noms |
La méthode XmlReader.ReadContentAs n'ignore plus le résolveur IXmlNamespaceResolver qui lui est passé. Dans les versions antérieures, le résolveur d'espace de noms spécifié était ignoré, et le XmlReader était utilisé à la place. |
Espace blanc |
Pour empêcher toute perte de données lorsque vous créez un lecteur, la méthode XmlReader.Create ne supprime plus l'espace significatif. La validation XML reconnaît le mode de contenu mixte, où du texte peut être inséré dans le balisage XML. En mode mixte, tout espace est significatif et doit être signalé. |
Retour au début
Écriture
Espaces de noms : System.Xml.Linq, System.Xml.Schema, System.Xml.XPath ; assemblys : System.Xml (in System.Xml.dll), System.Xml.Linq (dans System.Xml.Linq.dll)
Fonctionnalité |
Différences par rapport à la version 3.5 SP1 |
---|---|
Références d'entité |
Pour empêcher l'altération de données, les références d'entité ne sont plus décomposées deux fois en entités dans les attributs XML. Si l'utilisateur essayait d'écrire une entité dans un attribut xmlns, xml:lang ou xml:space à l'aide de la méthode WriteEntityRef, l'entité était décomposée deux fois en entités dans la sortie, ce qui endommagait les données. |
Gestion du retour à la ligne |
Pour empêcher l'altération de données, les objets XmlWriter respectent l'option None. |
Retour au début
Voir aussi
Concepts
Nouveautés de .NET Framework 4
Migration de solutions Office vers .NET Framework 4
Autres ressources
Guide de migration du .NET Framework 4
Compatibilité de versions dans le .NET Framework
Éléments obsolètes dans le .NET Framework
Nouveaux types et membres dans le .NET Framework 4
Migration Issues for .NET Framework 4 Applications: Beta 2 to RTM
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Août 2010 |
Ajout de problèmes relatifs à l'hébergement des contrôles dans le navigateur Web, les classes de compilateur et CodeDOM et la visionneuse du cache d'assembly global. |
Améliorations apportées aux informations. |