Změny v rozhraní .NET Framework 3.5 SP1
Tento dokument popisuje změny návrhu, které mohou být při upgradu z rozhraní .NET Framework verze 3.5 na .NET Framework verze 3.5 service pack 1 (SP1) potřeba zohlednit.
Ke změnám dochází z několika důvodů, včetně oprav problémů s produktem, dodržování standardů, zpětné vazby zákazníků a zabezpečení. Toto téma popisuje pouze klíčové změny. Informace o nových funkcích naleznete v tématu Novinky v rozhraní .NET Framework . Pokud chcete poskytnout zpětnou vazbu, navštivte webu MSDN Product Feedback Center.
Následující části popisují změny provedené v rozhraní .NET Framework verze 3.5 SP1.
Common Language Runtime
vylepšení výkonu Aplikace teď používají ochranu před spuštěním dat, aby se zabránilo pokusům o vložení a spuštění kódu z nespouštětelných umístění paměti. Zabezpečení pro spouštění spravovaného kódu (včetně sestavení MSIL, imagí NGen a nespravovaného kódu) je podporováno randomizací rozložení adresního prostoru (ASLR). Za předpokladu, že jsou plně důvěryhodná a načtou se do plně důvěryhodných domén aplikací, nemusí už podepsaná sestavení se silným názvem kontrolovat jejich podpisy. Tato změna eliminuje redundantní kontroly a zlepšuje výkon spouštění aplikací, které mají podepsaná sestavení, ale nejsou nainstalovány v globální mezipaměti sestavení (GAC). Aplikace spuštěné ze síťových sdílených složek mají stejné chování jako nespravované spustitelné soubory a pracují s úplným vztahem důvěryhodnosti, a ne s částečnou důvěryhodností. Atribut StringFreezingAttribute je nyní ignorován. Tento atribut se použil k vytváření nativních imagí pomocí generátoru nativních bitových kopií (Ngen.exe). Vložený kompilátor JIT (just-in-time) byl výrazně vylepšen tak, aby vygeneroval lepší kvalitu kódu. Změna vloženého souboru má však vliv na aplikace, které mají instance tříd s konstruktory, které používají TypeAttributes.BeforeFieldInit hodnotu výčtu. Statické inicializace těchto typů je zaručena najednou před přístupem ke statickým polím, ale ne před vyvolání statické metody nebo konstruktoru instance. Přesný čas vyvolání konstruktoru třídy se může lišit v rozhraní .NET Framework verze 3.5 a 3.5 SP1. Mezi další změny kompilátoru JIT patří změny chyb zaokrouhlení s plovoucí desetinou čárkou a změny časování finalizátorů. Nejsou vyžadovány žádné změny. |
ADO.NET
Metody CanConvertToString u tříd serializátoru hodnot CanConvertToString metody pro třídy serializátoru hodnot v System.Windows.Converters oboru názvů vyvolá ArgumentException místo vrácení false. Metoda System.Data.SqlClient.SQLDataReader.GetString a oth er Get vyvolá InvalidCastException, pokud data nelze přetypovat do požadovaného typu. Zprávy teď obsahují typy, například: "Nelze přetypovat objekt typu System.Decimal na typ System.String". Nejsou vyžadovány žádné změny. |
SQLDataReader.GetString u sloupců UDT Volání metody SQLDataReader.GetString ve sloupcích UDT (User Defined Type) teď vyvolá InvalidCastException místo chybové zprávy "Cast is not supported from Byte[] to String". Nejsou vyžadovány žádné změny. |
C#
Dotazy nad ne generickými kolekcemi teď používají standardní sémantiku přetypování jazyka C#. Ve výrazech dotazu LINQ u ne generických kolekcí, jako je System.Collections.ArrayList , je klauzule from dotazu přepsána kompilátorem tak, aby zahrnoval volání operátoru Cast<T>. Přetypování<T> převede všechny typy prvků na typ zadaný v klauzuli from v dotazu. Kromě toho v původní verzi jazyka Visual C# 2008 operátor Cast<T> také provádí některé převody typů hodnot a uživatelsky definované převody. Tyto převody se však provádějí pomocí třídy System.Convert namísto standardní sémantiky jazyka C#. Tyto převody také způsobují významné problémy s výkonem v určitých scénářích. V jazyce Visual C# 2008 SP1 je operátor cast<T> změněn tak, aby vyvolá invalidCastException pro číselný typ hodnoty a uživatelsky definované převody. Tato změna eliminuje sémantiku přetypování jazyka C# i problém s výkonem. Tato změna je znázorněna v následujícím příkladu.
Navrhované úpravy: Pokud máte kód, který provádí dotazy LINQ přes ne generické kolekce a tento kód teď vyvolá výjimku, změňte typ výrazu dotazu tak, aby odpovídal typu prvků v kolekci, na kterou dotazujete. Pokud potřebujete provést převod typu hodnoty nebo uživatelem definovaného u prvků, můžete to provést při spuštění dotazu, jak je znázorněno v následujícím příkladu:
|
ASP.NET, IIS
integrovaného režimu služby IIS V režimu integrace internetové informační služby (IIS) 7.0 metoda HttpServerUtility.TransferRequest nesprávně používá metodu HTTPResponse.End k zastavení nadřazeného požadavku. Výsledkem je vyvolání ThreadAbortException , což může mít vliv na výkon pro ukončení provádění odpovědi. V rozhraní .NET Framework 3.5 SP1 nyní metoda TransferRequest ukončí nadřazený požadavek pomocí metody HttpApplication.CompleteRequest. Tím se také úspěšně ukončí aktuální požadavek přenesením ovládacího prvku do HttpApplication.EndRequest obslužné rutiny události bez vyvolání výjimky. Navrhované úpravy: Pokud máte kód zpracování chyb, který používá metodu TransferRequest k určení, zda ThreadAbortException byl vyvolán, můžete tento kód odebrat z bloku catch. (Nakonec se bloky budou dál spouštět.) |
integrované ověřování systému Windows Změna zabezpečení ovlivňuje způsob zpracování integrovaného ověřování systému Windows System.Net.HttpWebRequest , System.Net.HttpListener , System.Net.Security.NegotiateStream a souvisejících tříd v oboru názvů System.Net. Tato změna může mít vliv na webové servery a klientské aplikace nakonfigurované tak, aby používaly integrované ověřování systému Windows. Proces ověřování systému Microsoft Windows NT LAN Manager (NTLM) používaný s integrovaným ověřováním systému Windows zahrnuje výzvu vystavenou cílovým počítačem, který je odeslán zpět do klientského počítače. Když počítač obdrží výzvu, kterou vygeneroval sám, ověřování selže, pokud připojení není zpětné připojení (například IPv4 adresa 127.0.0.1). Třída HttpWebRequest teď ve výchozím nastavení určuje název hostitele použitý v adrese URL požadavku v hlavním názvu služby (SPN) používaném v procesu ověřování NTLM. Navrhované úpravy: Vlastní hlavní název služby (SPN), který se použije při ověřování, můžete zadat ve slovníku řetězců indexovaných identifikátorem URI. Tento slovník se získá pomocí System.Net.AuthenticationManager.CustomTargetNameDictionary vlastnost. Můžete také přidat následující nastavení registru pro mapování názvů na zpětné připojení smyčky:
|
CDOSYS Třídy v oboru názvů System.Web.Mail spoléhají na datové objekty spolupráce pro součásti systému Windows 2000, které nebudou k dispozici v další verzi Systému Windows (Windows 7). V důsledku toho použití těchto tříd v systému Windows 7 vyvolá PlatformNotSupportedException . Navrhované úpravy: System.Web.Mail byl v rozhraní .NET Framework verze 2.0 zastaralý. Místo toho použijte podporu pošty v oboru názvů System.Net. Mail. |
ASP.NET ověření požadavků ASP.NET ověření požadavku teď zahrnuje kontrolu levého úhlového závorky a sekvence znaků otazníku: Ingestované úpravy: Dopad této změny by měl být minimální, protože obvykle není důvod, proč by komentář XML byl zahrnut do řetězce dotazu proměnné cookie. |
ověření adresy URL ASP.NET teď ověřuje části adresy URL při přístupu ze stránky ASP.NET. Při přepsání adresy URL je však možné získat přístup ke staré verzi adresy URL na stránce pomocí vlastnosti Request.RawUrl. Navrhované úpravy: V případě potřeby zakažte ověřování na stránce. |
stavy relace Očekává se, že poskytovatelé stavu relace implementují všechny členy definované v System.Web.SessionState.SessionStateStoreProviderBase třídy, včetně CreateUninitializedItem metoda. Tato metoda však byla volána pouze v případě, že web používal stav relace bez souborů cookie. Vývojáři, kteří nepoužili stav relace bez souborů cookie, nemuseli implementovat CreateUninitializedItem ve vlastním poskytovateli. S vydáním rozhraní .NET Framework 3.5 SP1 je nyní možné metodu CreateUninitializedItem volat také za určitých okolností při použití stavu relace cookie. Navrhované úpravy: Implementujte CreateUninitializedItem ve vlastních zprostředkovatelích. Určete, zda již existuje "živá" položka pro zadané ID relace. Pokud položka neexistuje, poskytovatelé by měli vytvořit položku pro ID relace. |
kódování adresy URL ASP.NET teď rozšiřuje kódování adres URL odchozích hlaviček HTTP tak, aby zahrnovalo znak odstranění (7F) a všechny řídicí znaky ASCII (s výjimkou vodorovné karty). Navrhované úpravy: V případě potřeby můžete vypnout výchozí chování kódování hlaviček následujícím způsobem:
|
DefaultHTTPHandler ve službě IIS I když System.Web.DefaultHTTPHandler třídu pro aplikace integrovaného režimu byla v IIS 7.0 zastaralá, bylo stále možné použít. Teď vyvolá výjimku PlatformNotSupported. Navrhované úpravy: Změňte konfiguraci aplikace tak, aby správně fungovala v integrovaném režimu. |
Server a klientské číslování konzistencí Chování formátování funkce Number.localeFormat (spuštěno na klientovi) teď odpovídá metodě String.Format (spouštěné na serveru). Například následující kód vrátí
Před rozhraním .NET Framework 3.5 SP1 by následující kód vrátil
Nyní localeFormat vrátí Nejsou vyžadovány žádné změny. |
ASP.NET skrytá pole Skrytá pole ASP.NET, například VIEWSTATE, se teď před vykreslením ovládacích prvků vykreslují v horní části Navrhované úpravy: Potřebuji, můžete toto chování vypnout nastavením nového renderAllHiddenFieldsAtTopOfForm atributu false: Výchozí hodnota je true. |
Windows Presentation Foundation (WPF)
Třídy BitmapEffect jsou zastaralé Třída System.Windows.Media.Effects.BitmapEffect, a jeho odvozené třídy (BevelBitmapEffect, BitmapEffectGroup, BlurBitmapEffect, DropShadowBitmapEffect, EmbossBitmapEffecta OuterGlowBitmapEffect), jsou nyní zastaralé. Navrhované úpravy: Ukončete používání starší verze BitmapEffect a odvozené třídy a místo toho použijte nové třídy odvozené z Efekt:BlurEffect, DropShadowEffecta ShaderEffect. Můžete také vytvořit vlastní efekty odvozením z ShaderEffect. |
změna názvu sestavení Sestavení, které obsahuje základní vykreslovací vrstvu WPF, bylo přejmenováno z milcore.dll na wpfgfx_v0300.dll. Toto sestavení nikdy nemělo žádná veřejná rozhraní API. Nejsou vyžadovány žádné změny. |
chování hypertextového odkazu Pokud se hodnota vlastnosti Hyperlink.NavigateUri změní mezi časem, kdy uživatel najede myší na hypertextový odkaz a čas, kdy uživatel klikne na tento hypertextový odkaz, navigace se provede pomocí identifikátoru URI získaného při najetí kurzoru na hypertextový odkaz. Nejsou vyžadovány žádné změny. |
Internet Explorer v chráněném režimu v systému Windows Vista Pokud je Aplikace Internet Explorer v chráněném režimu v systému Windows Vista, modální dialogy z výstrahy DHTML () funkce a ovládací prvky ActiveX hostované v HTML jsou blokovány místo zobrazení. Kromě toho, když WebBrowser ovládací prvek nebo Frame ovládací prvek hostující HTML je v XMAL Browser Application (XBAP) a XBAP je načten mezi doménami na stránce HTML, vyvolá se výjimka. Nejsou vyžadovány žádné změny. |
Metody CanConvertToString pro třídy Value Serializer CanConvertToString metody pro třídy serializátoru hodnot v System.Windows.Media.Converters a System.Windows.Media.Media3D.Converters obory názvů vyvolat ArgumentException místo vrácení false. Nejsou vyžadovány žádné změny. |
Windows Communication Foundation (WCF) a Windows Workflow Foundation (WF)
porovnávání schématu Schéma porovnávání schématu, které používá UriTemplate a UriTemplateTable třídy, byly uvolněny pro příjem základních adres s jinými schématy než HTTP. Teď ani jedna z těchto tříd nepoužívá schéma nebo číslo portu při porovnávání kandidátských identifikátorů URI k šablonám. Byla přidána podpora šablon pro koncové lomítka a výchozí hodnoty. Nejsou vyžadovány žádné změny. |
vylepšení zabezpečení pro ověřování Pokud je služba spuštěná pod uživatelským účtem se smíšeným zabezpečením, EndPointIdentity musí mít identitu hlavního názvu uživatele (UPN). U dřívějších verzí WCF to nebylo nutné. Navrhované úpravy: Pokud je klient nastavený tak, aby používal nastavení SecurityMode.TransportWithMessageCredential (pomocí ověřování systému Windows, ověřování upN nebo ověřování kryptografického otisku), vytvořte instanci EndPointAddress třídy s identitou hlavního názvu uživatele (UPN) a zadejte vlastní kód pro zpracování ověření kryptografického otisku. |
podpora částečné důvěryhodnosti pro protokolování událostí Částečná důvěryhodnost teď podporuje omezené protokolování událostí. Do protokolu událostí se protokolují pouze chyby aktivace služeb, chyby trasování a chyby protokolování. Aby se zabránilo zápisu nadměrných zpráv do protokolu událostí, je maximální počet událostí, které lze protokolovat procesem, 5. Nejsou vyžadovány žádné změny. |
dostupnosti RemoteEndpointMessageProperty Přístup k instanci RemoteEndpointMessageProperty třídy při použití protokolu HTTP hostovaného ve službě IIS závisí na tom, že má aktuálně aktivní požadavek. Proto jej nelze získat po dokončení požadavku (například při provádění jednosměrného příjmu). Nejsou vyžadovány žádné změny. |
Poznámka: Řešení problémů, které byly zásadní pro některé aplikace, společnost Microsoft plánuje poskytnout aktualizaci rozhraní NET Framework 3.5 SP1, která může být součástí důležité služby Windows Update. Další informace o této aktualizaci budou k dispozici na stránce pro stažení rozhraní .NET Framework 3.5 SP1 na webu Stažení softwaru společnosti Microsoft.