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é programové změny v aplikacích. U těch, které můžou zahrnovat úpravy, najdete ve sloupci Doporučené změny tabulky. Velmi vhodné 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)

Funkce Rozdíly mezi aktualizací 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 i Telefon.

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 řádku Aspnet_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, naleznete v části "ASP.NET 4 Podřízené aplikace se nedaří spustit Při ASP.NET 2.0 nebo ASP.NET 3.5 Aplikace" 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í AutoID nastavení clientIDMode. 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) ASP.NET funkce 2.0 NET přidané 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 můžou částečné vztahy důvěryhodnosti ASP.NET aplikace, které spoléhají na důvěryhodný kód spuštěný v globální mezipaměti sestavení, selhat s různými výjimkami zabezpečení. Částečně důvěryhodné aplikace, které spoléhají na rozsáhlé úpravy zásad cas počítače, můžou 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 Web.config aplikace 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 ručně upravit soubor Web.config aplikace před spuštěním aplikace v rozhraní .NET Framework 4 a v iis 7 nebo IIS 7.5. 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 vygenerované značky, které nelze zakázat. 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í ImageImageButton prvky již nevykreslují border="0" atribut.
* Ovládací BaseValidator prvky třídy a ověřování, které jsou odvozeny od ní, již ve výchozím nastavení nevykreslují červený text.
* Ovládací HtmlForm prvek nevykreslí name atribut.
* Ovládací Table prvek už nevykreslí border="0" atribut.

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 action HTML form 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 by žádost http://contoso.com o Default.aspx byla výsledkem požadavku. 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 se požadavek http://contoso.com na Default.aspx také zobrazí, ale ASP.NET teď vykresluje počáteční form značku HTML 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á rutina pro .aspx soubory se spustí během fáze provádění obslužné rutiny.

Vzhledem k tomu, že neexistuje žádný text entity, neexistují žádné proměnné formuláře a žádný stav zobrazení. Proto nejsou pro obslužnou rutinu stránky .aspx k dispozici žádné informace, které by měly být vyvolány události (pokud existují). V důsledku toho se žádná z obslužných rutin událostí postback pro ovlivněnou .aspx stránku spustí.
Informace o způsobech řešení problémů, 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.
Algoritmus hash 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 ve verzích 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 model Windows Forms ovládací prvky, protože existují lepší řešení pro hostování ovládacích prvků na webu. Proto IEHost.dll a IEExec.exe sestavení byla odebrána 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 metody HttpUtility a HttpServerUtility třídy byly aktualizovány tak, 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é ve ASP.NET členství byly přesunuty z System.Web.dll do System.Web.ApplicationServices.dll sestavení. Tyto typy byly přesunuty, aby se vyřešily závislosti vrstvení architektury mezi typy v klientovi a rozšířené skladové položky 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ádacího prvku nabídky Změny výsledku Menu ovládacího prvku v následujícím chování:

* Pokud MenuRenderingMode je nastavena na Listhodnotu , nebo pokud MenuRenderingMode je nastavena Default na a ControlRenderingCompatibilityVersion je nastavena 4.0 na nebo novější, PopOutImageUrl vlastnost nemá žádný vliv.
* 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í PopOutImageUrl vlastnosti pro jednotlivé položky nabídky nastavte StaticPopOutImageUrl nebo DynamicPopOutImageUrl nadřazený Menu ovládací prvek.

nebo

Nastavte MenuRenderingMode na hodnotu , nebo nastavte ControlRenderingCompatibilityVersionMenuRenderingModeDefault3.5na hodnotu .Table 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 v objektu StaticPopOutImageUrl nebo DynamicPopOutImageUrl vlastnosti obsahuje zpětné lomítko (\), nahraďte znak lomítka (/).
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 souboru Web.config 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 souboru Web.config nebo v souboru Web.config aplikace.
Ukládání výstupu do mezipaměti V ASP.NET 1.0 způsobila chyba stránky uložené v mezipaměti zadané Location="ServerAndClient" jako výstupní nastavení mezipaměti, které v odpovědi vygenerovalo hlavičku Vary:* HTTP. 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 SetOmitVaryStar byla přidána metoda, kterou lze volat, aby bylo možné potlačit 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 SetOmitVaryStar už není metoda potřebná 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) tak, PassportIdentityaby používal sadu Windows Live ID SDK.
Informace PathInfo ve vlastnosti FilePath ASP.NET 4 již neobsahuje PathInfo hodnotu ve vrácených hodnotách z vlastností, jako FilePathje , AppRelativeCurrentExecutionFilePatha CurrentExecutionFilePath. PathInfo Místo toho jsou informace k dispozici v PathInfosouboru . 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 atribut Virtuální cesta 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.
Weby SharePoint 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 povoleno 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.
Nezaokrouhlovat.

Základ

Obecné funkce

Funkce Rozdíly mezi aktualizací 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. Přejmenujte například MyApp.config na MyApp.exe.config.
Kompilátor kódu jazyka C# Třídy Compilera ErrorLevel třídy, CompilerErrorkteré byly v Microsoft.CSharp oboru názvů, již nejsou k dispozici a jejich sestavení (cscompmgd.dll) již není součástí rozhraní .NET Framework. CodeDomProvider Použijte třídu a další třídy v System.CodeDom.Compiler oboru názvů. 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 souběžné provádě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 casu, můžou se vyžadovat ú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)

Funkce Rozdíly mezi aktualizací 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. Nezaokrouhlovat.
Formátování řetězců Pro podporu formátování TimeSpan citlivé na jazykovou verzi zahrnuje struktura nové přetížení ToString, Parsea TryParse metody kromě nových ParseExact a TryParseExact metod. Nezaokrouhlovat.

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)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Názvy jazykových verzí Následující změny názvu mají vliv na německé, Divehi a africké kultury:

* CurrencyEnglishName: Název měny německé jazykové verze (Švýcarsko) (de-CH) se změnil z "sFr" na "Fr".
* LongDatePattern: Dlouhý vzor data pro kulturu Divehi (Maledivy) (dv-MV) se změnil z "dd/MMMM/yyyy" na "dd/MM/y".
* PMDesignator: Designátor afrikánů (Jihoafrická republika) (af-ZA) se změnil z "nm" na "PM".
Poznamenejte si změny názvu jazykové verze.
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 projde 1033 (en-us) pro jazykovou verzi. Nejsou nutné žádné úpravy s výjimkou nativních aplikací, které vyžadují zadanou jazykovou verzi.
Zastaralé typy jazykové verze Typy CultureTypes jazykové verze a CultureTypes jazykové verze jsou nyní zastaralé.

Kvůli zpětné kompatibilitě CultureTypes teď vrátí neutrální a specifické jazykové verze, které byly součástí předchozího rozhraní .NET Framework, a CultureTypes nyní vrátí prázdný seznam.
Použijte jiné hodnoty výčtu CultureTypes .
Načítání jazykové verze Počínaje Windows 7 načte rozhraní .NET Framework 4 informace o jazykové verzi z operačního systému místo ukládání samotných dat. Rozhraní .NET Framework se navíc synchronizuje s Windows pro řazení a ukládání dat do velikostí a velikostí. Nezaokrouhlovat.
Standardy Unicode 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, interpunkce, matematické symboly, tahy CJK a ideografy, další číselné znaky Malayalamu a Telugu a různé Myanmar, latinka, arabština, řečtina, mongolština a cyrilice. 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 a Malayalam a Cham. Nezaokrouhlovat.

Výjimky

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

Sestavení: mscorlib (v mscorlib.dll)

Funkce Rozdíly mezi aktualizací 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 tématu a položka Zpracování výjimek poškozeného stavu v časopisu MSDN.
Výjimky prováděcího modulu ExecutionEngineException je nyní zastaralý, protože zachytnutelná výjimka umožní nestabilní proces pokračovat ve spuštění. Tato změna zlepšuje předvídatelnost a spolehlivost modulu runtime. Pomocí signálu InvalidOperationException podmínky.

Reflexe

Obor názvů: System.Reflection

Sestavení: mscorlib (v mscorlib.dll)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Algoritmy hash sestavení Vlastnost HashAlgorithm nyní vrátí AssemblyHashAlgorithm, protože modul runtime nezná algoritmus hash odkazovaného sestavení, pokud sestavení není načteno. (To odkazuje na použití vlastnosti u odkazovaného sestavení, jako je například vrácená metodou GetReferencedAssemblies .) Nezaokrouhlovat.
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), jak je získáno z volání Process.GetCurrentProcess().Modules.
* Aplikace Win32, které tuto funkci používají EnumProcessModules , neuvidí všechny spravované moduly uvedené v seznamu.
Nezaokrouhlovat.
Deklarování typu Vlastnost DeclaringType nyní správně vrátí hodnotu null, pokud typ nemá deklarující typ. Nezaokrouhlovat.
Delegáti Delegát teď vyvolá ArgumentNullException místo NullReferenceException hodnoty null konstruktoru delegáta. Zajistěte, aby veškeré zpracování výjimek chytá .ArgumentNullException
Změna umístění globální mezipaměti sestavení 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ý ASM_CACHE_FLAGS výčet obsahuje nový ASM_CACHE_ROOT_EX příznak. Tento příznak získá 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í Prohlížeč modulů plug-in prostředí už nepodporuje Gacutil.exe (Nástroj globální mezipaměti sestavení). Nezaokrouhlovat.

Vzájemná funkční spolupráce

Obor názvů: System.Runtime.InteropServices

Sestavení: mscorlib (v mscorlib.dll)

Funkce Rozdíly mezi aktualizací 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 teď ukazují na umístění posunu délky řetězce. Délka vyrovnávací paměti byla odebrána z reprezentace třídy řetězce. Odeberte jakoukoli závislost na délce vyrovnávací paměti.
Ladění JIT Aby se zjednodušilo registrace ladění za běhu (JIT), ladicí program rozhraní .NET Framework teď používá pouze klíč registru AeDebug, který řídí chování ladění JIT 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 můžete uživatele 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 upravte operace ladění.
Vyvolání platformy Kvůli zlepšení výkonu při interoperabilitě s nespravovaným kódem teď nesprávné konvence volání v vyvolání platformy způsobují selhání aplikace. V předchozích verzích vrstva zařazování tyto chyby vyřešila v 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, které nelze aktualizovat, můžete zahrnout <prvek NetFx40_PInvokeStackResilience> do konfiguračního souboru vaší aplikace, abyste umožnili řešení 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 nezadali žádné užitečné scénáře za běhu a CLR neposkytla ani nepřijala žádné implementace:

* INativeImageINativeImageDependency
* INativeImageInstallInfo
* INativeImageEvaluate
* INativeImageConverter
* ICorModule
* IMetaDataConverter
Nezaokrouhlovat.

Data

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)

Funkce Rozdíly mezi aktualizací 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 RejectChanges volá se metoda. 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 když 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í za běhu.

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), InvalidOperationException je nyní vyvolána. 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 (v System.Data.Entity.dll)

Funkce Rozdíly mezi aktualizací 3.5 SP1
Objekty entit Nyní existuje parita mezi metodou Detach a stavem objektu entity při SaveChanges volání metody. Tato vylepšená konzistence zabraňuje vyvolání neočekávaných výjimek.
Entity SQL Vylepšili jsme pravidla pro překlady 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 dotazech LINQ a Entity-SQL nyní ve výchozím nastavení zachází s řetězcovými parametry jako s hodnotami, které nejsou unicode.

Technologie 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)

Funkce Rozdíly mezi aktualizací 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ě. V některých případech OrderBy se například vyžaduje klauzule s Skip(0)klauzulí a dotaz teď vyvolá NotSupportedException výjimku, pokud OrderBy klauzule nebyla zahrnuta.

WCF Data Services

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)

Funkce Rozdíly mezi aktualizací 3.5 SP1
Dávkový binární obsah Datové služby WCF 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. Spustí se před spuště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ď hází užitečnější 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í:

* Datové služby WCF nyní správně odmítne hlavičkueTag, která má nezadanou hodnotu.
* Datové služby WCF nyní vrátí chybu a nespustí žádost o odstranění požadavku na odkaz, pokud je hlavička if-* v požadavku.
* Datové služby WCF nyní vrátí 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.
Sloučí 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.
Toky Datové služby WCF už základní datový proud nezavírá pro operace čtení a zápisu.
Uri Zapouzdření identifikátorů URI klientem Datové služby WCF bylo opraveno.

WCF (Windows Communication Foundation)

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

Funkce Rozdíly mezi aktualizací 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)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Ošetření výjimek Chcete-li povolit, aby chyby byly zjištěny dříve, WPF vyvolá TargetInvocationException a nastaví InnerException vlastnost na kritické výjimky, například NullReferenceException, OutOfMemoryExceptionStackOverflowException, a SecurityExceptionmísto zachycení původní výjimky. Nezaokrouhlovat.
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 moct vyhledat soubory za běhu. Nezaokrouhlovat.
Aplikace s částečnou důvěryhodností Pro důležité informace 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, vyvolá SecurityException při vytvoření 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ěží v částečné důvěryhodnosti v internetové zóně z nedůvěryhodných webů.
* 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 v plném vztahu důvěryhodnosti.
* Požádejte zákazníky, aby web aplikace přidal do zóny důvěryhodných webů.
Slovníky prostředků 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 ukotvení a gest teď fungují podle očekávání na základě 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.
Nezaokrouhlovat.
Styl a průhlednost Windows Vyvolá InvalidOperationException se, pokud se pokusíte nastavit WindowStyle jinou hodnotu než WindowStyle kdy AllowsTransparency je true a WindowState je WindowState. Pokud je nutné změnit, WindowStyleAllowsTransparencytruemůž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 bez nainstalované rozhraní .NET Framework 3.5 SP1 tisk pomocí jiného rozhraní WPF API než těch, které jsou součástí 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ádací prvky

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)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Dialogových Aby se zlepšila spolehlivost, volá se ShowDialog metoda ve stejném vlákně, které vytvořilo FileDialog ovládací prvek. Nezapomeňte vytvořit FileDialog ovládací prvek a volat 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. Nezaokrouhlovat.
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 . ContainerFromItem Místo toho, abyste se museli spoléhat na pevné umístění položky, použijte metodu nebo IndexOf umístění položkyCollectionView.
Rozložení Pokud chcete eliminovat nepotřebná opětovná rozložení, změňte ShowsNavigationUI už neplatné rozložení nebo způsobíte jiné předání rozložení. Pokud očekáváte, že změna ShowsNavigationUI způsobí další průchod rozložení, volání InvalidateVisual po nastavení vlastnosti.
Nabídky Chcete-li v místní nabídce povolit text ClearType, byly provedeny ControlTemplate změny třídy a ovládacích MenuItem prvků a dalších ovládacích prvků. Aplikace by se neměly spoléhat na vizuální strukturu šablon ovládacích prvků. Pouze pojmenované části jsou ControlTemplate součástí veřejné zakázky. Pokud aplikace musí najít určitý objekt ve ControlTemplatestromu , vyhledejte ve stromu vizuálu konkrétní typ, a nespoléhat se na pevné umístění objektu ve stromu.
Navigaci Frame Pokud přímo přejde na umístění, IsNavigationInitiator vlastnost 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ářů. Nezaokrouhlovat.
Automaticky otevíraná 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á Pro důležité informace o zabezpečení a Cut metody bezobslužně selžou, Copy když jsou volány v částečné důvěryhodnosti.

Kromě toho programové spuštění Copy nebo Cut vlastnosti u ovládacího prvku, ze kterého dědí TextBoxBase , bude zablokováno v částečném vztahu důvěryhodnosti. 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ů, bude fungovat. Standardní kopírování a vyjmutí klávesových zkratek a místní nabídka bude fungovat stejně jako předtím v částečném vztahu důvěryhodnosti.
Copy Vytvořte vazbu nebo Cut příkaz na akci 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)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Rastrové efekty Chcete-li zvýšit výkon, BitmapEffect třída a třídy, které dědí z BitmapEffect třídy, i když jsou stále přítomny, jsou zakázá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 vlastnost BlurBitmapEffect radius nastavenou 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í obdrží DownloadProgressobjekty , DownloadCompleteda DownloadFailed události. To umožňuje, aby obrázky, které se stáhnou z webu, a použily se na Image ovládací prvek, aby Style fungovaly správně.

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 DownloadProgressudálosti , DownloadCompletednebo DownloadFailed události.
* Zdroj BitmapFrame je z webu.
* Klonuje se BitmapFrame během stahování.
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ů Pokud chcete zabránit IOException tomu, aby se nezpracovává, když obrázky nemusí dekódovat, třída vyvolá DecodeFailed událost, BitmapSource když nekóduje obrázek. 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)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Vazby instancí příkazů Chcete-li poskytnout mechanismus pro vytvoření vazby instancí příkazů založených na modelu View k gestům zadávání na základě zobrazení, InputBinding třída nyní dědí místo FreezableDependencyObject. Nyní jsou vlastnosti závislostí následující:

* Command
* CommandParameter
* CommandTarget

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

* Objekt InputBinding se teď zablokuje, když je zaregistrovaný místo zbývající proměnlivé tabulky.
* Z důvodu omezení DependencyObject třídy nelze získat přístup k objektům na úrovni InputBinding instance z více vláken.
* Po registraci nelze ztlumit vstupní vazby na úrovni třídy, a to z důvodu omezení Freezable 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 ukotvit. Po registraci neztlumujte statickou InputBinding úroveň třídy.
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í. Nezaokrouhlovat.
Kombinace neaktivních kláves WPF obfuscuje mrtvé klíče, které nevytvářet žádný viditelný znak, ale místo toho označuje, že klíč se má kombinovat s dalším písmenem klíč k vytvoření jednoho znaku. Klíčové vstupní události, jako KeyDownEvent je událost, hlásí, když klíč je mrtvý klíč nastavením Key vlastnosti na Key hodnotu. 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ž metoda je předán prvek, který má IsFocusScope připojenou vlastnost nastavena true, metoda vrátí prvek, který je poslední prvek zaměřen na klávesnici v rámci tohoto oboru fokus, pokud a pouze pokud vrácený element patří do stejného PresentationSource objektu jako element, který je předán metodě. Nezaokrouhlovat.

Automatizace UI

Obor názvů: System.Windows, System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.DataSystem.Windows.Input

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

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Hierarchie tříd zobrazení Třídy TreeViewAutomationPeer zdědí TreeViewItemAutomationPeer místo FrameworkElementAutomationPeerItemsControlAutomationPeer . Pokud dědíte z TreeViewItemAutomationPeer tříd a přepíšete metodu GetChildrenCore , zvažte vrácení objektu, který dědí z nové TreeViewDataItemAutomationPeer třídy.
Kontejnery mimo obrazovku Chcete-li opravit nesprávnou návratovou hodnotu, IsOffscreenCore metoda nyní správně vrátí false 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. Nezaokrouhlovat.
Nabídky a podřízené objekty Chcete-li povolit automatizaci uživatelského rozhraní nabídek, které obsahují podřízené položky než MenuItem objekty, GetChildrenCore metoda nyní vrátí AutomationPeer objekt podřízeného UIElement objektu místo objektu MenuItemAutomationPeer . Nezaokrouhlovat.
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áří partnerské vztahy automatizace 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 je například dědění z Thumb třídy, budou hlásit název model UI Automation. Nezaokrouhlovat.
Virtualizované prvky Aby se zlepšil výkon, GetChildrenCore vrátí metoda pouze podřízené objekty, které jsou ve skutečnosti ve vizuálním stromu, místo všech podřízených objektů bez ohledu na to, zda jsou virtualizovány. 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)

Funkce Rozdíly mezi aktualizací 3.5 SP1 Doporučené změny
Rozšíření značek 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í značek se může v některých případech vrátit. Pokud vaše aplikace přistupuje k prostředku, který vrátil MarkupExtension objekt v dřívějších verzích, odkazujte na objekt vrácený z ProvideValueobjektu 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í.

XML

Řádky v této tabulce popisují vylepšení funkcí, které dříve měly 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 System.Xml.dll), System.Xml.Linq (v System.Xml.Linq.dll)

Funkce Rozdíly mezi aktualizací 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 už v rámci jednoho elementu XML nevytyčí duplicitní deklarace oboru názvů.
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 , která je k dispozici , již není správně vrací false , když je funkce skutečně k dispozici.
Uri Metoda Load nyní vrátí správný BaseURI v dotazech LINQ.

Ověřování

Obory názvů: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

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

Funkce Rozdíly mezi aktualizací 3.5 SP1
Překladače oborů názvů Metoda ReadContentAs už nepředá překladač předaný IXmlNamespaceResolver 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á smíšené kon režim stanu, kde lze text intermixovat 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.

Zápis

Obory názvů: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

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

Funkce Rozdíly mezi aktualizací 3.5 SP1
Odkaz na entitu 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 xml:lang atributu xml:space pomocí WriteEntityRef metody, entita byla entita ve výstupu entita dvakrát, a proto poškozena data.
Nové zpracování čar Aby se zabránilo poškození dat, XmlWriter objekty respektují NewLineHandling možnost.

Viz také