Sdílet prostřednictvím


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í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í prvek Image a ImageButton již nevykresluje atribut border="0".

  • Třída BaseValidator a ovládací prvky ověřování, které jsou z ní odvozeny, již nebudou ve výchozím nastavení vykreslovat červený text.

  • Ovládací prvek HtmlForm nevykreslí atribut name.

  • Ovládací prvek Table již vykresluje atribut border="0".

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í:

  • Stránka ASPX je odeslána do prohlížeče s atributem form elementu action nastaveným na hodnotu "".

  • Formulář je odeslán zpět do prostředí ASP.NET.

  • Spravovaný modul HTTP čte určitou část těla entity, jako například Request.Form nebo Request.Params. To způsobí, že se tělo entity žádosti POST načte do spravované paměti. V důsledku toho není obsah entity nadále k dispozici pro jakékoli moduly nativního kódu modulů, které jsou spuštěny v režimu služby IIS 7 nebo v integrovaném režimu služby IIS 7.5.

  • Objekt IIS DefaultDocumentModule se nakonec spustí a vytvoří podřízený požadavek na dokument Default.aspx. Protože však již bylo tělo entity přečteno kusem spravovaného kódu, není k dispozici žádné tělo entity k odeslání k podřízenému požadavku.

  • Když je kanál HTTP spuštěn pro podřízený požadavek, obslužná rutina pro soubory .aspx se spustí během fáze spuštění obslužné rutiny.

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:

  • Metoda HtmlEncode kóduje instance jednoduchých uvozovek jako &#39;

  • Metoda UrlEncode kóduje instance jednoduchou uvozovku jako %27.

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.

  • Pokud technologie ASP.NET 4 není pro funkci webu nutná, přemapujte web pro použití technologie ASP.NET 2.0.

    -nebo-

  • Pokud je technologie ASP.NET 4 nutná pro funkci webu, přesuňte všechny podřízené virtuální adresáře ASP.NET 2.0 na jiný web, který je namapován na technologii ASP.NET 2.0.

    -nebo-

  • Zakažte adresy URL bez přípony. Další informace naleznete v části „Aplikace technologie ASP.NET 2.0 mohou generovat chyby HttpException odkazující na soubor eurl.axd“ v dokumentu ASP.NET 4 – nejnovější změny na webu ASP.NET.

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ámkaPozná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í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ář.

  • Na stránce Vlastnosti pro web založený na souborech změňte atribut Virtuální cesta na "/".

    -nebo-

  • Vytvořte projekt webové aplikace místo projektu webu. Projekty webové aplikace tento problém nemají a směrování adres URL funguje i v případě, že složka projektu má v názvu tečku.

    -nebo-

  • Vytvořte web založených na protokolu HTTP, který je hostovaný ve službě IIS. Weby hostované službou IIS mohou obsahovat tečky ve virtuální cestě i ve složce souborů projektu.

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:

  • CurrencyEnglishName: Název měny pro německou (Švýcarsko) (de-CH) jazykovou verzi se změnil z „sFr.“ na „FN“.

  • LongDatePattern: Dlouhý vzor data jazykové verze Divehi (Maledivy) (dv-MV) se změnil z „dd/MMMM/rrrr“ na „dd/MM/rrrr“.

  • PMDesignator: P.M. označení jazykové verze Afrikánština (Jižní Afrika) (af-ZA) se změnilo z nm na PM.

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:

  • ProcessModuleCollection nebude nadále obsahovat všechny moduly z knihovny tříd (.dll soubor) získané z volání Process.GetCurrentProcess().Modules.

  • Aplikace Win32, které používají funkci EnumProcessModules nezobrazí všechny spravované moduly, které jsou uvedeny.

Žá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í:

  • Již není nutné registrovat dva odlišné ladící programy, jeden pro spravovaný a jeden pro nativní kód.

  • Nadále již není nutné spouštět ladicí program automaticky pro neinteraktivní proces, ale je možné vyzvat uživatele k interaktivnímu procesu.

  • Již nebudete upozorňování, když se spuštění ladicího programu nezdaří, nebo když není registrován ladící program, který by měl být spuštěn.

  • Automaticky spouštěné zásady, které závisí na interaktivitě aplikace již nejsou podporovány.

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:

  • INativeImageINativeImageDependency

  • INativeImageInstallInfo

  • INativeImageEvaluate

  • INativeImageConverter

  • ICorModule

  • IMetaDataConverter

Žá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í:

  • Dotaz GroupBy používající klíč null v prázdné kolekci nevrátí žádné řádky bez ohledu na to, zda v dotazu existují další výběry.

  • Vygenerované dotazy SQL in LINQ a Entity-SQL nyní standardně zpracovávají parametry řetězců jako hodnoty s jiným kódováním než Unicode.

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í:

  • Datové služby WCF nyní správně odmítají hlavičku eTag s nespecifikovanou hodnotou.

  • Datové služby WCF nyní vrátí chybu a neprovedou žádost o odstranění propojení, když je v žádosti hlavička if-*.

  • Datové služby WCF nyní vrátí chybu klientovi ve formátu (Atom, JSON), který klient určil v hlavičce Accept.

Č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í:

  • Možnost slučování AppendOnly již neupravuje entitu na straně klienta při každé následné reakci od datové služby.

  • Možnost PreserveChanges je nyní konzistentní mezi dynamickými aktualizacemi SQL a aktualizacemi uloženými na základě postupu.

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:

  • Aplikace je spuštěna v aplikaci Firefox.

  • Aplikace je spuštěna v vztahu částečné důvěryhodnosti v zóně Internet z jiného nedůvěryhodného webu.

  • Aplikace obsahuje ovládací prvek WebBrowser nebo Frame, který obsahuje kód HTML.

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ů:

  • Spusťte aplikaci prohlížeče s úrovní úplné důvěryhodnosti.

  • Vyzvěte zákazníka k přidání serveru aplikace do zóny důvěryhodných serverů.

  • Vyzvěte zákazníka ke spuštění aplikace v aplikaci Internet Explorer.

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:

  • Stavy dokování a gesta nyní fungují očekávaným způsobem na základě interakcí uživatele.

  • Příkazy hlavního panelu Okna na sebe, Zobrazit okna nad sebou a Zobrazit okna vedle sebe se nyní chovají správně a aktualizují odpovídající vlastnosti.

  • Vlastnosti Top, Left, Width a Height pro maximalizované nebo minimalizované okno nyní obsahují umístění pro správné obnovení okna namísto jiných hodnot (v závislosti na monitoru).

Žá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:

  • Aplikace používá DropShadowBitmapEffect nebo BlurBitmapEffect, která má vlastnost poloměru nastavenu na méně než 100 DIU.

  • Grafická karta v počítači, ve kterém aplikace běží, podporuje funkci pixel shader 2.0.

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í:

  • Objekt InputBinding je nyní zmražen, když je registrována místo zbývající měnitelné hodnoty.

  • Nelze přistupovat k objektům InputBinding na úrovni instance z více vláken kvůli omezením třídy DependencyObject.

  • Vstupní vazby na úrovni třídy nelze mutovat po jejich registraci, a to kvůli omezením třídy Freezable.

  • Nelze zadat vstupní vazby na instance příkazu, které jsou vytvářeny v zobrazení modelu.

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