Modifications dans .NET Framework 3.5 SP1
Ce document décrit les modifications de conception qui peuvent être prises en compte dans votre application ou votre environnement lorsque vous effectuez une mise à niveau de .NET Framework version 3.5 vers .NET Framework version 3.5 Service Pack 1 (SP1).
Les modifications se produisent pour plusieurs raisons, notamment des correctifs pour les problèmes de produit, la conformité aux normes, les commentaires des clients et la sécurité. Cette rubrique décrit uniquement les modifications notables. Pour plus d’informations sur les nouvelles fonctionnalités, consultez Nouveautés du .NET Framework . Pour fournir des commentaires, visitez ledu Centre de commentaires sur les produits MSDN
Les sections suivantes décrivent les modifications apportées dans .NET Framework version 3.5 SP1.
Common Language Runtime
améliorations des performances Les applications utilisent désormais la prévention de l’exécution des données pour empêcher les tentatives d’insertion et d’exécution de code à partir d’emplacements de mémoire non exécutables. La sécurité de l’exécution du code managé (y compris les assemblys MSIL, les images NGen et le code non managé) est renforcée par la randomisation de disposition de l’espace d’adressage (ASLR). Les assemblys signés avec nom fort n’ont plus besoin d’avoir vérifié leurs signatures au moment du chargement, à condition qu’elles soient entièrement approuvées et qu’elles soient chargées dans des domaines d’application entièrement approuvés. Cette modification élimine les vérifications redondantes et améliore les performances de démarrage des applications qui ont des assemblys signés, mais qui ne sont pas installées dans le Global Assembly Cache (GAC). Les applications lancées à partir de partages réseau ont le même comportement que les exécutables non managés et fonctionnent en toute confiance, par opposition à une approbation partielle. L’attribut StringFreezingAttribute est désormais ignoré. Cet attribut a été utilisé pour créer des images natives à l’aide du générateur d’images natives (Ngen.exe). L’inliner du compilateur juste-à-temps (JIT) a été considérablement amélioré pour générer du code de meilleure qualité. Toutefois, la modification de l’inliner a un impact sur les applications qui ont des classes instanciées avec des constructeurs qui utilisent la valeur d’énumération TypeAttributes.BeforeFieldInit. L’initialisation statique de ces types est garantie à la fois avant l’accès à l’un des champs statiques, mais pas avant l’appel d’une méthode statique ou d’un constructeur d’instance. L’heure exacte à laquelle le constructeur de classe est appelé peut être différent dans .NET Framework version 3.5 et 3.5 SP1. Les autres modifications apportées au compilateur JIT incluent les modifications apportées aux erreurs d’arrondi à virgule flottante et aux modifications apportées au minutage des finaliseurs. Aucune modification n’est requise. |
ADO.NET
méthodes CanConvertToString sur les classes Serializer Value Les méthodes Les méthodes System.Data.SqlClient.SQLDataReader.GetString et oth er Get lèvent une InvalidCastException si les données ne peuvent pas être converties en type demandé. Les messages incluent désormais les types, tels que : « Impossible de convertir l’objet de type « System.Decimal » en type « System.String ». Aucune modification n’est requise. |
SQLDataReader.GetString sur les colonnes UDT L’appel de la méthode SQLDataReader.GetString sur les colonnes UDT (User Defined Type) lève désormais une InvalidCastException au lieu du message d’erreur « Cast n’est pas pris en charge de Byte[] en chaîne ». Aucune modification n’est requise. |
C#
Requêtes sur des collections non génériques utilisent désormais la sémantique de cast C# standard. Dans les expressions de requête LINQ sur des collections non génériques telles que System.Collections.ArrayList, la clause from de la requête est réécrite par le compilateur pour inclure un appel à l’opérateur Cast<T>. Cast<T> convertit tous les types d’éléments en type spécifié dans la clause from de la requête. En outre, dans la version d’origine de Visual C# 2008, l’opérateur Cast<T> effectue également certaines conversions de type valeur et des conversions définies par l’utilisateur. Toutefois, ces conversions sont effectuées à l’aide de la classe System.Convert au lieu de la sémantique C# standard. Ces conversions provoquent également des problèmes de performances significatifs dans certains scénarios. Dans Visual C# 2008 SP1, l’opérateur Cast<T> est modifié pour lever une invalidCastException pour les conversions numériques de type valeur et définies par l’utilisateur. Cette modification élimine à la fois la sémantique de cast C# non standard et le problème de performances. Cette modification est illustrée dans l’exemple suivant.
Modifications suggérées : si vous avez du code qui effectue des requêtes LINQ sur des collections non génériques et que ce code lève désormais une exception, modifiez le type de l’expression de requête pour qu’il corresponde au type des éléments de la collection que vous interrogez. Si vous devez effectuer une conversion de type valeur ou définie par l’utilisateur sur les éléments, vous pouvez le faire lorsque vous exécutez la requête, comme illustré dans l’exemple suivant :
|
ASP.NET, IIS
en mode intégré IIS Sur le mode d’intégration pour Internet Information Services (IIS) 7.0, la méthode HttpServerUtility.TransferRequest utilise incorrectement la méthode HTTPResponse.End pour arrêter la requête parente. Cela entraîne la levée d’un ThreadAbortException, ce qui peut avoir un impact sur les performances pour terminer l’exécution d’une réponse. Dans .NET Framework 3.5 SP1, la méthode TransferRequest met désormais fin à la requête parente à l’aide de la méthode HttpApplication.CompleteRequest. Cela met également fin à la requête actuelle en transférant le contrôle vers la HttpApplication.EndRequest gestionnaire d’événements sans lever d’exception. Modifications suggérées : si vous avez du code de gestion des erreurs qui utilise la méthode |
d’authentification Windows intégrée Une modification de sécurité affecte la façon dont l’authentification Windows intégrée est gérée par l' System.Net.HttpWebRequest Le processus d’authentification microsoft Windows NT LAN Manager (NTLM) utilisé avec l’authentification Windows intégrée inclut un défi émis par l’ordinateur de destination qui est renvoyé à l’ordinateur client. Lorsqu’un ordinateur reçoit un défi qu’il a généré lui-même, l’authentification échoue, sauf si la connexion est une connexion de bouclage (par exemple, adresse IPv4 127.0.0.1). La classe HttpWebRequest spécifie désormais par défaut le nom d’hôte utilisé dans l’URL de requête dans le nom du principal du service (SPN) utilisé dans le processus d’authentification NTLM. Modifications suggérées : vous pouvez fournir un SPN personnalisé à utiliser pendant l’authentification sur un dictionnaire de chaînes indexées par l’URI. Ce dictionnaire est obtenu avec la propriété System.Net.AuthenticationManager.CustomTargetNameDictionary. Vous pouvez également ajouter le paramètre de Registre suivant pour mapper les noms à la connexion de bouclage :
|
CDOSYS Les classes de l’espace de noms System.Web.Mail s’appuient sur les composants Collaboration Data Objects pour Windows 2000, qui ne seront pas disponibles dans la prochaine version de Windows (Windows 7). Par conséquent, l’utilisation de ces classes dans Windows 7 lève une PlatformNotSupportedException . Modifications suggérées : System.Web.Mail a été déconseillé dans .NET Framework version 2.0. Utilisez la prise en charge de la messagerie dans l’espace de noms System.Net.Mail |
ASP.NET validations de requête ASP.NET validation des demandes inclut désormais la vérification du crochet gauche et de la séquence de caractères de point d’interrogation : Modifications ingérées : l’impact de cette modification doit être minimal, car il n’existe généralement aucune raison d’inclure un commentaire XML dans la chaîne de requête de la variable de cookie. |
validations d’URL ASP.NET valide désormais les parties de l’URL lorsqu’elles sont accessibles à partir d’une page de ASP.NET. Toutefois, lorsque la réécriture d’URL est utilisée, il est possible d’accéder à l’ancienne version de l’URL sur la page avec la propriété Request.RawUrl. Modifications suggérées : désactivez la validation sur une page, si nécessaire. |
états de session Les fournisseurs d’état de session sont censés implémenter tous les membres définis sur la classe Avec la publication du .NET Framework 3.5 SP1, la méthode CreateUninitializedItem peut désormais être appelée dans certaines circonstances lorsqu’un état de session cookie est utilisé. Modifications suggérées : implémentez CreateUninitializedItem dans des fournisseurs personnalisés. Déterminez si un élément « live » existe déjà pour l’ID de session spécifié. S’il n’existe pas d’élément, les fournisseurs doivent créer un élément pour l’ID de session. |
d’encodage d’URL ASP.NET développe désormais l’encodage d’URL des en-têtes HTTP sortants pour inclure le caractère de suppression (7F) et tous les caractères de contrôle ASCII (à l’exception de l’onglet horizontal). Modifications suggérées : si nécessaire, vous pouvez désactiver le comportement d’encodage d’en-tête par défaut comme suit :
|
DefaultHTTPHandler sur IIS Bien que la classe System.Web.DefaultHTTPHandler pour les applications en mode intégré ait été rendue obsolète dans IIS 7.0, il était toujours possible d’utiliser. Il lève maintenant une exception PlatformNotSupported. Modifications suggérées : modifiez la configuration de l’application pour fonctionner correctement en mode intégré. |
la mise en forme des numéros de serveur et du client Le comportement de mise en forme de la fonction Number.localeFormat
Avant .NET Framework 3.5 SP1, le code suivant retourne
À présent, paramètres régionauxFormat retourne Aucune modification n’est requise. |
ASP.NET champs masqués Les champs ASP.NET masqués, tels que VIEWSTATE, sont désormais affichés en haut de la Modifications suggérées : J’ai besoin, vous pouvez désactiver ce comportement en définissant le nouvel attribut renderAllHiddenFieldsAtTopOfForm sur false : La valeur par défaut est true. |
Windows Presentation Foundation (WPF)
classes BitmapEffect sont obsolètes Classe System.Windows.Media.Effects.BitmapEffect, et ses classes dérivées (BevelBitmapEffect, BitmapEffectGroup, BlurBitmapEffect, DropShadowBitmapEffect, EmbossBitmapEffectet OuterGlowBitmapEffect), sont désormais obsolètes. Modifications suggérées : arrêtez d’utiliser les classes héritées BitmapEffect et dérivées et utilisez plutôt les nouvelles classes dérivées de Effect:BlurEffect, DropShadowEffectet ShaderEffect. Vous pouvez également créer vos propres effets en dérivant de ShaderEffect. |
modification du nom de l’assembly L’assembly qui contient la couche de rendu principale de WPF a été renommé de milcore.dll en wpfgfx_v0300.dll. Cet assembly n’a jamais eu d’API publiques. Aucune modification n’est requise. |
comportement du lien hypertexte Si la valeur de la propriété Hyperlink.NavigateUri change entre l’heure à laquelle l’utilisateur pointe le curseur de la souris sur un lien hypertexte et l’heure où l’utilisateur clique sur ce lien hypertexte, la navigation se produit à l’aide de l’URI obtenu lorsque le curseur a survolé le lien hypertexte. Aucune modification n’est requise. |
Internet Explorer en mode protégé sur Windows Vista Quand Internet Explorer est en mode protégé sur Windows Vista, les boîtes de dialogue modales de l’alerte DHTML () fonction et les contrôles ActiveX hébergés en HTML sont bloqués plutôt que affichés. En outre, lorsque le contrôle WebBrowser contrôle ou contrôle Frame hébergeant le code HTML se trouve dans une application XMAL Browser (XBAP) et que le XBAP est chargé entre domaines dans une page HTML, une exception est levée. Aucune modification n’est requise. |
méthodes CanConvertToString sur les classes Serializer Value Les méthodes Aucune modification n’est requise. |
Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF)
correspondance de schéma Le schéma de correspondance de schéma utilisé par l' UriTemplate Aucune modification n’est requise. |
améliorations de sécurité pour l’authentification Lorsqu’un service s’exécute sous un compte d’utilisateur avec une sécurité en mode mixte, un EndPointIdentity doit avoir une identité UPN (User Principal Name). Cela n’était pas nécessaire avec les versions antérieures de WCF. Modifications suggérées : lorsqu’un client est défini pour utiliser le paramètre SecurityMode.TransportWithMessageCredential (à l’aide de l’authentification Windows, de l’authentification UPN ou de l’authentification de l’empreinte numérique), créez une instance de la classe EndPointAddress avec une identité UPN et fournissez du code personnalisé pour gérer toute vérification d’empreinte numérique. |
prise en charge de l’approbation partielle pour la journalisation des événements L’approbation partielle prend désormais en charge la journalisation des événements limitée. Seules les erreurs d’activation de service, les échecs de suivi et les échecs de journalisation sont enregistrés dans le journal des événements. Pour éviter d’écrire des messages excessifs dans le journal des événements, le nombre maximal d’événements pouvant être enregistrés par un processus est de 5. Aucune modification n’est requise. |
disponibilité remoteEndpointMessageProperty L’accès à une instance de la classe RemoteEndpointMessageProperty lors de l’utilisation de HTTP hébergé dans IIS dépend de la présence d’une requête active. Par conséquent, il ne peut pas être obtenu une fois la demande terminée (par exemple, lors de l’exécution d’une réception unidirectionnel). Aucune modification n’est requise. |
Remarque : Pour résoudre les problèmes de rupture tardive qui étaient essentiels pour certaines applications, Microsoft prévoit de fournir une mise à jour vers NET Framework 3.5 SP1 qui peut être incluse dans une mise à jour Importante de Windows Update. Pour plus d’informations sur cette mise à jour, consultez la page de téléchargement .NET Framework 3.5 SP1 dans le Centre de téléchargement Microsoft.