Potíže s migrací rozhraní .NET Framework 4
Toto téma popisuje problémy s migrací mezi .NET Framework verze 3.5 Service Pack 1 a .NET Framework verze 4, včetně oprav, změn ve shodě s normami a v zabezpečení a změn na základě zpětné vazby od zákazníků. Většina těchto změn nevyžaduje žádné programové změny v aplikacích. Informace o těch, které mohou zahrnovat změny, naleznete v tabulce ve sloupci Doporučené změny.
Toto téma popisuje důležité změny v následujících oblastech:
Technologie ASP.NET a web
Jádro
Data
Windows Communication Foundation (WCF)
Windows Presentation Foundation (WPF)
jazyk XML
Přehled problematiky v tomto tématu na vyšší úrovni najdete v části Průvodce migrací do rozhraní .NET Framework 4.
Informace o migraci po verzi Beta 2 najdete v části Otázky ohledně migrace pro aplikace rozhraní .NET Framework 4: Beta 2 na RTM.
Informace o nových vlastnostech naleznete v tématu Novinky v rozhraní .NET Framework 4.
Technologie ASP.NET a web
Obory názvů: System.Web, System.Web.Mobile, System.Web.Security, System.Web.UI.WebControls; sestavení: System.Web (v knihovně System.Web.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Soubory definic prohlížečů |
Soubory definice prohlížeče byly aktualizovány, aby obsahovaly informace o nových a aktualizovaných prohlížečích a zařízeních. Starší prohlížeče a zařízení, například Netscape Navigator, byly odstraněny a novější prohlížeče a zařízení, jako jsou aplikace Google Chrome a Apple iPhone, byly přidány. Pokud vaše aplikace obsahuje vlastní definice prohlížeče, které dědí z jedné z definic prohlížečů, které byly odebrány, zobrazí se chyba. Objekt HttpBrowserCapabilities (který je vystaven vlastností Request.Browser stránky) je řízen soubory definic prohlížeče. Proto se může informace, která je vrácena po přístupu k vlastnosti tohoto objektu v technologii ASP.NET 4, lišit od informace, která byla vrácena v předchozí verzi technologie ASP.NET. |
Pokud vaše aplikace spoléhá na staré soubory definic prohlížečů, můžete je zkopírovat z následující složky: Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers Zkopírujte soubory do odpovídající složky \CONFIG\Browsers pro ASP.NET 4. Po zkopírování souborů spusťte nástroj příkazového řádku Aspnet_regbrowsers.exe. Další informace naleznete na webu http://www.asp. net/mobilehttps://go.microsoft.com/fwlink/?LinkId=182900. |
Podřízená aplikace spuštěná v kombinovaných verzích technologie ASP.NET |
Aplikace ASP.NET 4, které jsou nakonfigurovány jako podřízené hodnoty aplikací používajících dřívější verze technologie ASP.NET, se nemusí spustit kvůli chybám konfigurace nebo kompilace. Konkrétní chyby, ke kterým dochází, závisí na tom, zda aplikace běží ve verzi IIS 6.0, IIS 7 nebo IIS 7.5. |
Můžete provádět změny konfiguračních souborů ovlivněných aplikací, aby konfigurační systém správně rozpoznal aplikaci technologie ASP.NET 4. Informace o změnách, které je třeba provést, naleznete v oddílu „Podřízené aplikace technologie ASP.NET 4 nelze spustit při provozu v aplikacích technologie ASP.NET 2.0 nebo ASP.NET 3.5“ v dokumentu ASP.NET 4 – nejnovější změny na webu ASP.NET. |
Změny ID klienta |
Nové nastavení ClientIDMode v prostředí ASP.NET 4 umožňuje určit, jak prostředí ASP.NET generuje atribut id pro elementy HTML. V dřívějších verzích technologie ASP.NET výchozí chování odpovídalo nastavení AutoID elementu ClientIDMode. Výchozí nastavení je nyní Predictable. Další informace naleznete v tématu Identifikace ovládacích prvků technologie ASP.NET. |
Pokud použijete sadu Visual Studio 2010 k upgradu vaší aplikace z technologie ASP.NET 2.0 nebo ASP.NET 3.5, nástroj automaticky přidá do souboru Web.config nastavení, které zachovává chování starších verzí rozhraní .NET Framework. Nicméně pokud upgradujete aplikaci změnou fondu aplikací ve službě IIS tak, aby bylo cílem rozhraní .NET Framework 4, technologie ASP.NET bude standardně používat nový režim. Chcete-li zakázat nový režim ID klienta, přidejte do souboru Web.config následující nastavení: <pages ClientIDMode="AutoID" / > |
Zabezpečení přístupu kódu (CAS) |
Funkce NET technologie ASP.NET 2.0 NET, které byly přidány do technologie ASP.NET 3.5, používají model CAS (Code Access Security) rozhraní .NET Framework 1.1 a .NET Framework 2.0. Nicméně implementace modelu CAS v technologii ASP.NET 4 byla podstatně reorganizována. V důsledku toho se nemusí zdařit aplikace částečné důvěryhodnosti ASP.NET, které spoléhají na důvěryhodný kód spuštěný v globální mezipaměti sestavení s různými výjimkami zabezpečení. Aplikace s částečnou důvěryhodností, které závisí na rozsáhlých úpravách zásady počítače CAS, mohou také selhat a zapříčinit tak výjimky zabezpečení. |
Aplikace s částečnou důvěryhodností technologie ASP.NET 4 můžete vrátit na chování technologie ASP.NET 1.1 a 2.0 pomocí nového atributu legacyCasModel v konfiguračním elementu trust, jak je znázorněno v následujícím příkladu: <trust level= "Medium" legacyCasModel="true" />
Poznámka k zabezpečení
Návrat ke staršímu modelu CAS může představovat snížení bezpečnosti.
Další informace o novém modelu kódovaného zabezpečení přístupu technologie ASP.NET 4 najdete v části Zabezpečení přístupu ke kódu v aplikacích ASP.NET. |
Konfigurační soubory |
Kořenové konfigurační soubory (soubor machine.config a kořenový soubor Web.config) pro rozhraní .NET Framework a ASP.NET 4 byly aktualizovány, aby zahrnovaly většinu často používaných informací o konfiguraci, které byly nalezeny v souborech Web.config aplikace ve verzi ASP.NET 3.5. Z důvodu složitosti spravovaných systémů konfigurace služby IIS 7 a IIS 7.5, spuštění aplikací ASP.NET 3.5 v technologii ASP.NET 4 a službě IIS 7 a IIS 7.5 může mít za následek chyby rozhraní ASP.NET nebo služby IIS. |
Upgrade aplikací technologie ASP.NET 3.5 na technologii ASP.NET 4 pomocí nástrojů pro upgrade projektů v aplikaci Visual Studio 2010. Aplikace Visual Studio 2010 automaticky upraví soubor Web.config aplikace technologie ASP.NET 3.5, aby obsahoval příslušná nastavení pro technologii ASP.NET 4. Aplikace technologie ASP.NET 3.5 používající rozhraní .NET Framework 4 lze však spustit bez rekompilace. V takovém případě může být před spuštěním aplikace v rozhraní .NET Framework 4 a ve službě IIS 7 nebo IIS 7.5 nutné ručně upravit soubor Web.config aplikace. Konkrétní změny, které je třeba provést, závisí na kombinaci softwaru, se kterým pracujete, včetně vydání aktualizací Service Pack (SP). Informace o možných kombinacích softwaru, které jsou postiženy touto změnou, a o řešení problémů s konkrétními kombinacemi naleznete v části „Konfigurační chyby související s novou kořenovou konfigurací technologie ASP.NET 4“ v dokumentu ASP.NET 4 – nejnovější změny na webu ASP.NET. |
Vykreslování ovládacího prvku |
V dřívějších verzích technologie ASP.NET některé ovládací prvky vytvářely značky, které nebylo možné zakázat. Ve výchozím nastavení již tento typ značky nebude vygenerována v technologii ASP.NET 4. Změny vykreslování ovlivňují následující ovládací prvky:
Ovládací prvky, které nejsou navrženy pro uživatelský vstup (například ovládací prvek Label) již nevykreslují atribut disabled="disabled", pokud je jeho vlastnost Enabled nastavena na hodnotu false (nebo pokud dědí toto nastavení z ovládacího prvku kontejneru). |
Pokud použijete sadu Visual Studio 2010 k upgradu vaší aplikace z technologie ASP.NET 2.0 nebo ASP.NET 3.5, nástroj automaticky přidá do souboru Web.config nastavení, které zachovává starší vykreslování. Nicméně pokud upgradujete aplikaci změnou fondu aplikací ve službě IIS tak, aby bylo cílem rozhraní .NET Framework 4, technologie ASP.NET bude standardně používat nový režim vykreslování. Chcete-li zakázat nový režim vykreslování, přidejte do souboru Web.config následující nastavení: <pages controlRenderingCompatibilityVersion="3.5" /> |
Obslužné rutiny událostí ve výchozích dokumentech |
Technologie ASP.NET 4 vykreslí hodnotu atributu HTML form elementu action jako prázdný řetězec, když je proveden požadavek na adresu URL bez přípony, na kterou je napamován výchozí dokument. V dřívějších verzích technologie ASP.NET by měla žádost na adresu https://contoso.com za výsledek žádost na stránku Default.aspx. V tomto dokumentu by počáteční značka form byla vykreslena jako v následujícím příkladu: <form action="Default.aspx" /> V technologii ASP.NET 4 má žádost na adresu https://contoso.com za výsledek také žádost o stránku Default.aspx, ale technologie ASP.NET nyní vykresluje počáteční značku form protokolu HTML tak, jako v následujícím příkladu: <form action="" /> Když je atribut action prázdným řetězcem, objekt DefaultDocumentModule služby IIS vytvoří podřízenou žádost na stránku Default.aspx. Za většiny podmínek je tato podřízená žádost transparentní pro kód aplikace a stránka Default.aspx běží normálně. Potenciální interakce mezi spravovaným kódem a integrovaným režimem služby IIS 7 nebo IIS 7.5 však může způsobit, že spravované stránky .aspx přestane fungovat správně při podřízeném požadavku. Pokud nastanou následující podmínky, podřízená žádost na výchozí dokument ASPX způsobí chybu nebo neočekávané chování:
Protože neexistuje žádný obsah entity, neexistují žádné proměnné formuláře a žádný stav zobrazení. Proto nejsou pro obsluhu stránky .aspx k dispozici žádné informace určující, k jaké události má dojít (pokud vůbec). V důsledku toho není spuštěna žádná z obslužných rutin události zpětného odeslání pro postiženou stránku ASPX. |
Informace o způsobech řešení problémů, které mohou vznikat v důsledku této změny naleznete v části „Obslužné rutiny událostí nemusí být ve výchozím dokumentu v integrovaném režimu služby IIS 7 nebo IIS 7.5 neaktivní“ v dokumentu ASP.NET 4 Breaking Changes na webu ASP.NET. |
Algoritmus hash |
Technologie ASP.NET využívá šifrování a algoritmy hash na pomoc se zabezpečením dat, jako jsou soubory cookie ověřování formulářů a stav zobrazení. Ve výchozím nastavení technologie ASP.NET 4 používá algoritmus HMACSHA256 pro operace algoritmu hash v souborech cookie a stavu zobrazení. Dřívější verze technologie ASP.NET používaly starší algoritmus HMACSHA1. |
Pokud spouštíte aplikace kombinující technologie ASP.NET 2.0 a ASP.NET 4, ve kterých data jako soubory cookie ověřování pomocí formulářů musí fungovat mezi verzemi rozhraní .NET Framework, nakonfigurujte webovou aplikaci technologie ASP.NET 4 pro použití staršího algoritmu HMACSHA1 přidáním následujícího nastavení do souboru Web.config: <machineKey validation="SHA1" /> |
Hostování ovládacích prvků v aplikaci Internet Explorer |
Již nemůžete hostit ovládací prvky formulářů systému Windows v aplikaci Internet Explorer, protože existují lepší řešení pro hostování ovládacích prvků na webu. Sestavení IEHost.dll a IEExec.exe byly tedy odebrány z prostředí .NET Framework. |
Pro vývoj vlastního ovládacího prvku ve webových aplikacích můžete použít následující technologie:
|
Metody HtmlEncode a UrlEncode |
Metody HtmlEncode a UrlEncode tříd HttpUtility a HttpServerUtility byly aktualizovány, aby mohly provádět kódování znaku jednoduché uvozovky ('), a to takto:
|
Zkontrolujte místa v kódu, kde používáte metody HtmlEncode a UrlEncode, a ujistěte se, že změna kódování nemá za následek změnu, která by mohla ovlivnit vaši aplikaci. |
Chyby HttpException v aplikacích technologie ASP.NET 2.0 |
Po povolení technologie ASP.NET 4 ve službě IIS 6 mohou aplikace ASP.NET 2.0, které jsou spouštěny ve službě IIS 6 (v systému Windows Server 2003 nebo Windows Server 2003 R2), generovat chyby, například následující: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. |
|
Typy členství |
Některé typy (například System.Web.Security.MembershipProvider), které se používají v členství ASP.NET, byly přesunuty ze sestavení System.Web.dll do sestavení System.Web.ApplicationServices.dll. Typy byly přesunuty za účelem vyřešení závislostí architektonických vrstev mezi typy v klientovi a v rozšířených SKU rozhraní .NET Framework. |
Knihovny třídy, které byly upgradovány z dřívějších verzí technologie ASP.NET a které používají typy členství, které byly přesunuty, se nemusí podařit kompilovat při použití v projektu ASP.NET 4. Pokud ano, přidejte do projektu knihovny tříd odkaz na soubor System.Web.ApplicationServices.dll. |
Změny ovládání nabídky |
Změny ovládacího prvku Menu mají za následek následující chování:
|
|
Mobilní sestavení v souboru Web.config |
V dřívějších verzích technologie ASP.NET, byl v kořenovém souboru Web.config v části assemblies v oddílu system.web/compilation zahrnut odkaz na sestavení System.Web.Mobile.dll. Pro účely zlepšení výkonu byl odebrán odkaz na tohoto sestavení.
Poznámka
Sestavení System.Web.Mobile.dll a mobilní ovládací prvky ASP.NET jsou součástí prostředí ASP.NET 4, ale jsou zastaralé.
|
Chcete-li použít typy z tohoto sestavení, přidejte odkaz na sestavení v kořenovém souboru Web.config nebo v souboru Web.config aplikace. |
Ukládání výstupu do mezipaměti |
Chyba v technologii ASP.NET 1.0 způsobovala, že stránky v mezipaměti, které určily jako nastavení výstupní mezipaměti hodnotu Location="ServerAndClient", vytvářely v odpovědi hlavičky protokolu HTTP Vary:*. To mělo za následek předání informace prohlížečům klientů, aby se stránky nikdy lokálně neukládaly do mezipaměti. V technologii ASP.NET 1.1, byla přidána metoda HttpCachePolicy.SetOmitVaryStar, která mohla být volána za účelem potlačení hlavičky Vary:*. Hlášení o chybách ale naznačují, že vývojáři si nejsou vědomi existujícího chování SetOmitVaryStar. V technologii ASP.NET 4 již hlavička Vary:* protokolu HTTP není vytvářena z odpovědí, které specifikují následující direktivu: <%@ OutputCache Location="ServerAndClient" %> V důsledku toho již metoda HttpCachePolicy.SetOmitVaryStar není zapotřebí, aby potlačila záhlaví Vary:*. V aplikacích, které určují pro atribut Location hodnotu „ServerAndClient“, bude možné stránky ukládat do mezipaměti v prohlížeči bez nutnosti volání funkce HttpCachePolicy.SetOmitVaryStar. |
Pokud stránky v aplikaci musí generovat Vary:*, volejte metodu HttpResponse.AppendHeader, jak je znázorněno v následujícím příkladu: HttpResponse.AppendHeader("Vary","*"); Alternativně můžete změnit hodnotu atributu ukládání výstupu do mezipaměti Location na hodnotu Server. |
Analýza stránek |
Analyzátor stránky pro webové stránky ASP.NET (soubory .aspx) a uživatelské ovládací prvky (soubory .ascx) je ve verzi ASP.NET 4 přísnější než v předchozích verzích prostředí ASP.NET a označuje více kódů jako neplatné než v předchozích verzích. |
Zkontrolujte chybové zprávy vytvořené při spuštění stránky a opravte chyby vyplývající z neplatné značky. |
Typy služby Passport |
Podpora služby Passport integrovaná do prostředí ASP.NET 2.0 je zastaralá a není podporována kvůli změnám ve službě Passport (nyní Live ID SDK). V důsledku toho typy vztahující se k účtu služby Passport v System.Web.Security jsou nyní označeny atributem ObsoleteAttribute. |
Změňte jakýkoli kód, který používá typy Passport v oboru názvů System.Web.Security (například System.Web.Security.PassportIdentity) k použití Windows Live ID SDK. |
Informace PathInfo ve vlastnosti FilePath |
Technologie ASP.NET 4 již nezahrnuje hodnotu PathInfo ve vrácených hodnotách z vlastností, jako jsou HttpRequest.FilePath, HttpRequest.AppRelativeCurrentExecutionFilePath a HttpRequest.CurrentExecutionFilePath. Namísto toho je informace PathInfo dostupná v HttpRequest.PathInfo. Představte si například následující fragment adresy URL: /testapp/Action.mvc/SomeAction V dřívějších verzích technologie ASP.NET mají vlastnosti System.Web.HttpRequest následující hodnoty:
V technologii ASP.NET 4 mají vlastnosti System.Web.HttpRequest místo toho následující hodnoty:
|
Zkontrolujte místa v kódu, která jsou závislá na vlastnostech třídy System.Web.HttpRequest pro vracení informací o cestě; změňte kód tak, aby odpovídal změnám způsobu vracení informací o cestě. |
Ověřování požadavku |
Pro účely zlepšení žádosti o ověření je žádost o ověření technologie ASP.NET vyvolána v životním cyklu žádosti dříve. V důsledku toho se spustí požadavek na ověření pro žádosti, které nejsou určeny pro soubory ASPX, například pro volání webové služby a vlastní obslužné rutiny. Ověřování požadavku bude rovněž aktivní, když jsou vlastní moduly protokolu HTTP spuštěny v kanálu zpracování požadavku. V důsledku této změny mohou požadavky na jiné prostředky než soubory ASPX vyvolat chyby ověření požadavku. Vlastní kód, který je spuštěn ve třídě Request Pipeline (například vlastní moduly HTTP) mohou také vrátit chyby ověření požadavku. |
Bude-li to nutné, můžete se vrátit ke starému chování, kdy pouze stránky ASPX vyvolávají ověřování žádostí pomocí následujícího nastavení ve webovém konfiguračním souboru: <httpRuntime requestValidationMode="2.0" />
Poznámka k zabezpečení
Pokud provádíte vrácení na staré chování, ujistěte se, že veškerý kód v existujících obslužných rutinách, modulech a další vlastní kód provádí vyhledávání potenciálně nebezpečných vstupů HTTP, které by mohly být způsoby útoky XSS.
|
Směrování |
Pokud vytvoříte web v systému souborů v sadě Visual Studio 2010 a web je ve složce, která obsahuje tečku (.) v názvu složky, směrování URL nebude fungovat spolehlivě. Chyba HTTP 404 se vrátila z určitých virtuálních cest. Je to způsobeno tím, že aplikace Visual Studio 2010 spustí vývojový server sady Visual Studio (Cassini) pomocí nesprávné cesty pro virtuální kořenový adresář. |
|
Weby SharePoint |
Pokud se pokusíte spustit web technologie ASP.NET 4 nasazený jako podřízený webu služby SharePoint, který obsahuje vlastní úroveň částečné důvěryhodnosti s názvem WSS_Minimal, zobrazí se následující chyba: Could not find permission set named 'ASP.Net'. |
V současné době nejsou žádné verze služby SharePoint kompatibilní s technologií ASP.NET. V důsledku toho byste se neměli pokoušet o spuštění webu ASP.NET 4 jako podřízeného webu služby SharePoint. |
Standardy XHTML 1.1 |
Aby byl umožněn soulad XHTML 1.1 pro nové weby, ovládací prvky technologie ASP.NET v .NET Framework 4 budou generovat kód XHTML 1.1 kompatibilní s HTML. Toto vykreslování je povoleno pomocí následující možnosti v souboru Web.config: <system.Web> <pages controlRenderingCompatibilityVersion="4.0"/> </system.Web> Tato možnost je standardně nastavena na hodnotu 4.0. Webové projekty, které jsou upgradovány na Visual Studio z Visual Studio 2008 budou mít povoleno nastavení 3.5 pro účely kompatibility. |
Žádný |
Zpět na začátek
Jádro
Všeobecné funkce
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
služba CardSpace |
Služba Windows CardSpace již není zahrnuta v prostředí .NET Framework; je poskytována samostatně. |
Stáhněte si službu Windows CardSpace z webu služby Stažení softwaru. |
Konfigurační soubory |
Byly provedeny opravy ve způsobu přístupu systému .NET Framework ke konfiguračním souborům aplikace. |
Pokud se konfigurační soubor vaší aplikace jmenuje Název_aplikace.config, přejmenujte jej na Název_aplikace. exe.config. Přejmenujte například MyApp.config na MyApp.exe.config. |
Kompilátor kódu C# |
Třídy Compiler, CompilerError a ErrorLevel, které byly v oboru názvů Microsoft.CSharp, již nejsou k dispozici a jejich sestavení (cscompmgd.dll) již není zahrnuto v rozhraní .NET Framework. |
Použijte třídu CodeDomProvider a další třídy v oboru názvů System.CodeDom.Compiler. Další informace naleznete v tématu Using the CodeDOM. |
Poskytování hostingových služeb (nespravované API) |
Pro zlepšení možností hostingových služeb, byly zavrhnuty některá API pro aktivaci hostitelských služeb. Vlastnost souběžného spouštění v procesu povoluje aplikaci načtení a spuštění více verzí rozhraní .NET Framework ve stejném procesu. Například můžete ve stejném procesu spouštět aplikace, které načítají doplňky (nebo komponenty) založené na .NET Framework 2.0 SP1 a doplňky, které jsou založeny na .NET Framework 4. Starší komponenty nadále používají starší verzi rozhraní .NET Framework a nové komponenty používají novou verzi rozhraní .NET Framework. |
Použijte konfigurace popsané v proces souběžné spouštění. |
Nový model zabezpečení |
Zásada zabezpečení přístupu kódu (CAS) byla vypnuta a nahrazena zjednodušeným modelem, jak je popsáno v části Změny zabezpečení v rozhraní .NET Framework 4. |
Změny mohou být vyžadovány, pokud jste ve vašich aplikacích závislí na CAS. Další informace naleznete v tématu Kompatibilita a migrace zásad zabezpečení přístupu kódu. |
Zpět na začátek
Datum a čas
Obor názvů: System; sestavení: mscorlib (v knihovně mscorlib.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Letní čas |
Kvůli souladu se systémovými hodinami vlastnosti času (například TimeZoneInfo.Local nebo DateTime.Now) nyní používají pravidla operačního systému pro časové operace letního času místo jiných dat rozhraní .NET Framework. |
Žádný |
Formátování řetězců |
Na podporu formátování, které dodržuje jazykové zvyklosti struktura TimeSpan obsahuje nové přetížení metod ToString, Parse, a TryParse kromě toho, obsahuje nové metody ParseExact a TryParseExact. |
Žádný |
Zpět na začátek
Globalizace
Seznam nových neutrálních a konkrétních jazykových verzí najdete v části Co je nového v globalizaci a lokalizaci.
Obor názvů: System.Globalization; sestavení: mscorlib (v knihovně mscorlib.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Názvy jazykových verzí |
Následující změny názvů ovlivňují německé, divehi a africké jazykové verze:
|
Všimněte si změn názvů jazykových verzí. |
LCID parametr |
Kvůli souladu s očekávaným chováním v nastavení automatizačního serveru modul CLR již nepředává aktuální jazykovou verzi pro parametr LCID nespravovaným aplikacím založeným na modelu COM. Namísto toho předává 1033 (en-us) pro jazykovou verzi. |
Nejsou nutné žádné úpravy s výjimkou nativních aplikací, které vyžadují specifikovanou jazykovou verzi. |
Zastaralé typy jazykových verzí |
Typy jazykových verzí FrameworkCultures a WindowsOnlyCultures jsou nyní zastaralé. Z důvodu zpětné kompatibility FrameworkCultures nyní vrací neutrální a specifické jazykové verze, které byly součástí předchozích verzí rozhraní .NET Framework a WindowsOnlyCultures nyní vrací prázdný seznam. |
Použije jiné hodnoty výčtu CultureTypes. |
Získávání jazykové verze |
Počínaje systémem Windows 7 načítá technologie .NET Framework 4 jazykové verze z operačního systému místo uložení vlastních dat. Kromě toho rozhraní .NET Framework se synchronizuje se systémem Windows za účelem řazení a zapouzdření dat. |
Žádný |
Normy Unicode 5.1 |
Rozhraní .NET Framework nyní podporuje všechny znaky Unicode 5.1 kromě přibližně 1400 znaků. Další znaky zahrnují nové symboly, šipky, diakritická znaménka, interpunkci, matematické symboly, znaky CJK a ideogramy, další malajámské a telugské číselné znaky, stejně jako různé další znaky barmského písma, latinky, arabštiny, řeckého písma, mongolštiny a cyrilice. Kódování Unicode 5.1 podporuje následující nové skripty: sundánské písmo, lepčské písmo, Ol Chiki, Vai, Saurashtra, Kali, Rejang, gurmuchština, urijština, tamilština, telugština, malajámské znaky a Cham. |
Žádný |
Zpět na začátek
Výjimky
Obory názvů: System, System.Runtime.ExceptionServices; sestavení: mscorlib (v knihovně mscorlib.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Výjimky pro poškozený stav procesu |
CLR již dodává výjimky pro poškozený stav procesu do obslužných rutin výjimek ve spravovaném kódu. |
Tyto výjimky ukazují, že stav procesu byl poškozen. Nedoporučujeme spouštět aplikaci v tomto stavu. Další informace naleznete v části HandleProcessCorruptedStateExceptionsAttribute a položce Zpracování výjimek v poškozeném stavu v blogu CLR Inside Out. |
Vyjímky stroje pro spouštění |
ExecutionEngineException je nyní zastaralý, protože zachytitelná výjimka umožní spouštění nestabilního procesu. Tato změna zvyšuje předvídatelnost a spolehlivost v modulu runtime. |
Použijte možnost InvalidOperationException k signalizaci stavu. |
Zpět na začátek
Reflexe
Obor názvů: System.Reflection; sestavení: mscorlib (v knihovně mscorlib.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Hash algoritmy pro sestavení |
Vlastnost AssemblyName.HashAlgorithm nyní vrátí hodnotu AssemblyHashAlgorithm.None, protože běh nezná algoritmus hash z odkazovaného sestavení při načtení sestavení. (Tato položka odkazuje na použití vlastnosti v odkazované sestavě, jako je například ta, která byla vrácena metodou Assembly.GetReferencedAssemblies.) |
Žádný |
Načítání sestavení |
Aby se zabránilo redundantnímu načítání sestavení a aby byl uložen virtuální adresový prostor, CLR nyní načte sestavení pouze pomocí funkce Win32 MapViewOfFile. Nadále nevolá funkci LoadLibrary. Tato změna ovlivní diagnostické aplikace v následujících ohledech:
|
Žádný |
Deklarování typu |
Vlastnost Type.DeclaringType nyní správně vrátí hodnotu null, pokud typ nemá deklarující typ. |
Žádný |
Delegáti |
Delegování nyní zahodí výjimku ArgumentNullException místo NullReferenceException, když je do konstruktoru delegáta předána hodnota null. |
Zajistit, že jakékoli zpracování výjimky zachytí ArgumentNullException. |
Změna umístění globální mezipaměti sestavení (GAC) |
Pro sestavení rozhraní .NET Framework 4 byla globální mezipaměť sestavení přesunuta z adresáře systému Windows (%WINDIR%) do podadresáře Microsoft.Net (%WINDIR%\Microsoft.Net). Sestavení z dřívějších verzí zůstanou ve starším adresáři. Nespravovaný výčet ASM_CACHE_FLAGS obsahuje nový příznak ASM_CACHE_ROOT_EX. Tento příznak získá umístění mezipaměti pro sestavení .NET Framework 4, které lze získat pomocí funkce GetCachePath. |
Žádné, za předpokladu, že aplikace nepoužívají explicitní cesty k sestavením, což není doporučený postup. |
Nástroj globální mezipaměti sestavení |
Gacutil.exe (Global Assembly Cache Tool) již nepodporuje prohlížeč zásuvných modulů. |
Žádný |
Vzájemná spolupráce
Obor názvů: System.Runtime.InteropServices; sestavení: mscorlib (v knihovně mscorlib.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Velikost vyrovnávací paměti (nespravované API) |
Z důvodu úspory paměti byla funkce parametru pBufferLengthOffset pro metodu ICorProfilerInfo2::GetStringLayout změněna tak, že je shodná s parametrem pStringLengthOffset. Oba parametry nyní směřují na místo posunu délky řetězce. Velikost vyrovnávací paměti byla odebrána z reprezentace třídy řetězce. |
Odebrat všechny závislosti na velikost vyrovnávací paměti. |
Ladění JIT |
Ladicí program rozhraní .NET Framework pro zjednodušení registrace pro JIT ladění nyní používá pouze klíč registru AeDebug, který řídí chování JIT ladění pro nativní kód. Výsledky této změny jsou následující:
|
Nastavte operace ladění podle potřeby. |
Volání nespravovaného kódu |
Pro zvýšení výkonu ve vzájemné funkční spolupráci s nespravovaným kódem všechna nesprávná volání konvencí ve volání nespravovaného kódu nyní způsobí selhání aplikace. V dřívejších verzích tyto chyby řešila vrstva na logicky vyšší úrovni. |
Ladění aplikací ve službě Microsoft Visual Studio 2010 vás na tyto chyby upozorní, takže je můžete opravit. Používáte-li binární soubory, které nelze aktualizovat, můžete zahrnout element <NetFx40_PInvokeStackResilience> do konfiguračního souboru aplikace pro povolení volání řešení chyb do zásobníku jako v předchozích verzích. Nicméně může dojít k ovlivnění výkonu vaší aplikace. |
Odebraná rozhraní (nespravované API) |
Aby se zabránilo zmatení vývojářů, byla odebrána následující rozhraní, protože neposkytla žádné užitečné scénáře doby běhu a modul CLR neposkytl ani neakceptoval jakékoli implementace:
|
Žádný |
Zpět na začátek
Data
Tato část popisuje problémy s migrací pro používání datových sad a klientů SQL, rozhraní Entity Framework, LINQ to SQL a datových serverů WCF (dříve známých jako datové služby ADO.NET).
Datová sada a klient SQL
Následující tabulka popisuje vylepšení funkcí, které měly dříve omezení nebo jiné problémy.
Obory názvů: System.Data, System.Data.Objects.DataClasses, System.Data.SqlClient; sestavení: System.Data (v knihovně System.Data.dll), System.Data.Entity (v knihovně System.Data.Entity.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Scénáře POCO |
Rozhraní System.Data.Objects.DataClasses.IRelatedEnd má nové metody zlepšení použitelnosti ve scénářích POCO (Plain Old CLR Object). Tyto nové metody berou jako parametr entitu Object místo IEntityWithRelationships. |
Úpravy řádků |
Metoda IndexOf, jak je implementována třídou DataView, nyní správně vrátí hodnotu řádku, který je upravován, namísto vrácení hodnoty -1. |
Události |
Událost DataRowView.PropertyChanged je nyní aktivována, když je řádek ve změněném stavu a když je vyvolána metoda RejectChanges. Tato změna umožňuje snáze vytvářet ovládací prvky uživatelského rozhraní, které zprostředkovávají obsah objektu DataSet. |
Výjimky |
Metoda Prepare nyní vyvolá výjimku InvalidOperationException, pokud není připojení nastaveno nebo otevřeno, namísto výjimky NullReferenceException. |
Zobrazení mapování |
Chyby mapování zobrazení dotazu jsou nyní zachyceny v době návrhu namísto vyvolání NullReferenceException v době běhu. Mapování ověření nyní zachytí chyby, v nichž jsou dvě sady přidružení v konceptuálním schématu (CSDL) mapovány na stejný sloupec. |
Transakce |
Pokud se aplikace pokusí o provedení příkazu v rámci připojení po dokončení transakce (včetně přerušených transakcí nebo transakcí vrácených zpět), výjimka InvalidOperationException nebude vyvolána. Předchozí verze nevyvolaly výjimku a umožňují spouštět další příkazy, i v případě, že transakce byla přerušena. |
Zpět na začátek
Entity Framework
Následující tabulka popisuje vylepšení funkcí, které měly dříve omezení nebo jiné problémy.
Obory názvů: System.Data, System.Data.Objects, System.Data.Objects.DataClasses; sestavení: System.Data.Entity (v knihovně System.Data.Entity.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Objekty entity |
Nyní existuje parita mezi metodou ObjectContext.Detach a stavem objektu entity, když je volána metoda ObjectContext.SaveChanges. Tato vylepšená konzistence brání vzniku neočekávaných výjimek. |
Entity SQL |
Pravidla byla vylepšena pro rozlišení identifikátoru v Entity SQL. Analyzátor Entity SQL zlepšil logiku pro řešení vícedílných identifikátorů . |
Strukturální poznámky |
Rozhraní Entity Framework nyní rozpoznává strukturální poznámky. |
Dotazy |
V dotazech byla provedena následující vylepšení:
|
Zpět na začátek
Dotaz LINQ to SQL
Následující tabulka popisuje vylepšení funkcí, které měly dříve omezení nebo jiné problémy.
Obor názvů: System.Data.Linq; sestavení: System.Data.Linq (v knihovně System.Data.Linq.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Události |
Kolekce System.Data.Linq.EntitySet<TEntity> nyní vyvolá událost ListChanged pro přidání a odstranění operací, pokud není načtena kolekce EntitySet<TEntity> (navíc k situaci, kdy je událost vyvolána, když kolekce načtena je). |
Dotazy |
Skip(0) již není ignorován v dotazech LINQ to SQL. V důsledku toho se dotazy, které mají tuto metodu, mohou chovat jinak. Například v některých případech je nutná klauzule OrderBy s prvkem Skip(0) a dotaz nyní vyvolá výjimku NotSupportedException, pokud klauzule OrderBy nebude zahrnuta. |
Zpět na začátek
WCF Data Services
Následující tabulka popisuje vylepšení funkcí, které měly dříve omezení nebo jiné problémy.
Obory názvů: System.Data.Services, System.Data.Services.Client, System.Data.Services.Common, System.Data.Services.Providers; sestavení: System.Data.Services (v knihovně System.Data.Services.dll), System.Data.Services.Client (v knihovně System.Data.Services.Client.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Dávkový binární obsah |
Datové služby WCF nyní podporují dávkový binární obsah v žádostech a odpovědích. |
Změnit zachycování dotazů |
Změna zachycovacích dotazů se nyní provádí u požadavku na odstranění. Změna interceptoru je metoda, která se spustí pokaždé, když server přijme požadavek na změnu entity v sadě entit. Spustí se před provedením příchozího požadavku. Zachycování dotazů poskytuje přístup k entitě, která je měněna, a operaci, která na ní probíhá. |
Výjimky |
Následující podmínky nyní vyvolají užitečnější výjimky místo NullReferenceException:
V aplikacích byste měli změnit zpracování výjimek, aby bylo možné zachytit nové výjimky. |
Záhlaví |
V záhlaví byla provedena následující vylepšení:
|
Čtečka JSON |
Čtečka JavaScript Object Notation (JSON) nyní správně vrátí chybu při čtení jednoho ukončovacího znaku zpětného lomítka („\“) při zpracování datových částí JSON odeslaných na datovou službu WCF. |
Sloučí |
Ve výčtu MergeOption byla provedena následující vylepšení:
|
Požadavky |
Metoda DataService<T>.OnStartProcessingRequest je nyní vyvolána před zpracováním požadavku na datové služby. To umožňuje žádosti správně pracovat u služeb ServiceOperation. |
Datové proudy |
Datové služby WCF již neukončují základní proud pro operace čtení a zápisu. |
identifikátory URI |
Uvozovací znaky identifikátoru URI klienta datových služeb WCF byly opraveny. |
Windows Communication Foundation (WCF)
Následující tabulka popisuje vylepšení funkcí, které měly dříve omezení nebo jiné problémy.
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Konfigurační soubory |
Chcete-li povolit dědičnost chování prostřednictvím konfigurační hierarchie souboru, WCF nyní podporuje sloučení napříč konfiguračními soubory. Model dědičnosti konfigurace je nyní rozšířen, čím uživatelům umožňuje definovat chování, které bude použito na všechny služby, které jsou v počítači spuštěny. Ke změnám chování může dojít, nachází-li se chování se stejným názvem v různých úrovních hierarchie. |
Hostování služby |
Již nemůžete zadat konfigurační element <serviceHostingEnvironment> na úrovni služby přidáním atributu allowDefinition="MachineToApplication" do definice elementu. Určení elementu <serviceHostingEnvironment> na úrovni služby je technicky nesprávné a způsobuje nekonzistentní chování. |
Zpět na začátek
Windows Presentation Foundation (WPF)
Aplikace
Obory názvů: System.Windows, System.Windows.Controls; sestavení: PresentationFramework (v knihovně PresentationFramework.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Zpracovávání výjimek |
Aby bylo možné chyby zjistit dříve, WPF vloží TargetInvocationException a nastaví vlastnost InnerException na kritické výjimky, jako například NullReferenceException, OutOfMemoryException, StackOverflowException a SecurityException, namísto zachycení původní výjimky. |
Žádný |
Propojené prostředky |
Pro účely snazšího propojení používají zdrojové soubory (například obrázky), které jsou umístěny jinde než struktura složek projektu, úplnou cestu zdrojového souboru namísto pouhého názvu souboru jako ID zdroje, když je aplikace vytvářena. Aplikace bude schopna najít soubory v době běhu. |
Žádný |
Aplikace s částečnou důvěryhodností |
Z bezpečnostních důvodů aplikace založené na systému Windows, spuštěné v režimu částečné důvěryhodnosti a obsahující ovládací prvek WebBrowser nebo ovládací prvek Frame, který obsahuje protokol HTML, vyvolají při vytvoření ovládacího prvku výjimku SecurityException. Pokud budou splněny všechny následující podmínky, aplikace prohlížeče vyvolají výjimku a zobrazí zprávu:
Všimněte si, že aplikace spouštěné z důvěryhodných webů nebo z intranetové zóny nebudou ovlivněny. |
V aplikacích prohlížeče můžete tuto změnu zmírnit jedním z následujících úkonů:
|
Slovníky prostředků |
Pro účely zlepšení zdrojových slovníků na úrovni motivu a zabránění provádění změn v nich, jsou zmrazitelné zdroje, definované ve zdrojovém slovníku a sloučené do slovníku na úrovní motivu, vždy označeny jako zmrazené a jsou neměnné. Toto je očekávané chování zmrazitelných zdrojů. |
Aplikace, které mění zdroj definovaný ve sloučeném slovníku na úrovni motivu, by měly klonovat zdroj a upravit klonované kopie. Alternativně může být zdroj označen jako x:Shared="false" tak, aby systém ResourceDictionary vytvořil novou kopii při každém zadání dotazu na zdroj. |
Windows 7 |
Aby aplikace WPF pracovaly lépe v systému Windows 7, byly provedeny následující opravy chování okna:
|
Žádný |
Styl a průhlednost systému Windows |
Výjimka InvalidOperationException je zahozena, pokud se pokusíte nastavit WindowStyle na jinou hodnotu než None, když je AllowsTransparency true a WindowState je Minimized. |
Pokud je nutné změnit entitu WindowStyle když má vlastnost AllowsTransparency hodnotu true, můžete volat funkci Win32 SetWindowLongPtr. |
Prohlížeč XPS |
WPF neobsahuje balíček Microsoft XML Paper Specification Essentials Pack (XPSEP). Balíček XPSEP je obsažen v systému Windows 7 a Windows Vista. V počítači se systémem Windows XP bez nainstalované aplikace .NET Framework 3.5 SP1 bude tisk pomocí rozhraní API WPF jiného než v PrintDialog spoléhat na WINSPOOL. Některé funkce tiskárny nebudou hlášeny a některá nastavení tiskárny se při tisku neprojeví. |
Bude-li to třeba, nainstalujte balíček Microsoft XML Paper Specification Essentials Pack. |
Zpět na začátek
Ovládací prvky
Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input; sestavení: PresentationFramework (v knihovně PresentationFramework.dll), PresentationCore (v knihovně PresentationCore.dll), WindowsBase (v knihovně WindowsBase.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Dialogová okna |
Pro zlepšení spolehlivosti je metoda CommonDialog.ShowDialog vyvolána ve stejném podprocesu, který vytvořil ovládací prvek Microsoft.Win32.FileDialog. |
Nezapomeňte vytvořit ovládací prvek FileDialog a volejte metodu ShowDialog ve stejném podprocesu. |
Plovoucí okna |
Aby bylo opraveno zaměření logiky obnovení, která nesprávně aktivuje plovoucí okno (takže vypadá jako modální dialogové okno), zaměření obnovení je nyní zabráněno, pokud uchazeč není podřízenou položkou okna. |
Žádný |
Položky v kolekcích |
Když je položka přesunuta nebo přidána do základní kolekce, objeví se v CollectionView ve stejném relativním umístění, pokud CollectionView není seřazena. To poskytuje konzistenci mezi pozici položky v kolekci a v souvisejícím CollectionView. |
Použijte metodu ItemContainerGenerator.ContainerFromItem nebo CollectionView.IndexOf ke zjištění umístění položky v CollectionView namísto spoléhání se na pevné umístění položky. |
Rozložení |
Aby bylo eliminováno zbytečné opětovné rozložení, změna Page.ShowsNavigationUI již neznehodnotí rozložení ani nezpůsobí další předání rozložení. |
Pokud očekáváte, že změna elementu ShowsNavigationUI způsobí další průběh rozložení, volejte po nastavení vlastnosti funkci UIElement.InvalidateVisual. |
Nabídky |
Aby mohl být povolen text ClearType v kontextových nabídkách, byly provedeny úpravy třídy ControlTemplate a ovládacího prvku MenuItem a dalších ovládacích prvků. |
Aplikace by se neměly spoléhat na vizuální strukturu šablon ovládacího prvku. Pouze pojmenované části ControlTemplate jsou součástí veřejné zakázky. Pokud aplikace potřebuje najít určitý objekt v entitě ControlTemplate, vyhledejte ve vizuálním stromu konkrétní typ namísto spoléhání se na pevné umístění objektu ve stromu. |
Navigace |
Pokud entita Frame přímo navádí na umístění, vlastnost IsNavigationInitiator má po počáteční navigaci hodnotu true. Tato změna zabrání spuštění dalších událostí během spuštění scénářů. |
Žádný |
Automaticky otevíraná okna |
Delegát CustomPopupPlacementCallback může být nyní vyvolán víckrát během předání rozloženi, ne jen jednou. |
Jestliže váš delegát CustomPopupPlacementCallback vypočítává pozici entity Popup na základě její předchozí pozice, provádějte přepočítání pozice, pouze pokud se změní hodnoty parametru popupSize, targetSize nebo offset. |
Hodnoty vlastnosti |
Metoda DependencyObject.SetCurrentValue nyní umožňuje nastavit vlastnost na efektivní hodnotu, ačkoli nadále respektuje jakékoliv vazby, styl nebo aktivační události, která mají na vlastnost vliv. |
Autoři ovládacího prvku by měli použít SetCurrentValue pokaždé, když se hodnota vlastnosti změní jako vedlejší účinek některé jiné činnosti, včetně manipulace uživatele. |
Textová pole |
Metody TextBoxBase.Copy a TextBoxBase.Cut z bezpečnostních důvodů bez upozornění selžou v případě, že jsou volány s částečnou důvěryhodností. Kromě toho bude programové spouštění vlastnosti ApplicationCommands.Copy nebo ApplicationCommands.Cut ovládacího prvku, který dědí z elementu TextBoxBase, v režimu částečné důvěryhodnosti blokováno. Uživatelem inicializované příkazy kopírování a vyjmutí, jako například kliknutí na tlačítko, jehož vlastnost ButtonBase.Command je vázána na jeden z těchto příkazů, však fungovat budou. Standardní kopie a vyjmutí prostřednictvím klávesových zkratek a místních nabídek budou stále fungovat jako dříve ve vztahu částečné důvěryhodnosti. |
Vytvořte vazbu příkazu ApplicationCommands.Copy nebo ApplicationCommands.Cut na akci vyvolanou uživatelem, jako je například kliknutí na tlačítko. |
Zpět na začátek
Grafika
Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Media.Effects; sestavení: PresentationFramework (v knihovně PresentationFramework.dll), PresentationCore (v knihovně PresentationCore.dll), WindowsBase (v knihovně WindowsBase.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Rastrové efekty |
Pro účely zvýšení výkonu třída BitmapEffect a třídy, které dědí od třídy BitmapEffect byly zakázány, i když jsou stále přítomny Výsledek provede vykreslení pomocí kanálu hardwarově urychleného vykreslení, pokud jsou splněny následující podmínky:
Pokud tyto podmínky nejsou splněny, objekt BitmapEffect nebude mít žádný účinek. Ovládací prvky Visual Studio 2010 navíc vytvoří upozornění kompilátoru při zjištění objektu nebo podtřídy BitmapEffect. Metoda PushEffect je označena jako zastaralá. |
Ukončete používání zastaralých odvozených tříd BitmapEffect a místo toho použijte nové třídy odvozené ze systému Effect: BlurEffect, DropShadowEffect a ShaderEffect. Můžete také vytvořit vlastní efekty pomocí dědění z třídy ShaderEffect. |
Rastrové snímky |
Klonované objekty BitmapFrame nyní získávají události DownloadProgress, DownloadCompleted a DownloadFailed. To umožňuje, aby obrázky stažené z webu a použité v ovládacím prvku Image prostřednictvím Style pracovaly správně. Změnu v chování uvidíte pouze v případě, že jsou splněny všechny následující příkazy:
|
Zkontrolujte odesílatele v obslužné rutině události a proveďte nějakou akci pouze v případě, že je odesílatel původní BitmapFrame. |
Dekódování obrázků |
Aby se zabránilo tomu, že IOException bude zpracován, když nelze obrazy dekódovat, třída BitmapSource vyvolá událost DecodeFailed, když nelze obraz dekódovat. |
Odeberte všechna zpracování výjimek pro IOException a použijte událost DecodeFailed ke kontrole selhání dekódování. |
Zpět na začátek
Vstup
Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input; sestavení: PresentationFramework (v knihovně PresentationFramework.dll), PresentationCore (v knihovně PresentationCore.dll), WindowsBase (v knihovně WindowsBase.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Instance příkazu vytvoření vazby |
Aby byl poskytnut mechanismus pro vazbu instancí příkazu založeného na zobrazení modelu na vstupní gesta založená na zobrazení, třída InputBinding nyní dědí z Freezable namísto DependencyObject. Následující vlastnosti jsou nyní vlastnostmi závislostí: Výsledky této změny jsou následující:
|
Vytvořte samostatné instance třídy InputBinding v samostatných podprocesech, pokud mají být vazby vzájemné. V opačném případě je zmrazte. Neprovádějte statickou metodu na úrovni třídy InputBinding poté, co byla zaregistrována. |
Aplikace prohlížeče |
Aplikace prohlížeče WPF (.XBAP) nyní zpracovávají klíčové události jako samostatné aplikace WPF aplikací, aby objekty přijímaly směrované klíčové události ve správném pořadí. |
Žádný |
Kombinace znaménkové klávesy |
WPF zastírá mrtvé klávesy, které nevytvářejí viditelné znaky, ale místo toho ukazuje, že klávesa má být kombinována s další klávesou s písmenem, aby byl vytvořen jeden znak. Událost klávesy vstupu, jako například událost KeyDown, oznámí, že je klávesa znaménkovou klávesou, díky nastavení vlastnosti Key na hodnotu DeadCharProcessed. To je obvykle očekávané chování, protože aplikace obvykle nemají v úmyslu reagovat na vstup klávesnice, který vytváří kombinované znaky. |
Aplikace, které očekávají čtení klíčů, které byly součástí kombinovaných znaků, mohou získat již zastaralý klíč pomocí vlastnosti DeadCharProcessedKey. |
Správce zaměření |
Když je metodě FocusManager.GetFocusedElement předán element, který má připojenu vlastnost IsFocusScope nastavenou na hodnotu true, metoda vrátí element, který je posledním elementem zaměřeným na klávesnici v rámci zaměření oboru, pouze v případě, že vrácený element patří do stejného objektu PresentationSource jako prvek, který byl předán metodě. |
Žádný |
Zpět na začátek
Automatizace UI
Obor názvů: System.Windows, System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.Data, System.Windows.Input; sestavení: PresentationFramework (v knihovně PresentationFramework.dll), PresentationCore (v knihovně PresentationCore.dll), UIAutomationProvider (v knihovně UIAutomationProvider.dll), WindowsBase (v knihovně WindowsBase.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Hierarchie tříd zobrazení |
Třída TreeViewAutomationPeer a TreeViewItemAutomationPeer dědí od ItemsControlAutomationPeer namísto FrameworkElementAutomationPeer. |
Pokud použijete dědičnost ze tříd TreeViewItemAutomationPeer a přepíšete metodu GetChildrenCore, zvažte vrácení objektu, který bude dědit z nové třídy TreeViewDataItemAutomationPeer. |
Kontejnery mimo obrazovku |
Aby byla opravena nesprávná vrácená hodnota, metoda UIElementAutomationPeer.IsOffscreenCore nyní správně vrátí hodnotu false pro kontejnery položky, které se posunuly mimo zobrazení. Také hodnota metody není ovlivněna uzavřeními ostatními okny nebo skutečností, zda je element viditelný na konkrétním monitoru. |
Žádný |
Nabídky a podřízené objekty |
Aby mohla být povolena automatizace UI nabídek, které obsahují podřízené položky jiné než objekty MenuItem, metoda GetChildrenCore nyní vrátí objekt AutomationPeer podřízeného objektu, UIElement namísto objektu MenuItemAutomationPeer. |
Žádný |
Nová rozhraní a sestavení |
Chcete-li povolit nové funkce pro automatizaci UI, byla přidána následující rozhraní: |
Jakýkoli projekt, který vytváří protějšky automatizace WPF, musí přidat explicitní odkaz na UIAutomationProvider.dll. |
Náhledy |
Metoda GetClassNameCore vrátí hodnotu namísto null. Proto ovládací prvky jako GridSplitter, které dědí ze třídy Thumb ohlásí název modelu UI Automation. |
Žádný |
Virtualizované elementy |
Pro zvýšení výkonu metoda UIElementAutomationPeer.GetChildrenCore vrací pouze podřízené objekty, které jsou ve skutečnosti ve vizuálním stromu, namísto všech podřízených objektů, bez ohledu na to, zda jsou virtualizovány. |
Použijte ItemContainerPattern k iterování všech položek ItemsControlAutomationPeer. |
Zpět na začátek
XAML
Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Markup; sestavení: PresentationFramework (v knihovně PresentationFramework.dll), PresentationCore (v knihovně PresentationCore.dll), WindowsBase (v knihovně WindowsBase.dll)
Funkce |
Rozdíly od 3.5 SP1 |
Doporučené změny |
---|---|---|
Rozšíření kódu |
WPF nyní správně vždy používá hodnotu z metody MarkupExtension.ProvideValue namísto vrácení objektu MarkupExtension v určitých případech, kdy je přípona značky používána k nastavení vlastnosti nebo k vytvoření položky v kolekci. Přípona označení může v některých případech vrátit sebe samu. |
Pokud vaše aplikace přistupuje k prostředku, který v dřívějších verzích vracel objekt MarkupExtension, použijte odkaz na objekt, který byl vrácen funkcí ProvideValue místo objektu MarkupExtension. |
Atributy analýzy |
Atributy v souboru XAML mohou mít nyní pouze jednu tečku. Platné jsou například následující příklady: <Button Background="Red"/> (bez teček) <Button Button.Background = "Red"/> (jedna tečka) Už neplatí: <Button Control.Button.Background = "Red"/> (více teček) |
Správné atributy XAML, které obsahují více než jednu tečku. |
Zpět na začátek
jazyk XML
Řádky v této tabulce popisují vylepšení funkcí, které měly dříve omezení nebo jiné problémy.
Schéma a transformace
Obory názvů: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath; sestavení: System.Xml (v knihovně System.Xml.dll), System.Xml.Linq (v knihovně System.Xml.Linq.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Schémata Chameleon |
Aby se zabránilo poškození dat, schémata chameleon jsou nyní klonována správně, když jsou součástí více schémat. Schémata Chameleon jsou taková schémata, která nemají cílový obor názvů, a jsou-li zahrnuty do jiného souboru XSD, převezmou cílový obor názvů importujícího schématu. Používají se často k zahrnutí běžných typů do schématu. |
Funkce ID |
Id funkce XLST nyní vrátí správnou hodnotu místo hodnoty null, když je objekt XmlReader předán do transformace XLST. Pokud uživatel vytvořil objekt XmlReader ze třídy LINQ to XML pomocí metody CreateReader a tento objekt XmlReader byl předán souboru XSLT, všechny instance funkce id v souboru XSLT dříve vracely hodnotu null. Toto není povolená vrácená hodnota pro funkci id. |
Atribut Obor názvů |
Aby se zabránilo poškození dat, objekt XPathNavigator teď vrací místní název atributu x:xmlns správně. |
Deklarace oboru názvů |
Objekt XmlReader v podstromu již nevytváří duplicitní deklarace oboru názvů v rámci jednoho elementu XML. |
Ověření schématu |
Aby se zabránilo chybnému ověření schématu, třída XmlSchemaSet umožňuje schématům XSD správnou a konzistentní kompilaci. Tato schémata mohou zahrnovat jiná schémata; například A.xsd může obsahovat B.xsd, které může obsahovat C.xsd. Kompilace jedné z těchto položek způsobí, že tento graf závislostí lze procházet. |
Funkce skriptování |
Funkce dostupné funkce již nesprávně vrací false, když je funkce skutečně k dispozici. |
identifikátory URI |
Metoda XElement.Load nyní vrátí správné dotazy BaseURI in LINQ. |
Zpět na začátek
Ověření
Obory názvů: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath; sestavení: System.Xml (v knihovně System.Xml.dll), System.Xml.Linq (v knihovně System.Xml.Linq.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Překladače oboru názvů |
Metoda XmlReader.ReadContentAs již neignoruje jí předaný překladač IXmlNamespaceResolver. V dřívejších verzích byl určený překladač oboru názvů ignorován a byl místo něj použit překladač XmlReader. |
Mezera |
Aby se zabránilo ztrátě dat při vytváření čtenáře, metoda XmlReader.Create již neodstraňuje významné prázdné znaky. Ověření kódu XML uznává režim pro smíšený obsah, kde může být míchán text s kódem XML. Ve smíšeném režimu jsou všechny prázdné znaky významné a měly by být hlášeny. |
Zpět na začátek
Zápis
Obory názvů: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath; sestavení: System.Xml (v knihovně System.Xml.dll), System.Xml.Linq (v knihovně System.Xml.Linq.dll)
Funkce |
Rozdíly od 3.5 SP1 |
---|---|
Odkazy na entity |
Aby se zabránilo poškození dat, nejsou již odkazy na entity vytvářeny dvakrát v atributech XML. Pokud se uživatel pokusil zapsat entitu do atributu xmlns nebo do atributu xml:lang či xml:space pomocí metody WriteEntityRef, entita byla ve výstupu převedena na entitu dvakrát, čímž došlo k poškození dat. |
Zpracování nového řádku |
Aby se zabránilo poškození dat, objekty XmlWriter respektují možnost None. |
Zpět na začátek
Viz také
Koncepty
Novinky v rozhraní .NET Framework 4
Přenesení Office „14“ Solutions na rozhraní .NET Framework 4
Další zdroje
Průvodce migrací do rozhraní .NET Framework 4
Kompatibilita verzí v rozhraní .NET Framework
Co je zastaralé v rozhraní .NET Framework
Nové typy a členové v rozhraní .NET Framework 4
Otázky ohledně migrace pro aplikace rozhraní .NET Framework 4: Beta 2 na RTM
Historie změn
Datum |
Historie |
Důvod |
---|---|---|
Srpen 2010 |
Byla přidána otázka o hostování ovládacích prvků webového prohlížeče, tříd kompilátoru a CodeDOM a prohlížeče mezipaměti globálního sestavení. |
Rozšíření informace |