Sdílet prostřednictvím


Problémy s migrací rozhraní .NET Framework 4

Tento článek popisuje problémy s migrací mezi rozhraním .NET Framework verze 3.5 Service Pack 1 a rozhraním .NET Framework verze 4, včetně oprav, změn dodržování standardů a zabezpečení a změn na základě zpětné vazby zákazníků. Většina těchto změn nevyžaduje žádné změny programování ve vašich aplikacích. U těch, které můžou zahrnovat úpravy, najdete ve sloupci Doporučené změny tabulky. Významné změny jsou rozděleny podle oblasti, například ASP.NET a Windows Presentation Foundation (WPF).

Přehled problémů v tomto článku najdete v průvodci migrací na rozhraní .NET Framework 4.

Informace o nových funkcích naleznete v tématu Co je nového v rozhraní .NET Framework 4.

ASP.NET a web

Obory názvů: System.Web, System.Web.Mobile, System.Web.Security, System.Web.UI.WebControls

Sestavení: System.Web (v System.Web.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Definiční soubory prohlížeče Soubory definic prohlížeče byly aktualizovány tak, aby obsahovaly informace o nových a aktualizovaných prohlížečích a zařízeních. Starší prohlížeče a zařízení, jako je Netscape Navigator, byly odebrány a byly přidány novější prohlížeče a zařízení, jako je Google Chrome a Apple iPhone.

Pokud vaše aplikace obsahuje vlastní definice prohlížeče, které dědí z jedné z odebraných definic prohlížeče, zobrazí se chyba.

Objekt HttpBrowserCapabilities (vystavený vlastností stránky Request.Browse ) je řízen definičními soubory prohlížeče. Proto informace vrácené přístupem k vlastnosti tohoto objektu v ASP.NET 4 se mohou lišit od informací vrácených v dřívější verzi ASP.NET.
Pokud vaše aplikace spoléhá na staré definiční soubory prohlížeč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 řádkuAspnet_regbrowsers.exe . Další informace naleznete na https://www.asp.net/mobile webu.
Podřízené aplikace spuštěné ve smíšených verzích ASP.NET ASP.NET 4 aplikací, které jsou nakonfigurované jako podřízené položky aplikací, které používají starší verze ASP.NET, se nemusí spustit kvůli chybám konfigurace nebo kompilace. Konkrétní chyba, ke které dochází, závisí na tom, zda aplikace běží ve službě IIS 6.0 nebo ve službě IIS 7 nebo IIS 7.5. V konfiguračních souborech ovlivněných aplikací můžete provádět změny tak, aby konfigurační systém správně rozpoznal aplikaci ASP.NET 4. Informace o změnách, které je nutné provést, najdete v sekci "Podřízené aplikace ASP.NET 4 se nespustí, když běží pod aplikacemi ASP.NET 2.0 nebo ASP.NET 3.5" v dokumentu "ASP.NET 4: Zásadní změny" na webu ASP.NET.
Změny ID klienta Nové clientIDMode nastavení v ASP.NET 4 umožňuje určit, jak ASP.NET generuje atribut pro elementy id HTML. V předchozích verzích ASP.NET bylo výchozí chování ekvivalentní k nastavení AutoIDclientIDMode. Výchozí nastavení je nyní Predictable. Další informace naleznete v tématu ASP.NET Identifikace ovládacího prvku webového serveru. Pokud pomocí sady Visual Studio upgradujete aplikaci z ASP.NET 2.0 nebo ASP.NET 3.5, nástroj automaticky přidá nastavení do souboru Web.config, který zachovává chování starších verzí rozhraní .NET Framework. Pokud však upgradujete aplikaci změnou fondu aplikací ve službě IIS na cíl rozhraní .NET Framework 4, ASP.NET ve výchozím nastavení použije nový režim. Pokud chcete 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 ASP.NET 2.0, které byly přidány v ASP.NET 3.5, používají model zabezpečení přístupu kódu (CAS) rozhraní .NET Framework 1.1 a .NET Framework 2.0. Implementace CAS v ASP.NET 4 se však podstatně přepracovala. V důsledku toho mohou částečně důvěryhodné aplikace ASP.NET, které spoléhají na důvěryhodný kód běžící v globální mezipaměti sestavení, selhat kvůli různým výjimkám zabezpečení. Částečně důvěryhodné aplikace, které spoléhají na rozsáhlé úpravy zásad CAS počítače, mohou také selhat a vyvolat výjimky zabezpečení. Částečné vztahy důvěryhodnosti ASP.NET 4 aplikace můžete vrátit k chování ASP.NET 1.1 a 2.0 pomocí nového legacyCasModel atributu v elementu konfigurace, jak je znázorněno v následujícím příkladu trust :

<trust level= "Medium" legacyCasModel="true" />

Důležité: Návrat ke staršímu modelu CAS může představovat snížené zabezpečení.

Další informace o novém modelu zabezpečení přístupu kódu ASP.NET 4 najdete v tématu Zabezpečení přístupu kódu v aplikacích ASP.NET 4.
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 tak, aby zahrnovaly většinu často používaných konfiguračních informací, které byly nalezeny v souborech aplikace Web.config v ASP.NET 3.5. Vzhledem ke složitosti spravovaných konfiguračních systémů IIS 7 a IIS 7.5 může spouštění aplikací ASP.NET 3.5 v rámci ASP.NET 4 a služby IIS 7 a IIS 7.5 vést k chybám ASP.NET nebo chybám služby IIS. Upgradujte ASP.NET aplikace 3.5 na ASP.NET 4 pomocí nástrojů pro upgrade projektu v sadě Visual Studio. Visual Studio 2010 automaticky upraví soubor Web.config aplikace ASP.NET 3.5 tak, aby obsahoval odpovídající nastavení pro ASP.NET 4.

Můžete však spouštět aplikace ASP.NET 3.5 pomocí rozhraní .NET Framework 4 bez rekompilace. V takovém případě možná budete muset před spuštěním aplikace v rozhraní .NET Framework 4 a ve službě IIS 7 nebo IIS 7.5 ručně upravit soubor Web.config aplikace. Konkrétní změna, kterou musíte provést, závisí na kombinaci softwaru, se kterým pracujete, včetně verzí Service Pack (SP). Informace o možných kombinacích softwaru ovlivněných touto změnou a o řešení problémů s konkrétními kombinacemi naleznete v části Chyby konfigurace související s novou ASP.NET 4 kořenovou konfigurací v dokumentu ASP.NET 4 Zásadní změny na webu ASP.NET.
Řízení vykreslování V předchozích verzích ASP.NET některé ovládací prvky vygenerovaly značky, které jste nemohli vypnout. Ve výchozím nastavení se tento typ kódu už v ASP.NET 4 negeneruje. Změny vykreslování mají vliv na následující ovládací prvky:

* Ovládací prvky Image a ImageButton již nevykreslují atribut border="0".
* Třída BaseValidator a ovládací prvky pro ověřování, které jsou z ní odvozeny, již ve výchozím nastavení nevykreslují červený text.
* Ovládací prvek HtmlForm nevykreslí atribut name.
* Ovládací prvek Table už nevykresluje atribut border="0".

Ovládací prvky, které nejsou určené pro uživatelský vstup (například Label ovládací prvek), již nevykreslují disabled="disabled" atribut, pokud je jejich Enabled vlastnost nastavena false (nebo pokud toto nastavení dědí z ovládacího prvku kontejneru).
Pokud pomocí sady Visual Studio upgradujete aplikaci z ASP.NET 2.0 nebo ASP.NET 3.5, nástroj automaticky přidá nastavení do souboru Web.config, který zachovává starší verzi vykreslování. Pokud však upgradujete aplikaci změnou fondu aplikací ve službě IIS na cílovou rozhraní .NET Framework 4, ASP.NET ve výchozím nastavení použije nový režim vykreslování. Pokud chcete 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 ASP.NET 4 vykreslí hodnotu atributu elementu form HTML action jako prázdný řetězec, pokud je požadavek proveden na adresu URL bez rozšíření, která má výchozí dokument namapovaný na něj. V dřívějších verzích ASP.NET vedla žádost na http://contoso.com k požadavku na Default.aspx. V tomto dokumentu by se počáteční form značka vykreslovala jako v následujícím příkladu:

<form action="Default.aspx" />

V ASP.NET 4 požadavek na http://contoso.com také vede k požadavku na Default.aspx, ale ASP.NET nyní vykresluje otevírací značku HTML form jako v následujícím příkladu:

<form action="" />

action Pokud je atribut prázdný řetězec, objekt IIS DefaultDocumentModule vytvoří podřízený požadavek na Default.aspx. Za většiny podmínek je tento podřízený požadavek 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 IIS 7 nebo IIS 7.5 však může způsobit, že spravované .aspx stránky přestanou během podřízeného požadavku správně fungovat. Pokud dojde k následujícím podmínkám, podřízený požadavek na výchozí dokument .aspx způsobí chybu nebo neočekávané chování:

* Do prohlížeče se odešle .aspx stránka s atributem elementu formaction nastaveným na "".
* Formulář se publikuje zpět do ASP.NET.
* Spravovaný modul HTTP čte část těla entity, například Request.Form .Request.Params To způsobí, že tělo entity požadavku POST se načte do spravované paměti. V důsledku toho už tělo entity není k dispozici pro žádné nativní moduly kódu, které běží v integrovaném režimu SLUŽBY IIS 7 nebo IIS 7.5.
* Objekt IIS DefaultDocumentModule se nakonec spustí a vytvoří podřízený požadavek na dokument Default.aspx. Vzhledem k tomu, že tělo entity už bylo přečteno částí spravovaného kódu, není k dispozici žádné tělo entity, které by bylo možné odeslat podřízené žádosti.
Když se kanál HTTP spustí pro podřízený požadavek, obslužný program pro .aspx soubory se spustí během fáze spuštění obslužného programu.

Vzhledem k tomu, že neexistuje žádné tělo entity, neexistují žádné proměnné formuláře a ani žádný stav zobrazení. Proto nejsou pro obslužnou rutinu stránky .aspx k dispozici žádné informace, které by určily, jaká událost (pokud vůbec nějaká) má být vyvolána. V důsledku toho se nespustí žádná z obslužných rutin událostí postback pro ovlivněnou stránku .aspx.
Informace o způsobech práce s problémy, které mohou vzniknout v důsledku této změny, naleznete v tématu "Obslužné rutiny událostí nemusí být vyvolány ve výchozím dokumentu v integrovaném režimu služby IIS 7 nebo IIS 7.5" v dokumentu ASP.NET 4 Zásadní změny na webu ASP.NET.
Hashovací algoritmus ASP.NET používá algoritmy šifrování i hash k zabezpečení dat, jako jsou soubory cookie ověřování formulářů a zobrazení stavu. Ve výchozím nastavení ASP.NET 4 používá HMACSHA256 algoritmus pro operace hash u souborů cookie a zobrazení stavu. Starší verze ASP.NET používaly starší HMACSHA1 algoritmus. Pokud spouštíte aplikace, které kombinují ASP.NET 2.0 a ASP.NET 4, kde data, jako jsou soubory cookie ověřování formulářů, musí fungovat napříč verzemi rozhraní .NET Framework, nakonfigurujte webovou aplikaci ASP.NET 4 tak, aby používala starší HMACSHA1 algoritmus přidáním následujícího nastavení do souboru Web.config:

<machineKey validation="SHA1" />
Hostování ovládacích prvků v Internet Exploreru V Internet Exploreru už nemůžete hostovat ovládací prvky Windows Forms, protože existují lepší řešení pro hostování ovládacích prvků na webu. Proto IEHost.dll a IEExec.exe sestavení byly odebrány z rozhraní .NET Framework. Pro vývoj vlastních ovládacích prvků ve webových aplikacích můžete použít následující technologie:

* Můžete vytvořit aplikaci Silverlight a nakonfigurovat ji tak, aby běžela mimo prohlížeč. Další informace najdete v tématu Podpora mimo prohlížeč.
* Můžete vytvořit aplikaci prohlížeče XAML (XBAP), abyste mohli využívat možnosti WPF (vyžaduje rozhraní .NET Framework na klientských počítačích). Další informace naleznete v tématu WPF XAML Browser Applications Overview.
Metody HtmlEncode a UrlEncode Metody HtmlEncode a UrlEncode tříd HttpUtility a HttpServerUtility byly aktualizovány k tomu, aby kódovaly znak jednoduchých uvozovek (') následujícím způsobem:

* Metoda HtmlEncode kóduje instance jednoduché uvozovky jako &#39;
* Metoda UrlEncode kóduje instance jednoduché uvozovky jako %27
Prozkoumejte kód na místech, kde používáte HtmlEncode a UrlEncode metody, a ujistěte se, že změna kódování nemá za následek změnu, která by ovlivnila vaši aplikaci.
Chyby HttpException v aplikacích ASP.NET 2.0 Po povolení ASP.NET 4 ve službě IIS 6 můžou ASP.NET aplikace 2.0, které běží ve službě IIS 6 (v systému Windows Server 2003 nebo Windows Server 2003 R2), můžou generovat chyby, jako například: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. * Pokud ASP.NET 4 není nutné ke spuštění webu, přemapujte web tak, aby místo toho používal ASP.NET 2.0.

nebo

* Pokud je pro spuštění webu vyžadována ASP.NET 4, přesuňte všechny podřízené ASP.NET virtuální adresáře 2.0 na jiný web mapovaný na ASP.NET 2.0.

nebo

* Zakažte adresy URL bez rozšíření. Další informace naleznete v tématu "ASP.NET 2.0 Aplikace mohou generovat chyby HttpException, které odkazují na eurl.axd" v dokumentu ASP.NET 4 Zásadní změny na webu ASP.NET.
Typy členství Některé typy (například MembershipProvider) používané v členství ASP.NET byly přesunuty ze sestavení System.Web.dll do sestavení System.Web.ApplicationServices.dll. Tyto typy byly přesunuty, aby se vyřešily závislosti ve vrstvení architektury mezi typy v klientu a rozšířených verzích rozhraní .NET Framework. Knihovny tříd, které byly upgradovány z dřívějších verzí ASP.NET a které používají typy členství, které byly přesunuty, se nemusí při použití v projektu ASP.NET 4 zkompilovat. Pokud ano, přidejte do projektu knihovny tříd odkaz na System.Web.ApplicationServices.dll.
Změny ovládání nabídky Změny ovládacího prvku Menu vycházejí z následujícího chování:

* Pokud je MenuRenderingMode nastavena na List, nebo pokud je MenuRenderingMode nastavena na Default a ControlRenderingCompatibilityVersion je nastavena na 4.0 nebo na pozdější, PopOutImageUrl nemá žádný účinek.
* Pokud cesta, která je nastavena v StaticPopOutImageUrl a DynamicPopOutImageUrl vlastnosti obsahuje zpětné lomítko (\), obrázky se nevykreslují. (V dřívějších verzích ASP.NET by cesta mohla obsahovat zpětné lomítko.)
* Místo nastavení vlastnosti PopOutImageUrl u jednotlivých položek nabídky nastavte vlastnost StaticPopOutImageUrl nebo DynamicPopOutImageUrl u nadřazeného ovládacího prvku Menu.

nebo

Nastavte MenuRenderingMode na Table, nebo nastavte MenuRenderingMode na Default a nastavte ControlRenderingCompatibilityVersion na 3.5. Tato nastavení způsobují, Menu že ovládací prvek použije rozložení založené na tabulce HTML, které se použilo v dřívějších verzích ASP.NET.
* Pokud cesta ve vlastnosti objektu StaticPopOutImageUrl nebo DynamicPopOutImageUrl obsahuje zpětné lomítko (\), nahraďte lomítko (/).
Mobilní sestavení v souboru Web.config V předchozích verzích ASP.NET byl odkaz na sestavení System.Web.Mobile.dll zahrnutý v kořenovém Web.config souboru v assemblies části system.web/compilation. Kvůli zvýšení výkonu byl odkaz na toto sestavení odebrán.

Poznámka: Sestavení System.Web.Mobile.dll a mobilní ovládací prvky ASP.NET jsou součástí ASP.NET 4, ale jsou zastaralé.
Pokud chcete použít typy z tohoto sestavení, přidejte odkaz na sestavení v kořenovém Web.config souboru nebo v aplikaci Web.config souboru.
Ukládání výstupu do mezipaměti V ASP.NET 1.0 způsobila chyba, že stránky uložené v mezipaměti, které specifikovaly Location="ServerAndClient" jako nastavení mezipaměti, generovaly HTTP hlavičku Vary:* v odpovědi. To mělo vliv na to, že klientským prohlížečům říkáte, aby stránku nikdy neuchovávala místně do mezipaměti. V ASP.NET 1.1 byla přidána metoda SetOmitVaryStar, kterou lze volat k potlačení Vary:* záhlaví. Zprávy o chybách však naznačují, že vývojáři neví o stávajícím SetOmitVaryStar chování.

V ASP.NET 4 se hlavička Vary:* HTTP už nevygeneruje z odpovědí, které určují následující direktivu:

<%@ OutputCache Location="ServerAndClient" %>

V důsledku toho už metoda SetOmitVaryStar není potřeba k potlačení hlavičky Vary:*. V aplikacích, které pro Location atribut zadávají "ServerAndClient", budou stránky uloženy v mezipaměti v prohlížeči, aniž by bylo nutné volat SetOmitVaryStar.
Pokud stránky v aplikaci musí generovat Vary:*, zavolejte metodu AppendHeader , jak je znázorněno v následujícím příkladu:

System.Web.HttpResponse.AppendHeader("Vary","*");

Případně můžete změnit hodnotu atributu ukládání výstupu do mezipaměti Location na "Server".
Analýza stránky Analyzátor stránek pro webové stránky ASP.NET (soubory .aspx) a uživatelských ovládacích prvků (soubory .ascx) je v ASP.NET 4 přísnější než v dřívějších verzích ASP.NET a označí více značek jako neplatné než v předchozích verzích. Zkontrolujte chybové zprávy, které se vytvoří při spuštění stránky, a opravte chyby, které jsou výsledkem neplatného kódu.
Typy passportů Podpora Passportu integrovaná do ASP.NET 2.0 je zastaralá a nepodporuje se kvůli změnám v Passportu (teď Live ID SDK). V důsledku toho jsou teď typy související s Passportem System.Web.Security označené atributem ObsoleteAttribute . Změňte veškerý kód, který používá typy Passportu v System.Web.Security oboru názvů (například PassportIdentity), aby používal sadu Windows Live ID SDK.
Informace „PathInfo“ ve vlastnosti „FilePath“ ASP.NET 4 již neobsahuje hodnotu PathInfo ve vrácených hodnotách z vlastností, jako jsou FilePath, AppRelativeCurrentExecutionFilePath a CurrentExecutionFilePath. Místo toho jsou informace k dispozici v PathInfo. Představte si například následující fragment adresy URL:

/testapp/Action.mvc/SomeAction

Ve starších verzích ASP.NET HttpRequest mají vlastnosti následující hodnoty:

* FilePath: /testapp/Action.mvc/SomeAction
* PathInfo: (prázdné)

V ASP.NET 4 mají HttpRequest vlastnosti místo toho následující hodnoty:

* FilePath: /testapp/Action.mvc
* PathInfo: SomeAction
Prozkoumejte kód na místech, kde spoléháte na vlastnosti HttpRequest třídy k vrácení informací o cestě. Změňte kód tak, aby odrážel změny ve způsobu vrácení informací o cestě.
Ověření požadavku K vylepšení ověřování požadavků se ASP.NET ověření žádosti vyvolá dříve v životním cyklu požadavku. V důsledku toho se ověření požadavku spustí pro žádosti, které nejsou určené pro .aspx soubory, jako jsou volání webové služby a vlastní obslužné rutiny. Ověření požadavku bude aktivní také při spuštění vlastních modulů HTTP v kanálu zpracování požadavků.

V důsledku této změny můžou žádosti o jiné prostředky než .aspx soubory vyvolat chyby ověření požadavku. Vlastní kód, který se spouští v kanálu požadavku (například vlastní moduly HTTP), může také vyvolat chyby ověření požadavku.
V případě potřeby se můžete vrátit k původnímu chování, když máte pouze .aspx stránky, které aktivují ověření požadavku, pomocí následujícího nastavení v konfiguračním souboru webu:

<httpRuntime requestValidationMode="2.0" />

Upozornění: Pokud se vrátíte ke starému chování, ujistěte se, že veškerý kód v existujících obslužných rutinách, modulech a dalším vlastním kódu provádí kontroly potenciálně nebezpečných vstupů HTTP, které by mohly být vektory útoku XSS.
Směrování Pokud vytvoříte web 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í adres URL nebude spolehlivě fungovat. Z některých virtuálních cest se vrátí chyba HTTP 404. K tomu dochází, protože Visual Studio 2010 spustí Vývojový server sady Visual Studio pomocí nesprávné cesty pro kořenový virtuální adresář. * Na stránce Vlastnosti pro souborový web změňte Virtual Path atribut na /.

nebo

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

nebo

* Vytvořte web založený na protokolu HTTP, který je hostovaný ve službě IIS. Weby hostované službou IIS můžou mít ve virtuální cestě i ve složce souboru projektu tečky.
Sharepointové weby Pokud se pokusíte spustit web ASP.NET 4 nasazený jako podřízený web služby SharePoint, který obsahuje vlastní úroveň důvěryhodnosti s názvem WSS_Minimalčástečné důvěryhodnosti, zobrazí se následující chyba:

Could not find permission set named 'ASP.Net'.
V současné době nejsou žádné verze SharePointu kompatibilní s ASP.NET. V důsledku toho byste se neměli pokoušet spustit web ASP.NET 4 jako podřízený web služby SharePoint.
Standardy XHTML 1.1 Chcete-li povolit dodržování předpisů XHTML 1.1 pro nové weby, ASP.NET ovládací prvky v rozhraní .NET Framework 4 vygenerují kód HTML kompatibilní s XHTML 1.1. Toto vykreslování je povolené pomocí následující možnosti v souboru Web.config uvnitř elementu <system.Web> :

<pages controlRenderingCompatibilityVersion="4.0"/>

Tato možnost je ve výchozím nastavení nastavená na hodnotu 4.0. Webové projekty upgradované ze sady Visual Studio 2008 mají povolené nastavení 3.5 pro zajištění kompatibility.
Žádné.

Základ

Obecné funkce

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
CardSpace Windows CardSpace už není součástí rozhraní .NET Framework; je poskytován samostatně. Stáhněte si Windows CardSpace z webu Microsoft Download Center.
Konfigurační soubory Opravili jsme, jak rozhraní .NET Framework přistupuje ke konfiguračním souborům aplikace. Pokud má konfigurační soubor aplikace název application-name.config, přejmenujte ho na application-name.exe.config. Například přejmenujte MyApp.config na MyApp.exe.config.
Kompilátor kódu jazyka 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í součástí 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 Použití CodeDOM.
Hostování (nespravované rozhraní API) Kvůli zlepšení možností hostování jsou některá rozhraní API pro aktivaci hostingu zastaralá. Funkce souběžného spouštění v procesu umožňují aplikaci načíst a spustit více verzí rozhraní .NET Framework ve stejném procesu. Můžete například spouštět aplikace, které načítají doplňky (nebo komponenty), které jsou založené na rozhraní .NET Framework 2.0 SP1 a doplňky založené na rozhraní .NET Framework 4 ve stejném procesu. 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 In-Process souběžné spuštění.
Nový model zabezpečení Zásady zabezpečení přístupu kódu (CAS) byly vypnuty a nahrazeny zjednodušeným modelem, jak je popsáno v tématu Změny zabezpečení v rozhraní .NET Framework 4. Pokud v aplikacích závisíte na CAS, mohou být vyžadovány úpravy. Další informace najdete v tématu Kompatibilita a migrace zásad zabezpečení přístupu kódu.

Datum a čas

Obor názvů: System

Sestavení: mscorlib (v mscorlib.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Letní čas Aby byly konzistentní se systémovými hodinami, vlastnosti času (například Local a Now) teď používají pravidla operačního systému místo jiných dat rozhraní .NET Framework pro operace letního času. Žádné.
Formátování řetězců Pro podporu formátování citlivého na kulturní odlišnosti zahrnuje struktura nové přetížení metod TimeSpan, ToString a Parse, kromě nových metod TryParse a ParseExact. Žádné.

Globalizace

Seznam nových neutrálních a specifických kultur najdete v tématu Co je nového v globalizaci a lokalizaci.

Obor názvů: System.Globalization

Sestavení: mscorlib (v mscorlib.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Názvy kultur Následující změny názvu mají vliv na německé, Divehi a africké kultury:

* CurrencyEnglishName: Název měny německé (Švýcarsko) (de-CH) kultury se změnil z "sFr." na "Fr.".
* LongDatePattern: Dlouhý formát data pro Divehi kulturu (Maledivy) (dv-MV) byl změněn z "dd/MMMM/yyyy" na "dd/MM/yyyy".
* PMDesignator: Indikátor odpoledního času afrikánské kultury (Jihoafrická republika) (af-ZA) se změnil z "nm" na "PM".
Zaznamenejte změny názvu kultury.
Parametr LCID Aby bylo konzistentní s očekávaným chováním v nastavení automatizačního serveru, modul CLR už nepředá aktuální jazykovou verzi parametru LCID nespravovaným aplikacím založeným na modelu COM. Místo toho předává 1033 (en-us) pro kulturu. Nejsou nutné žádné úpravy s výjimkou nativních aplikací, které vyžadují určitou kulturu.
Zastaralé kulturní typy Typy kultury CultureTypes a CultureTypes jsou nyní zastaralé.

Kvůli zpětné kompatibilitě CultureTypes nyní vrací neutrální a specifické kultury, které byly součástí předchozího rozhraní .NET Framework, a CultureTypes nyní vrací prázdný seznam.
Použijte jiné hodnoty výčtu CultureTypes .
Načítání národní kultury Počínaje Windows 7 získává rozhraní .NET Framework 4 informace o kultuře z operačního systému místo jejich ukládání. Rozhraní .NET Framework se navíc synchronizuje s Windows pro řazení a vyhodnocování písmen. Žádné.
Unicode Standardy 5.1 Rozhraní .NET Framework teď podporuje všechny znaky Unicode 5.1 – přidání přibližně 1400 znaků. Mezi další znaky patří nové symboly, šipky, diakritická znaménka, interpunkční znaménka, matematické symboly, tahy CJK a ideografy, další číselné znaky v malajalamském a telugském písmu, a různé znaky myanmarského, latinského, arabského, řeckého, mongolského a cyrilického písma. V Unicode 5.1 jsou podporovány následující nové skripty: Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu, Malayalam a Cham. Žádné.

Výjimky

Obory názvů: System, System.Runtime.ExceptionServices

Sestavení: mscorlib (v mscorlib.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Výjimky pro poškozený stav procesu ClR už neposkytuje výjimky pro poškozený stav procesu obslužným rutinám výjimek ve spravovaném kódu. Tyto výjimky značí, že stav procesu byl poškozen. Nedoporučujeme, abyste aplikaci spustili v tomto stavu.

Další informace naleznete v HandleProcessCorruptedStateExceptionsAttribute a v článku Zpracování výjimek poškozeného stavu časopisu MSDN.
Výjimky prováděcího modulu ExecutionEngineException je nyní zastaralý, protože zachytitelná výjimka umožní nestabilní proces pokračovat v běhu. Tato změna zlepšuje předvídatelnost a spolehlivost modulu runtime. Použijte InvalidOperationException k signalizaci podmínky.

Zamyšlení

Obor názvů: System.Reflection

Sestavení: mscorlib (v mscorlib.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Algoritmy hashování v sestavení Vlastnost HashAlgorithm nyní vrátí AssemblyHashAlgorithm, protože modul runtime nezná algoritmus hash odkazovaného sestavení, pokud sestavení není načteno. (Týká se to použití vlastnosti u odkazovaného sestavení, jako je například ta vrácená metodou GetReferencedAssemblies.) Žádné.
Načítání sestavení Aby se zabránilo redundantnímu načítání sestavení a k úsporě virtuálního adresního prostoru, clr teď načte sestavení pouze pomocí funkce Win32 MapViewOfFile . Funkce už také nevolá LoadLibrary .

Tato změna ovlivňuje diagnostické aplikace následujícími způsoby:

* A ProcessModuleCollection již nebude obsahovat žádné moduly z knihovny tříd (.dll soubor), získané voláním Process.GetCurrentProcess().Modules.
* Aplikace Win32, které tuto funkci používají EnumProcessModules , neuvidí všechny spravované moduly uvedené v seznamu.
Žádné.
Deklarování typu Vlastnost DeclaringType nyní správně vrátí hodnotu null, pokud typ nemá deklarující typ. Žádné.
delegáti Delegát nyní vyvolá výjimku ArgumentNullException místo NullReferenceException, když je do konstruktoru delegáta předána hodnota null. Zajistěte, aby veškeré zpracování výjimek správně zachytávalo ArgumentNullException.
Změna umístění Global Assembly Cache 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í ze starších verzí zůstávají ve starším adresáři.

Nespravovaný výčet ASM_CACHE_FLAGS obsahuje nový příznak ASM_CACHE_ROOT_EX. Tento příznak umožňuje získat umístění mezipaměti pro sestavení rozhraní .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 (Nástroj globální mezipaměti sestavení) už nepodporuje prohlížeč modulů plug-in prostředí. Žádné.

Interoperabilita

Obor názvů: System.Runtime.InteropServices

Sestavení: mscorlib (v mscorlib.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Délka vyrovnávací paměti (nespravované rozhraní API) Aby se ušetřila paměť, funkce parametru pBufferLengthOffsetICorProfilerInfo2::GetStringLayout metoda byla změněna tak, aby odpovídala parametru pStringLengthOffset . Oba parametry nyní ukazují na posunutou polohu délky řetězce. Délka bufferu byla odebrána z reprezentace třídy řetězce. Odstraňte veškerou závislost na délce vyrovnávací paměti.
Ladění JIT Aby se zjednodušilo registraci pro just-in-time (JIT) ladění, ladicí program .NET Framework nyní používá pouze klíč registru AeDebug, který ovládá chování JIT ladění pro nativní kód. Výsledkem této změny je následující:

* Pro spravovaný a nativní kód už nemůžete zaregistrovat dva různé ladicí programy.
* Ladicí program již nelze spustit automaticky pro neinteraktivní proces, ale uživatele můžete vyzvat k interaktivnímu procesu.
* Už nebudete upozorněni, když se ladicí program nespustí nebo pokud není zaregistrovaný ladicí program, který by se měl spustit.
* Zásady automatického spuštění, které závisí na interaktivitě aplikace, se už nepodporují.
Podle potřeby přizpůsobte operace ladění.
Vyvolání platformy Aby se zlepšil výkon při interoperabilitě s nespravovaným kódem, nyní nesprávné konvence volání při vyvolání platformy způsobují selhání aplikace. V předchozích verzích vrstva zprostředkování tyto chyby vyřešila směrem k vyšší vrstvě zásobníku. Ladění aplikací v sadě Microsoft Visual Studio vás upozorní na tyto chyby, abyste je mohli opravit.

Pokud máte binární soubory, jejichž aktualizace není možná, můžete zahrnout prvek <NetFx40_PInvokeStackResilience> do konfiguračního souboru vaší aplikace, abyste umožnili správu chyb volání v zásobníku jako v předchozích verzích. To ale může mít vliv na výkon vaší aplikace.
Odebraná rozhraní (nespravované rozhraní API) Aby nedocházelo k nejasnostem vývojářů, následující rozhraní byla odebrána, protože neposkytla žádné užitečné scénáře modulu runtime a CLR neposkytla ani nepřijala žádné implementace:

* INativeImageINativeImageDependency
* INativeImageInstallInfo
* INativeImageEvaluate
* INativeImageConverter
* ICorModule
* IMetaDataConverter
Žádné.

Údaje

Tato část popisuje problémy s migrací při používání datových sad a klientů SQL, entity Framework, LINQ to SQL a datových serverů WCF (dříve označovaných jako ADO.NET Data Services).

Datová sada a klient SQL

Následující tabulka popisuje vylepšení funkcí, které dříve měly omezení nebo jiné problémy.

Obory názvů: System.Data, System.Data.Objects.DataClassesSystem.Data.SqlClient

Sestavení: System.Data (v System.Data.dll), System.Data.Entity (v System.Data.Entity.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Scénáře POCO Rozhraní IRelatedEnd má nové metody ke zlepšení použitelnosti ve scénářích POCO (Plain Old CLR Object). Tyto nové metody jako parametr přebírají Object místo IEntityWithRelationships entity.
Úpravy řádků Metoda IndexOf , jak je implementovaná DataView třídou, nyní správně vrátí hodnotu řádku, který je upravován, namísto vrácení -1.
Události Událost PropertyChanged je nyní vyvolána, když je řádek v upraveném stavu a metoda RejectChanges se volá. Tato změna usnadňuje vytváření ovládacích prvků uživatelského rozhraní, které zpřístupňují obsah objektu DataSet .
Výjimky Metoda Prepare nyní vyvolá InvalidOperationException, pokud připojení není nastaveno nebo otevřeno, místo NullReferenceException.
Mapování zobrazení Chyby mapování zobrazení dotazů jsou nyní zachyceny v době návrhu NullReferenceException místo vyvolání chyby během běhu programu.

Při ověřování mapování se teď zachytí chyba, ve které se namapují dvě sady přidružení v konceptuálním schématu (CSDL) na stejný sloupec.
Transakce Pokud se aplikace pokusí spustit příkaz na připojení po dokončení transakce (včetně přerušení nebo vrácení zpět), je nyní vyvolána výjimka InvalidOperationException. Předchozí verze nevyvolaly výjimku a umožňují spustit další příkazy, i když byla transakce přerušena.

Entity Framework

Následující tabulka popisuje vylepšení funkcí, které dříve měly omezení nebo jiné problémy.

Obory názvů: System.Data, System.Data.ObjectsSystem.Data.Objects.DataClasses

Sestavení: System.Data.Entity (System.Data.Entity.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Objekty entit Nyní existuje parita mezi metodou Detach a stavem objektu entity při SaveChanges volání metody. Tato zlepšená soudržnost zamezuje neočekávaným výjimkám.
Entity SQL Vylepšili jsme pravidla pro rozlišování identifikátorů v Entity SQL.

Analyzátor Entity SQL má vylepšenou logiku pro překlad identifikátorů s více částmi.
Strukturální poznámky Entity Framework teď rozpozná strukturální poznámky.
Dotazy V dotazech jsme provedli následující vylepšení:

* Dotaz GroupBy používající klíč null nad prázdnou kolekcí nevrátí žádné řádky, bez ohledu na to, jestli dotaz obsahuje nějaké další výběry.
* Vygenerované SQL v LINQ a Entity-SQL dotazy nyní ve výchozím nastavení považují řetězcové parametry za ne-Unicode hodnoty.

LINQ to SQL

Následující tabulka popisuje vylepšení funkcí, které dříve měly omezení nebo jiné problémy.

Obor názvů: System.Data.Linq

Sestavení: System.Data.Linq (v System.Data.Linq.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Události EntitySet<TEntity> Kolekce nyní vyvolá ListChanged událost pro operace přidání a odebrání, pokud EntitySet<TEntity> je uvolněna, kromě vyvolání události při načtení kolekce.
Dotazy Skip(0) v dotazech LINQ to SQL už není ignorován. V důsledku toho se dotazy, které mají tuto metodu, můžou chovat odlišně. Například v některých případech je vyžadována klauzule OrderBy společně s klauzulí Skip(0), a pokud nebyla zahrnuta klauzule NotSupportedException, dotaz nyní vyvolá výjimku OrderBy.

Datové služby WCF

Následující tabulka popisuje vylepšení funkcí, které dříve měly 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 System.Data.Services.dll), System.Data.Services.Client (v System.Data.Services.Client.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Dávkový binární obsah Wcf Data Services teď podporuje dávkový binární obsah v požadavcích a odpovědích.
Změna průsečíků U žádosti o odstranění se teď spouští zachytávání změn.

Průsečík změn je metoda, která se spustí při každém přijetí požadavku serverem, aby upravil entitu v sadě entit. Probíhá před zpracováním příchozího požadavku. Průsečík změn poskytuje přístup ke změněné entitě a operaci, která se s ní provádí.
Výjimky Následující podmínky teď vyvolávají více užitečné výjimky místo NullReferenceException:

* Dojde TimeoutException k vypršení časového limitu volání datové služby.
* A DataServiceRequestException , když je v datové službě proveden chybný požadavek.

V aplikacích byste měli změnit zpracování výjimek, aby se nové výjimky zachytily.
Záhlaví V hlavicích jsme provedli následující vylepšení:

* WCF Data Services nyní správně odmítne hlavičku eTag , která má nezadanou hodnotu.
* WCF Data Services nyní vrací chybu a nespustí požadavek na odstranění odkazu, pokud je v požadavku hlavička if-*.
* Wcf Data Services nyní vrací klientovi chybu ve formátu (Atom, JSON), který klient zadal v hlavičce Accept.
Čtečka JSON Čtečka JSON (JavaScript Object Notation) teď správně vrátí chybu při čtení jednoho řídicího znaku zpětného lomítka ("\") při zpracování datových částí JSON odeslaných do datové služby WCF.
Splývá Ve výčtu MergeOption jsme provedli následující vylepšení:

* Možnost MergeOption sloučení již neupravuje entitu v klientovi jako výsledek jakékoli následné odpovědi z datové služby.
* Možnost MergeOption je teď konzistentní mezi dynamickými aktualizacemi SQL a uloženými procedurami.
Žádosti Metoda OnStartProcessingRequest se teď volá před zpracováním požadavku na datové služby. To umožňuje, aby požadavek správně fungoval pro ServiceOperation služby.
Proudy Datové služby WCF už nezavírají podkladový datový proud pro operace čtení a zápisu.
Uri Opravena procedura escapování URI klientem WCF Data Services.

WCF (Windows Communication Foundation)

Následující tabulka popisuje vylepšení funkcí, které dříve měly omezení nebo jiné problémy.

Vlastnost Rozdíly od verze 3.5 SP1
Konfigurační soubory Pokud chcete povolit dědičnost chování v hierarchii konfiguračních souborů, wcf teď podporuje slučování mezi konfiguračními soubory.

Model dědičnosti konfigurace se teď rozšiřuje, aby uživatelé mohli definovat chování, která se použijí pro všechny služby spuštěné v počítači.

Pokud existují chování se stejným názvem na různých úrovních hierarchie, může dojít ke změnám chování.
Hostování služeb Konfigurační prvek již nelze zadat <serviceHostingEnvironment> na úrovni služby přidáním atributu allowDefinition="MachineToApplication" do definice elementu.

Zadání elementu <serviceHostingEnvironment> na úrovni služby je technicky nesprávné a způsobuje nekonzistentní chování.

Windows Presentation Foundation (WPF)

Aplikace

Obory názvů: System.Windows, System.Windows.Controls

Sestavení: PresentationFramework (v PresentationFramework.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Ošetření výjimek Aby bylo možné chyby zjistit dříve, WPF vyvolá výjimku TargetInvocationException a nastaví vlastnost InnerException na kritické výjimky, například NullReferenceException, OutOfMemoryException, StackOverflowException, a SecurityException, místo zachycení původní výjimky. Žádné.
Propojené prostředky Aby bylo propojení jednodušší, používají soubory prostředků (například obrázky), které se nacházejí v jiném umístění než struktura složek projektu, úplnou cestu k souboru prostředku místo názvu souboru jako ID prostředku při vytváření aplikace. Aplikace bude moci vyhledat soubory za běhu. Žádné.
Aplikace s částečnou důvěryhodností Z důvodu úvah o zabezpečení aplikace založené na Windows, které běží v částečné důvěryhodnosti a obsahují WebBrowser ovládací prvek nebo Frame ovládací prvek, který obsahuje HTML, vyvolají SecurityException při vytvoření tohoto ovládacího prvku.

Aplikace prohlížeče vyvolá výjimku a zobrazí zprávu, pokud jsou splněny všechny následující podmínky:

* Aplikace běží ve Firefoxu.
* Aplikace běží s omezenou důvěryhodností v internetové zóně z nedůvěryhodných stránek.
* Aplikace obsahuje WebBrowser ovládací prvek nebo Frame ovládací prvek, který obsahuje KÓD HTML.

Aplikace, které běží z důvěryhodných webů nebo z zóny intranetu, nebudou ovlivněny.
V aplikacích prohlížeče můžete tuto změnu usnadnit jedním z následujících způsobů:

Spusťte aplikaci prohlížeče s plnou důvěrou.
* Požádejte zákazníky, aby web aplikace přidali do zóny důvěryhodných webů.
Slovníky zdrojů Pokud chcete zlepšit slovníky prostředků na úrovni motivu a zabránit jejich změnám, zamrznutelné prostředky definované ve slovníku prostředků a sloučené do slovníku na úrovni motivu jsou nyní vždy označeny jako zmrazené a neměnné. Toto je očekávané chování pro zmrazené prostředky. Aplikace, které upravují prostředek definovaný ve sloučeném slovníku na úrovni motivu, by měly prostředek naklonovat a upravit klonovanou kopii. Prostředek lze také označit x:Shared="false" tak, aby ResourceDictionary při každém dotazování prostředku vytvořil novou kopii.
Windows 7 Aby aplikace WPF fungovaly v systému Windows 7 lépe, byly provedeny následující vylepšení pro opravu chování okna:

* Stavy dokování a gest teď fungují podle očekávání podle interakcí uživatelů.
* Příkazy hlavního panelu Kaskádová okna, Zobrazit okna skládaná a Zobrazit okna vedle sebe teď mají správné chování a aktualizují příslušné vlastnosti.
* , TopLeftWidtha Height vlastnosti pro maximalizované nebo minimalizované okno nyní obsahují správné umístění obnovení okna místo jiných hodnot v závislosti na monitoru.
Žádné.
Styl a průhlednost Windows Je vyvolána výjimka InvalidOperationException, pokud se pokusíte nastavit WindowStyle na jinou hodnotu než WindowStyle, když AllowsTransparency je true a WindowState je WindowState. Pokud musíte změnit WindowStyle při AllowsTransparency je true, můžete volat funkci Win32 SetWindowLongPtr.
Prohlížeč XPS WPF neobsahuje sadu XPSEP (Microsoft XML Paper Specification Essentials Pack). XPSEP je součástí systému Windows 7 a Windows Vista.

V počítači se systémem Windows XP, na kterém není nainstalován .NET Framework 3.5 SP1, tisk pomocí jiného rozhraní WPF API než těch, které jsou v PrintDialog, bude záviset na WINSPOOL. Některé možnosti tiskárny nebudou hlášeny a některá nastavení tiskárny nebudou použita při tisku.
V případě potřeby nainstalujte sadu Microsoft XML Paper Specification Essentials Pack.

Ovládání

Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input

Sestavení: PresentationFramework (v PresentationFramework.dll), PresentationCore (v PresentationCore.dll), WindowsBase (v WindowsBase.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
dialogová okna Aby se zlepšila spolehlivost, metoda ShowDialog se volá ve stejném vlákně, které vytvořilo ovládací prvek FileDialog. Ujistěte se, že vytvoříte FileDialog ovládací prvek a zavoláte metodu ShowDialog ve stejném vlákně.
Plovoucí okna Pokud chcete opravit logiku obnovení fokusu, která nesprávně aktivuje plovoucí okno (takže se zobrazuje jako modální dialogové okno), obnovení fokusu se teď zabrání, pokud kandidát není podřízeným oknem. Žádné.
Položky v kolekcích Pokud je položka přesunuta nebo přidána do podkladové kolekce, zobrazí se ve CollectionView stejném relativním umístění, pokud CollectionView není seřazena. To zajišťuje konzistenci mezi umístěním položky v kolekci a přidruženým CollectionViewobjektem . Použijte metodu ContainerFromItem nebo IndexOf k nalezení umístění položky v CollectionView místo spoléhání se na pevné umístění položky.
Nákresy Abyste eliminovali nepotřebná opětovná rozložení, změna ShowsNavigationUI již nevede k neplatnosti rozložení ani nezpůsobuje další průchod rozložením. Pokud očekáváte, že změna ShowsNavigationUI způsobí další průchod rozložení, po nastavení vlastnosti volejte InvalidateVisual.
nabídek Chcete-li povolit text ClearType v místní nabídce, byly provedeny úpravy třídy ControlTemplate a ovládacího prvku MenuItem spolu s dalšími ovládacími prvky. Aplikace by se neměly spoléhat na vizuální strukturu šablon ovládacích prvků. Pouze pojmenované části ControlTemplate jsou součástí veřejné zakázky. Pokud aplikace musí najít určitý objekt ve ControlTemplate vizuálním stromu, vyhledejte konkrétní typ a nespoléhejte se na pevné umístění objektu ve stromu.
Navigace Pokud Frame přímo přejde na lokace, vlastnost IsNavigationInitiator je true po počáteční navigaci. Tato změna zabraňuje vyvolání dalších událostí během spouštěcích scénářů. Žádné.
Vyskakovací okna Delegát CustomPopupPlacementCallback se teď dá během průchodu rozložení volat vícekrát, ne jen jednou. Pokud váš CustomPopupPlacementCallback delegát vypočítá pozici Popup na základě předchozí pozice, přepočítejte pozici pouze v případě, že se změní hodnoty popupSize, targetSizenebo offset parametry.
Hodnoty vlastností Tato SetCurrentValue metoda teď umožňuje nastavit vlastnost na efektivní hodnotu, i když i nadále respektuje všechny vazby, styl nebo trigger, které ovlivňují vlastnost. Autoři ovládacích prvků by měli použít SetCurrentValue pokaždé, když se hodnota vlastnosti změní jako vedlejší účinek některé jiné akce, včetně manipulace s uživateli.
Textová pole Z bezpečnostních důvodů metody Copy a Cut tiše selžou, když jsou volány v režimu částečné důvěryhodnosti.

Kromě toho bude programové provedení vlastnosti Copy nebo Cut u ovládacího prvku, který dědí z TextBoxBase, zablokováno v částečné důvěře. Příkazy pro kopírování a vyjmutí iniciované uživatelem, například kliknutí na tlačítko, jehož Command vlastnost je svázaná s jedním z těchto příkazů, budou fungovat. Standardní kopírování a vyjmutí pomocí klávesových zkratek a místní nabídky bude fungovat stejně jako předtím v režimu částečné důvěry.
Propojte příkaz Copy nebo Cut s akcí iniciovanou uživatelem, například kliknutím na tlačítko.

Grafika

Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Media.Effects

Sestavení: PresentationFramework (v PresentationFramework.dll), PresentationCore (v PresentationCore.dll), WindowsBase (v WindowsBase.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Rastrové efekty Pro zlepšení výkonu jsou BitmapEffect třída a třídy, které dědí z BitmapEffect třídy, i když stále existují, deaktivovány. Efekt se vykreslí pomocí hardwarově akcelerovacího kanálu vykreslování, pokud jsou splněny následující podmínky:

* Aplikace používá DropShadowBitmapEffect nebo BlurBitmapEffect, jejichž vlastnost poloměru je nastavena na méně než 100 DIU.
* Grafická karta v počítači, na kterém běží aplikace, podporuje pixel shader 2.0.

Pokud tyto podmínky nejsou splněny, BitmapEffect objekt nebude mít žádný vliv.

Visual Studio také vytvoří upozornění kompilátoru, když narazí na BitmapEffect objekt nebo podtřídu.

Metoda PushEffect je označena zastaralá.
Ukončete používání starších BitmapEffect a odvozených tříd a místo toho použijte nové třídy odvozené z Effect: BlurEffect, DropShadowEffecta ShaderEffect.

Vlastní efekty můžete také vytvořit tak, že zdědíte z ShaderEffect třídy.
Rastrové snímky Klonované BitmapFrame objekty nyní přijímají události DownloadProgress, DownloadCompleted a DownloadFailed. To umožňuje správné fungování obrázků stažených z webu a aplikovaných na ovládací prvek Image prostřednictvím Style.

Změna chování se zobrazí pouze v případě, že jsou splněny všechny následující příkazy:

* Přihlásíte se k odběru události DownloadProgress, DownloadCompleted nebo DownloadFailed.
* Zdroj BitmapFrame je z webu.
* BitmapFrame se klonuje, zatímco stahování stále probíhá.
Zkontrolujte odesílatele v obslužné rutině události a proveďte akci pouze v případě, že odesílatel je původní BitmapFrame.
Dekódování obrázků Aby se zabránilo tomu, že IOException nebude zpracován, když se obrázky nemohou dekódovat, třída BitmapSource vyvolá událost DecodeFailed při neúspěšném dekódování obrázku. Odeberte veškeré zpracování výjimek pro IOExceptiona pomocí DecodeFailed události zkontrolujte selhání dekódování.

Vstup

Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input

Sestavení: PresentationFramework (v PresentationFramework.dll), PresentationCore (v PresentationCore.dll), WindowsBase (v WindowsBase.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Připojování příkazových instancí Chcete-li poskytnout mechanismus pro vytvoření vazby instancí příkazů založených na modelu View na vstupní gesta založená na zobrazení, třída InputBinding nyní dědí od Freezable místo DependencyObject. Nyní jsou vlastnosti závislostí následující:

* Command
* CommandParameter
* CommandTarget

Výsledkem této změny je následující:

* Objekt InputBinding je nyní zmrazený, když je zaregistrovaný, namísto aby zůstal proměnný.
* Z důvodu omezení InputBinding třídy nelze získat přístup k objektům na úrovni DependencyObject instance z více vláken.
* Kvůli omezením Freezable třídy nelze po registraci měnit vazby vstupů na úrovni třídy.
* Vstupní vazby nelze zadat u instancí příkazů vytvořených v modelu View-Model.
Vytvořte samostatné instance InputBinding třídy na samostatných vláknech, pokud jsou vazby proměnlivé, nebo je jinak zmrazit. Po registraci neměňte statické proměnné třídy InputBinding.
Aplikace prohlížeče Aplikace WPF Browser (. XBAP) teď zpracovává klíčové události stejně jako samostatné aplikace WPF, aby objekty přijímaly směrované události klíče ve správném pořadí. Žádné.
Kombinace neaktivních kláves WPF skrývá mrtvé klíče, které nevytvářejí žádný viditelný znak, ale místo toho označují, že se mají kombinovat s dalším písmenem k vytvoření jednoho znaku. Klíčové vstupní události, jako je událost KeyDownEvent, oznamují, když je klávesa mrtvá, nastavením vlastnosti Key na hodnotu Key. To je obvykle očekávané chování, protože aplikace obvykle nemají v úmyslu reagovat na vstup klávesnice, který vytváří kombinovaný znak. Aplikace, které očekávají čtení klíčů, které byly součástí kombinovaných znaků, mohou získat nyní obfuskovaný klíč pomocí DeadCharProcessedKey vlastnosti.
Správce fokusu FocusManager.GetFocusedElement(DependencyObject) Když je metodě předán prvek, který má připojenou vlastnost IsFocusScope nastavena na true, metoda vrátí prvek, který je posledním prvkem zaměřeným klávesnicí v rámci tohoto oboru zaostření, jestliže a pouze tehdy když vrácený element patří do stejného PresentationSource objektu jako element, který je předán metodě. Žádné.

Automatizace uživatelského rozhraní

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 PresentationFramework.dll), PresentationCore (v PresentationCore.dll), UIAutomationProvider (v UIAutomationProvider.dll), WindowsBase (v WindowsBase.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Hierarchie tříd zobrazení Třídy TreeViewAutomationPeer a TreeViewItemAutomationPeer dědí z ItemsControlAutomationPeer místo FrameworkElementAutomationPeer. Pokud dědíte z TreeViewItemAutomationPeer třídy a přepíšete metodu GetChildrenCore, zvažte vrácení objektu, který dědí z nové TreeViewDataItemAutomationPeer třídy.
Kontejnery mimo obrazovku Aby byla opravena nesprávná návratová hodnota, metoda IsOffscreenCore nyní správně vrací false pro kontejnery položek, které jsou posunuty mimo zobrazení. Také hodnota metody není ovlivněna okluzí jinými okny nebo zda prvek je viditelný na konkrétním monitoru. Žádné.
Nabídky a podřízené prvky Chcete-li povolit automatizaci uživatelského rozhraní pro nabídky, které obsahují jiné podřízené položky než MenuItem objekty, metoda GetChildrenCore nyní vrátí objekt AutomationPeer u podřízeného UIElement objektu, namísto objektu MenuItemAutomationPeer. Žádné.
Nová rozhraní a sestavení Pro povolení nových funkcí pro automatizaci uživatelského rozhraní byly přidány následující rozhraní:

* IItemContainerProvider
* ISynchronizedInputProvider
* IVirtualizedItemProvider
Každý projekt, který vytváří automatizační prvky WPF, musí přidat explicitní odkaz na UIAutomationProvider.dll.
Palce Metoda GetClassNameCore vrátí hodnotu místo hodnoty null. Proto ovládací prvky, jako GridSplitter, které dědí z Thumb třídy, budou hlásit název UI Automation. Žádné.
Virtualizované prvky Aby se zlepšil výkon, metoda GetChildrenCore vrací pouze podřízené objekty, které jsou skutečně ve vizuálním stromu, místo všech podřízených objektů, a to bez ohledu na jejich virtualizaci. Slouží ItemContainerPattern k iteraci nad všemi položkami objektu ItemsControlAutomationPeer.

XAML

Obory názvů: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.Input, System.Windows.Markup

Sestavení: PresentationFramework (v PresentationFramework.dll), PresentationCore (v PresentationCore.dll), WindowsBase (v WindowsBase.dll)

Vlastnost Rozdíly od verze 3.5 SP1 Doporučené změny
Značkovací rozšíření WPF nyní správně používá hodnotu z ProvideValue metody namísto vrácení objektu MarkupExtension v určitých případech, když se rozšíření značek používá k nastavení vlastnosti nebo k vytvoření položky v kolekci. Rozšíření pro značkovací jazyk může v některých případech vrátit samu sebe. Pokud vaše aplikace přistupuje k prostředku, který vrátil objekt MarkupExtension v dřívějších verzích, odkazujte na objekt vrácený z ProvideValue, namísto objektu MarkupExtension.
Analýza atributů Atributy v XAML teď můžou mít jenom jedno období. Například platí následující:

<Button Background="Red"/> (bez období)

<Button Button.Background = "Red"/> (jedno období)

Následující informace už nejsou platné:

<Button Control.Button.Background = "Red"/> (více než jedno období)
Opravte atributy XAML, které mají více než jedno období.

jazyk XML

Řádky v této tabulce popisují vylepšení funkcí, které dříve měly omezení nebo jiné problémy.

Schéma a transformace

Prostory jmen: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Sestavení: System.Xml (v System.Xml.dll), System.Xml.Linq (v System.Xml.Linq.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Schémata Chameleonu Aby se zabránilo poškození dat, naklonují se schémata chameleonu správně, pokud jsou součástí více schémat.

Schémata Chameleon jsou schémata, která nemají cílový obor názvů, a pokud jsou zahrnuta v jiném XSD, přebírají cílový obor názvů importovaného schématu. Často se používají k zahrnutí běžných typů do schématu.
Funkce ID Funkce ID XSLT nyní vrátí správnou hodnotu místo hodnoty null při XmlReader předání objektu do XLST.

Pokud uživatel vytvořil XmlReader objekt z LINQ to XML třídy pomocí CreateReader metody a tento XmlReader objekt byl předán do XSLT, všechny instance id funkce v XSLT dříve vrátily hodnotu null. Toto není povolená návratová hodnota funkce id .
Atribut oboru názvů Chcete-li zabránit poškození dat, XPathNavigator objekt nyní vrátí místní název atributu x:xmlns správně.
Deklarace oboru názvů Objekt XmlReader v podstromu nadále nevytváří duplicitní deklarace oboru názvů v rámci jednoho elementu XML.
Ověřování schématu Aby se zabránilo chybnému ověření schématu, XmlSchemaSet třída umožňuje správně a konzistentně zkompilovat schémata XSD. Tato schémata mohou zahrnovat další schémata; Může například A.xsd zahrnovat B.xsd, které mohou zahrnovat C.xsd. Kompilace některé z těchto příčin způsobí procházení tohoto grafu závislostí.
Funkce skriptů Funkce function-available již nevrací nesprávné hodnoty false , když je skutečně k dispozici.
Uri Metoda Load nyní vrátí správný BaseURI v dotazech LINQ.

Ověřování

Prostory jmen: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Sestavení: System.Xml (v System.Xml.dll), System.Xml.Linq (v System.Xml.Linq.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Řešitelé oborů názvů Metoda ReadContentAs již neignoruje rozhraní IXmlNamespaceResolver předané do ní.

V předchozích verzích byl zadaný překladač oboru názvů ignorován a XmlReader byl použit.
Prázdné znaky Pokud chcete zabránit ztrátě dat při vytváření čtečky, Create metoda už nezahodí významné prázdné znaky.

Ověřování XML rozpozná režim smíšeného obsahu, kde lze text intermixovat s kódem XML. Ve smíšeném režimu jsou všechny bílé znaky významné a je třeba je hlásit.

Psaní

Prostory jmen: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Sestavení: System.Xml (v System.Xml.dll), System.Xml.Linq (v System.Xml.Linq.dll)

Vlastnost Rozdíly od verze 3.5 SP1
Odkazy na entity Aby se zabránilo poškození dat, odkazy na entity již nejsou v atributech XML entitovány dvakrát.

Pokud se uživatel pokusil napsat entitu do atributu xmlns nebo do atributu xml:lang či xml:space pomocí metody WriteEntityRef, entita byla ve výstupu uvedena dvakrát, čímž došlo k poškození dat.
Nové zpracování řádků Aby se zabránilo poškození dat, XmlWriter objekty respektují NewLineHandling možnost.

Viz také