Migratieproblemen met .NET Framework 4

In dit artikel worden migratieproblemen beschreven tussen .NET Framework versie 3.5 Service Pack 1 en .NET Framework versie 4, waaronder fixes, wijzigingen voor naleving en beveiliging van standaarden en wijzigingen op basis van feedback van klanten. Voor de meeste van deze wijzigingen zijn geen programmeerwijzigingen in uw toepassingen vereist. Zie de kolom Aanbevolen wijzigingen van de tabel voor degenen die mogelijk wijzigingen omvatten. Belangrijke wijzigingen worden onderverdeeld per gebied, bijvoorbeeld ASP.NET en Windows Presentation Foundation (WPF).

Zie migratiehandleiding voor .NET Framework 4 voor een overzicht op een hoger niveau van de problemen in dit artikel.

Zie Wat is er nieuw in .NET Framework 4 voor meer informatie over nieuwe functies.

ASP.NET en web

Naamruimten: System.Web, System.Web.Mobile, System.Web.SecuritySystem.Web.UI.WebControls

Assembly: System.Web (in System.Web.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Browserdefinitiebestanden De browserdefinitiebestanden zijn bijgewerkt met informatie over nieuwe en bijgewerkte browsers en apparaten. Oudere browsers en apparaten zoals Netscape Navigator zijn verwijderd en nieuwere browsers en apparaten zoals Google Chrome en Apple i Telefoon zijn toegevoegd.

Als uw toepassing aangepaste browserdefinities bevat die overnemen van een van de browserdefinities die zijn verwijderd, ziet u een fout.

Het HttpBrowserCapabilities object (dat wordt weergegeven door de eigenschap van Request.Browse de pagina) wordt aangestuurd door de definitiebestanden van de browser. Daarom is de informatie die wordt geretourneerd door toegang te krijgen tot een eigenschap van dit object in ASP.NET 4 mogelijk anders dan de informatie die is geretourneerd in een eerdere versie van ASP.NET.
Als uw toepassing afhankelijk is van de oude browserdefinitiebestanden, kunt u deze kopiëren vanuit de volgende map:

Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers

Kopieer de bestanden naar de bijbehorende map \CONFIG\Browsers voor ASP.NET 4. Nadat u de bestanden hebt gekopieerd, voert u het Aspnet_regbrowsers.exe opdrachtregelprogramma uit. Zie de https://www.asp.net/mobile website voor meer informatie.
Onderliggende toepassingen die worden uitgevoerd onder gemengde versies van ASP.NET ASP.NET 4 toepassingen die zijn geconfigureerd als onderliggende toepassingen waarop eerdere versies van ASP.NET worden uitgevoerd, kunnen niet worden gestart vanwege configuratie- of compilatiefouten. De specifieke fout die optreedt, is afhankelijk van of de toepassing wordt uitgevoerd onder IIS 6.0 of onder IIS 7 of IIS 7.5. U kunt wijzigingen aanbrengen in de configuratiebestanden van de betrokken toepassingen, zodat het configuratiesysteem de ASP.NET 4-toepassing correct herkent. Zie de sectie 'ASP.NET 4 onderliggende toepassingen kunnen niet worden gestart wanneer onder ASP.NET 2.0 of ASP.NET 3.5-toepassingen' in het ASP.NET document onder ASP.NET 2.0 of ASP.NET 4 belangrijke wijzigingen op de website van ASP.NET wordt weergegeven.
Wijzigingen in client-id Met de nieuwe clientIDMode instelling in ASP.NET 4 kunt u opgeven hoe ASP.NET het id kenmerk voor HTML-elementen genereert. In eerdere versies van ASP.NET was het standaardgedrag gelijk aan de AutoID instelling van clientIDMode. De standaardinstelling is nu Predictable. Zie ASP.NET Webserverbesturingsidentificatie voor meer informatie. Als u Visual Studio gebruikt om uw toepassing te upgraden vanaf ASP.NET 2.0 of ASP.NET 3.5, wordt er automatisch een instelling toegevoegd aan het Web.config-bestand dat het gedrag van eerdere versies van .NET Framework behoudt. Als u echter een toepassing bijwerkt door de groep van toepassingen in IIS te wijzigen in .NET Framework 4, ASP.NET de nieuwe modus standaard gebruikt. Als u de nieuwe client-id-modus wilt uitschakelen, voegt u de volgende instelling toe aan het web.config-bestand:

<pages clientIDMode="AutoID" />
Beveiliging van codetoegang (CAS) ASP.NET 2.0 NET-functies die zijn toegevoegd in ASP.NET 3.5, gebruiken het CAS-model (.NET Framework 1.1 en .NET Framework 2.0 Code Access Security). De uitvoering van CAS in ASP.NET 4 is echter aanzienlijk herzien. Als gevolg hiervan kunnen gedeeltelijke vertrouwensrelaties ASP.NET toepassingen die afhankelijk zijn van vertrouwde code die wordt uitgevoerd in de globale assemblycache, mislukken met verschillende beveiligingsuitzondering. Gedeeltelijke vertrouwenstoepassingen die afhankelijk zijn van uitgebreide wijzigingen in het CAS-beleid van de machine kunnen ook mislukken en beveiligingsonderzonderingen genereren. U kunt gedeeltelijke vertrouwensrelatie ASP.NET 4 toepassingen herstellen naar het gedrag van ASP.NET 1.1 en 2.0 met behulp van het nieuwe legacyCasModel kenmerk in het trust configuratie-element, zoals wordt weergegeven in het volgende voorbeeld:

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

Belangrijk: Terugkeren naar het oudere CAS-model kan een verminderde beveiliging vertegenwoordigen.

Zie codetoegangsbeveiliging in ASP.NET 4 toepassingen voor meer informatie over het nieuwe ASP.NET 4-codetoegangsbeveiligingsmodel.
Configuratiebestanden De hoofdconfiguratiebestanden (het bestand machine.config en het hoofdbestand Web.config) voor .NET Framework en ASP.NET 4 zijn bijgewerkt met de meeste standaardconfiguratiegegevens die zijn gevonden in de web.config-bestanden van de toepassing in ASP.NET 3.5. Vanwege de complexiteit van de beheerde IIS 7- en IIS 7.5-configuratiesystemen kan het uitvoeren van ASP.NET 3.5-toepassingen onder ASP.NET 4 en iis 7 en IIS 7.5 leiden tot ASP.NET fouten of IIS-fouten. Werk ASP.NET 3.5-toepassingen bij naar ASP.NET 4 met behulp van de hulpprogramma's voor projectupgrades in Visual Studio. Visual Studio 2010 wijzigt automatisch het web.config-bestand van de ASP.NET 3.5-toepassing met de juiste instellingen voor ASP.NET 4.

U kunt echter ASP.NET 3.5-toepassingen uitvoeren met .NET Framework 4 zonder hercompilatie. In dat geval moet u het web.config-bestand van de toepassing mogelijk handmatig wijzigen voordat u de toepassing uitvoert onder .NET Framework 4 en onder IIS 7 of IIS 7.5. De specifieke wijziging die u moet aanbrengen, is afhankelijk van de combinatie van software waarmee u werkt, inclusief Service Pack (SP)-releases. Zie de sectie Configuratiefouten met betrekking tot nieuwe ASP.NET 4 hoofdconfiguratie in het document ASP.NET 4 Belangrijke wijzigingen op de ASP.NET website voor informatie over de mogelijke softwarecombinaties die worden beïnvloed door deze wijziging en hoe u problemen met specifieke combinaties kunt oplossen.
Rendering van besturingselementen In eerdere versies van ASP.NET hebben sommige besturingselementen markeringen gegenereerd die u niet kunt uitschakelen. Dit type markeringen wordt standaard niet meer gegenereerd in ASP.NET 4. De renderingwijzigingen zijn van invloed op de volgende besturingselementen:

* De Image en ImageButton besturingselementen geven geen border="0" kenmerk meer weer.
* De BaseValidator klasse- en validatiebesturingselementen die eraan zijn afgeleid, geven standaard geen rode tekst meer weer.
* Het HtmlForm besturingselement geeft geen kenmerk weer name .
* Het Table besturingselement geeft geen border="0" kenmerk meer weer.

Besturingselementen die niet zijn ontworpen voor gebruikersinvoer (bijvoorbeeld het Label besturingselement) geven het disabled="disabled" kenmerk niet meer weer als de Enabled eigenschap is ingesteld false op (of als ze deze instelling overnemen van een containerbesturingselement).
Als u Visual Studio gebruikt om uw toepassing bij te werken vanaf ASP.NET 2.0 of ASP.NET 3.5, wordt er automatisch een instelling toegevoegd aan het Web.config-bestand dat verouderde rendering behoudt. Als u echter een toepassing bijwerkt door de groep van toepassingen in IIS te wijzigen in .NET Framework 4, gebruikt ASP.NET standaard de nieuwe renderingmodus. Als u de nieuwe renderingmodus wilt uitschakelen, voegt u de volgende instelling toe aan het web.config-bestand:

<pages controlRenderingCompatibilityVersion="3.5" />
Gebeurtenis-handlers in standaarddocumenten ASP.NET 4 geeft de kenmerkwaarde van action het HTML-element form weer als een lege tekenreeks wanneer een aanvraag wordt ingediend bij een extensieloze URL waaraan een standaarddocument is toegewezen. In eerdere releases van ASP.NET zou een aanvraag die http://contoso.com moet resulteren in een aanvraag voor Default.aspx. In dat document wordt de openingstag form weergegeven zoals in het volgende voorbeeld:

<form action="Default.aspx" />

In ASP.NET 4 resulteert een aanvraag ook http://contoso.com in een aanvraag voor Default.aspx, maar ASP.NET nu de HTML-openingstag form weer zoals in het volgende voorbeeld:

<form action="" />

Wanneer het action kenmerk een lege tekenreeks is, maakt het IIS-object DefaultDocumentModule een onderliggende aanvraag voor Default.aspx. Onder de meeste omstandigheden is deze onderliggende aanvraag transparant voor toepassingscode en wordt de Default.aspx pagina normaal uitgevoerd. Een mogelijke interactie tussen beheerde code en IIS 7 of IIS 7.5 Geïntegreerde modus kan er echter toe leiden dat beheerde .aspx pagina's niet meer goed werken tijdens de onderliggende aanvraag. Als de volgende voorwaarden optreden, leidt de onderliggende aanvraag naar een standaarddocument .aspx document tot een fout of onverwacht gedrag:

* Er wordt een .aspx pagina naar de browser verzonden met het kenmerk van action het form element ingesteld op ''.
* Het formulier wordt teruggezet naar ASP.NET.
* Een beheerde HTTP-module leest een deel van de hoofdtekst van de entiteit, zoals Request.Form of Request.Params. Hierdoor wordt de hoofdtekst van de POST-aanvraag in het beheerde geheugen gelezen. Hierdoor is de hoofdtekst van de entiteit niet meer beschikbaar voor systeemeigen codemodules die worden uitgevoerd in de geïntegreerde IIS 7- of IIS 7.5-modus.
* Het IIS-object DefaultDocumentModule wordt uiteindelijk uitgevoerd en maakt een onderliggende aanvraag voor het Default.aspx document. Omdat de hoofdtekst van de entiteit echter al is gelezen door een stukje beheerde code, is er geen entiteitstekst beschikbaar om naar de onderliggende aanvraag te verzenden.
* Wanneer de HTTP-pijplijn wordt uitgevoerd voor de onderliggende aanvraag, wordt de handler voor .aspx bestanden uitgevoerd tijdens de handler-execute-fase.

Omdat er geen entiteitstekst is, zijn er geen formuliervariabelen en geen weergavestatus. Er is dus geen informatie beschikbaar voor de .aspx pagina-handler om te bepalen welke gebeurtenis (indien aanwezig) moet worden gegenereerd. Als gevolg hiervan worden geen van de postback-gebeurtenis-handlers voor de betrokken .aspx pagina uitgevoerd.
Zie 'Gebeurtenishandlers worden mogelijk niet gegenereerd in een standaarddocument in IIS 7 of IIS 7.5 Geïntegreerde modus' in het document ASP.NET 4 Belangrijke wijzigingen op de ASP.NET website voor informatie over manieren om problemen te omzeilen die kunnen optreden als gevolg van deze wijziging.
Hash-algoritme ASP.NET maakt gebruik van zowel versleutelings- als hash-algoritmen om gegevens zoals formulierverificatiecookies te beveiligen en de status weer te geven. Standaard gebruikt ASP.NET 4 het HMACSHA256 algoritme voor hashbewerkingen op cookies en de status weergeven. Eerdere versies van ASP.NET het oudere HMACSHA1 algoritme gebruikt. Als u toepassingen uitvoert die ASP.NET 2.0 en ASP.NET 4 combineren, waarbij gegevens zoals formulierverificatiecookies moeten werken in .NET Framework-versies, configureert u een ASP.NET 4-webtoepassing om het oudere HMACSHA1 algoritme te gebruiken door de volgende instelling toe te voegen in het web.config-bestand:

<machineKey validation="SHA1" />
Besturingselementen hosten in Internet Explorer U kunt geen Besturingselementen van Windows Forms meer hosten in Internet Explorer, omdat er betere oplossingen zijn voor het hosten van besturingselementen op internet. Daarom zijn de IEHost.dll en IEExec.exe assembly's verwijderd uit .NET Framework. U kunt de volgende technologieën gebruiken voor het ontwikkelen van aangepaste besturingselementen in webtoepassingen:

* U kunt een Silverlight-toepassing maken en configureren voor uitvoering buiten de browser. Zie Ondersteuning voor niet-browser voor meer informatie.
* U kunt een XAML-browsertoepassing (XBAP) bouwen om te profiteren van WPF-mogelijkheden (vereist .NET Framework op clientcomputers). Zie overzicht van WPF XAML-browsertoepassingen voor meer informatie.
HtmlEncode- en UrlEncode-methoden De HtmlEncode en UrlEncode methoden van de HttpUtility en HttpServerUtility klassen zijn bijgewerkt om het enkele aanhalingsteken (') als volgt te coderen:

* De HtmlEncode methode codeert exemplaren van het enkele aanhalingsteken als &#39;
* De UrlEncode methode codeert exemplaren van het enkele aanhalingsteken als %27
Controleer uw code op plaatsen waar u de HtmlEncode en UrlEncode methoden gebruikt en zorg ervoor dat de wijziging in codering niet resulteert in een wijziging die van invloed is op uw toepassing.
HttpException-fouten in ASP.NET 2.0-toepassingen Nadat ASP.NET 4 is ingeschakeld op IIS 6, kunnen ASP.NET 2.0-toepassingen die worden uitgevoerd op IIS 6 (in Windows Server 2003 of Windows Server 2003 R2) fouten genereren, zoals: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. * Als ASP.NET 4 niet is vereist om de website uit te voeren, moet u de site opnieuw toewijzen om in plaats daarvan ASP.NET 2.0 te gebruiken.

– of –

* Als ASP.NET 4 is vereist om de website uit te voeren, verplaatst u onderliggende ASP.NET 2.0 virtuele mappen naar een andere website die is toegewezen aan ASP.NET 2.0.

– of –

* Schakel extensieloze URL's uit. Zie 'ASP.NET 2.0 Applications Might Generate HttpException Errors That Reference eurl.axd' (HttpException-fouten genereren die verwijzen naar eurl.axd) in het document ASP.NET 4 Belangrijke wijzigingen op de website van ASP.NET.
Lidmaatschapstypen Sommige typen (bijvoorbeeld MembershipProvider) die worden gebruikt in ASP.NET lidmaatschap, zijn verplaatst van System.Web.dll naar de System.Web.ApplicationServices.dll assembly. De typen zijn verplaatst om afhankelijkheden van architectuurlagen tussen typen in de client en in uitgebreide .NET Framework-SKU's op te lossen. Klassebibliotheken die zijn bijgewerkt vanuit eerdere versies van ASP.NET en die gebruikmaken van lidmaatschapstypen die zijn verplaatst, kunnen niet worden gecompileerd wanneer ze worden gebruikt in een ASP.NET 4-project. Zo ja, voeg dan een verwijzing toe aan het klassebibliotheekproject aan System.Web.ApplicationServices.dll.
Wijzigingen in menubesturing Wijzigingen in het Menu besturingselementresultaat in het volgende gedrag:

* Als MenuRenderingMode deze optie is ingesteld op List, of MenuRenderingMode als deze is ingesteld Default4.0 op of ControlRenderingCompatibilityVersion hoger, heeft de PopOutImageUrl eigenschap geen effect.
* Als het pad dat is ingesteld in de StaticPopOutImageUrl en DynamicPopOutImageUrl eigenschappen een backslash (\) bevat, worden de afbeeldingen niet weergegeven. (In eerdere versies van ASP.NET kan het pad een backslash bevatten.)
* In plaats van de PopOutImageUrl eigenschap voor afzonderlijke menu-items in te stellen, stelt u het StaticPopOutImageUrl of DynamicPopOutImageUrl het bovenliggende Menu besturingselement in.

– of –

Instellen op Table, of instellen MenuRenderingModeMenuRenderingMode op Default en instellen op 3.5ControlRenderingCompatibilityVersion . Deze instellingen zorgen ervoor dat het Menu besturingselement de indeling op basis van html-tabellen gebruikt die in eerdere versies van ASP.NET wordt gebruikt.
* Als het pad in de StaticPopOutImageUrl of DynamicPopOutImageUrl eigenschap een backslash (\) bevat, vervangt u een slash (/).
Mobiele assembly in web.config-bestand In eerdere versies van ASP.NET is een verwijzing naar de System.Web.Mobile.dll assembly opgenomen in het hoofdbestand Web.config in de assemblies sectie onder/system.webcompilation . Ter verbetering van de prestaties is de verwijzing naar deze assembly verwijderd.

Opmerking: de System.Web.Mobile.dll assembly en de ASP.NET mobiele besturingselementen zijn opgenomen in ASP.NET 4, maar ze zijn afgeschaft.
Als u typen uit deze assembly wilt gebruiken, voegt u een verwijzing naar de assembly toe in het hoofdbestand Web.config of in een web.config-bestand van de toepassing.
Uitvoercache In ASP.NET 1.0 heeft een fout in de cache pagina's veroorzaakt die zijn opgegeven Location="ServerAndClient" als een instelling voor uitvoercache om een Vary:* HTTP-header in het antwoord te verzenden. Dit heeft tot gevolg dat clientbrowsers de pagina nooit lokaal in de cache moeten opslaan. In ASP.NET 1.1 is de SetOmitVaryStar methode toegevoegd, die kan worden aangeroepen om de Vary:* header te onderdrukken. Foutrapporten stellen echter voor dat ontwikkelaars zich niet bewust zijn van het bestaande SetOmitVaryStar gedrag.

In ASP.NET 4 wordt de Vary:* HTTP-header niet meer verzonden uit antwoorden die de volgende instructie opgeven:

<%@ OutputCache Location="ServerAndClient" %>

Als gevolg hiervan is de SetOmitVaryStar methode niet meer nodig om de Vary:* header te onderdrukken. In toepassingen die 'ServerAndClient' voor het Location kenmerk opgeven, kunnen pagina's in de browser worden opgeslagen zonder dat u dit hoeft aan te roepen SetOmitVaryStar.
Als pagina's in de toepassing moeten worden verzonden Vary:*, roept u de AppendHeader methode aan, zoals wordt weergegeven in het volgende voorbeeld:

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

U kunt ook de waarde van het kenmerk uitvoercaching Location wijzigen in 'Server'.
Paginaparsering De paginaparser voor ASP.NET webpagina's (.aspx bestanden) en gebruikersbesturingselementen (.ascx-bestanden) is strenger in ASP.NET 4 dan in eerdere versies van ASP.NET en markeert meer markeringen als ongeldig dan in eerdere versies. Bekijk foutberichten die worden geproduceerd wanneer een pagina wordt uitgevoerd en los fouten op die het gevolg zijn van ongeldige markeringen.
Paspoorttypen De Passport-ondersteuning die is ingebouwd in ASP.NET 2.0 is verouderd en wordt niet ondersteund vanwege wijzigingen in Passport (nu Live ID SDK). Als gevolg hiervan worden de typen die zijn gerelateerd aan Passport nu System.Web.Security gemarkeerd met het ObsoleteAttribute kenmerk. Wijzig alle code die gebruikmaakt van Passport-typen in de System.Web.Security naamruimte (bijvoorbeeld PassportIdentity) om de Windows Live ID SDK te gebruiken.
PathInfo-informatie in de eigenschap FilePath ASP.NET 4 bevat niet langer de PathInfo waarde in de retourwaarden van eigenschappen zoals FilePath, AppRelativeCurrentExecutionFilePathen CurrentExecutionFilePath. In plaats daarvan is de PathInfo informatie beschikbaar in PathInfo. Stel bijvoorbeeld het volgende URL-fragment voor:

/testapp/Action.mvc/SomeAction

In eerdere versies van ASP.NET HttpRequest hebben eigenschappen de volgende waarden:

* FilePath: /testapp/Action.mvc/SomeAction
* PathInfo: (leeg)

In ASP.NET 4 HttpRequest hebben eigenschappen in plaats daarvan de volgende waarden:

* FilePath: /testapp/Action.mvc
* PathInfo: SomeAction
Bekijk uw code voor plaatsen waar u afhankelijk bent van eigenschappen van de HttpRequest klasse om padgegevens te retourneren. Wijzig de code zodat deze overeenkomt met de wijzigingen in de wijze waarop padgegevens worden geretourneerd.
Aanvraagvalidatie Ter verbetering van de aanvraagvalidatie wordt de ASP.NET aanvraagvalidatie eerder in de levenscyclus van de aanvraag aangeroepen. Als gevolg hiervan wordt aanvraagvalidatie uitgevoerd voor aanvragen die niet voor .aspx bestanden zijn, zoals voor webservice-aanroepen en voor aangepaste handlers. Aanvraagvalidatie is ook actief wanneer aangepaste HTTP-modules worden uitgevoerd in de pijplijn voor aanvraagverwerking.

Als gevolg van deze wijziging kunnen aanvragen voor andere resources dan .aspx bestanden validatiefouten genereren. Aangepaste code die wordt uitgevoerd in de aanvraagpijplijn (bijvoorbeeld aangepaste HTTP-modules) kan ook validatiefouten voor aanvragen veroorzaken.
Indien nodig kunt u terugkeren naar het oude gedrag van alleen .aspx pagina's die aanvraagvalidatie activeren met behulp van de volgende instelling in het webconfiguratiebestand:

<httpRuntime requestValidationMode="2.0" />

Waarschuwing: als u teruggaat naar het oude gedrag, moet u ervoor zorgen dat alle code in bestaande handlers, modules en andere aangepaste code controles uitvoert op mogelijk onveilige HTTP-invoer die XSS-aanvalsvectoren kunnen zijn.
Routering Als u een bestandssysteemwebsite maakt in Visual Studio 2010 en de website zich in een map bevindt die een punt (.) in de mapnaam bevat, werkt URL-routering niet betrouwbaar. Er wordt een HTTP 404-fout geretourneerd vanuit een aantal virtuele paden. Dit komt doordat Visual Studio 2010 de Visual Studio Development Server start met behulp van een onjuist pad voor de virtuele hoofdmap. * Wijzig op de pagina Eigenschappen voor de website op basis van bestanden het kenmerk Virtueel pad in '/'.

– of –

* Maak een webtoepassingsproject in plaats van een websiteproject. Webtoepassingsprojecten hebben dit probleem niet en URL-routering werkt zelfs als de projectmap een punt in de naam heeft.

– of –

* Maak een HTTP-website die wordt gehost in IIS. IiS-gehoste websites kunnen punten in het virtuele pad en in de projectbestandsmap hebben.
SharePoint-sites Als u probeert een ASP.NET 4-website uit te voeren die is geïmplementeerd als een onderliggend element van een SharePoint-website met een aangepast gedeeltelijk vertrouwensniveau met de naam WSS_Minimal, wordt de volgende fout weergegeven:

Could not find permission set named 'ASP.Net'.
Momenteel zijn er geen versies van SharePoint compatibel met ASP.NET. Als gevolg hiervan moet u geen ASP.NET 4-website uitvoeren als onderliggend element van een SharePoint-website.
XHTML 1.1-standaarden Als u XHTML 1.1-naleving wilt inschakelen voor nieuwe websites, worden met de ASP.NET-besturingselementen in .NET Framework 4 XHTML 1.1-compatibele HTML gegenereerd. Deze rendering is ingeschakeld met behulp van de volgende optie in het Web.config-bestand in het <system.Web> element:

<pages controlRenderingCompatibilityVersion="4.0"/>

Deze optie is standaard ingesteld op 4.0. Webprojecten die zijn bijgewerkt vanuit Visual Studio 2008, hebben de instelling 3.5 ingeschakeld voor compatibiliteit.
Geen.

Basis

Algemene functies

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Cardspace Windows CardSpace is niet meer opgenomen in .NET Framework; het wordt afzonderlijk verstrekt. Download Windows CardSpace via het Microsoft Downloadcentrum.
Configuratiebestanden Er zijn correcties aangebracht in de wijze waarop .NET Framework toegang krijgt tot toepassingsconfiguratiebestanden. Als uw toepassingsconfiguratiebestand de naam application-name.config heeft, wijzigt u de naam ervan in application-name.exe.config. Wijzig bijvoorbeeld de naam van MyApp.config in MyApp.exe.config.
C#-codecompilator De Compiler, CompilerErroren ErrorLevel klassen in de Microsoft.CSharp naamruimte zijn niet meer beschikbaar en hun assembly (cscompmgd.dll) is niet meer opgenomen in .NET Framework. Gebruik de CodeDomProvider klasse en andere klassen in de System.CodeDom.Compiler naamruimte. Zie Het codeDOM gebruiken voor meer informatie.
Hosting (niet-beheerde API) Om de hostingmogelijkheden te verbeteren, zijn sommige api's voor hostingactivering afgeschaft. Met in-proces naast elkaar uitgevoerde functies kan een toepassing meerdere versies van .NET Framework in hetzelfde proces laden en starten. U kunt bijvoorbeeld toepassingen uitvoeren die invoegtoepassingen (of onderdelen) laden die zijn gebaseerd op .NET Framework 2.0 SP1 en invoegtoepassingen die zijn gebaseerd op .NET Framework 4 in hetzelfde proces. Oudere onderdelen blijven de oudere .NET Framework-versie gebruiken en nieuwe onderdelen gebruiken de nieuwe .NET Framework-versie. Gebruik de configuraties die worden beschreven in de uitvoering naast elkaar.
Nieuw beveiligingsmodel Het CAS-beleid (Code Access Security) is uitgeschakeld en vervangen door een vereenvoudigd model, zoals beschreven in Beveiligingswijzigingen in .NET Framework 4. Mogelijk zijn er wijzigingen vereist als u afhankelijk bent van CAS in uw toepassingen. Zie Compatibiliteit en migratie van beveiligingsbeleid voor codetoegang voor meer informatie.

Datum en tijd

Naamruimte: System

Assembly: mscorlib (in mscorlib.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Zomertijd Om consistent te zijn met de systeemklok, gebruiken tijdeigenschappen (zoals Local en Now) nu besturingssysteemregels in plaats van andere .NET Framework-gegevens voor zomertijdbewerkingen. Geen.
Tekenreeksen opmaken Ter ondersteuning van cultuurgevoelige opmaak bevat de TimeSpan structuur nieuwe overbelastingen van de ToString, Parseen TryParse methoden naast nieuwe ParseExact en TryParseExact methoden. Geen.

Globalisatie

Zie What's New in Globalization and Localization and Localization(What's New in Globalization and Localization) voor een lijst met nieuwe neutrale en specifieke culturen.

Naamruimte: System.Globalization

Assembly: mscorlib (in mscorlib.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Cultuurnamen De volgende naamwijzigingen zijn van invloed op de Duitse, Divehi- en Afrikaanse culturen:

* CurrencyEnglishName: De valutanaam voor de Duitse cultuur (Zwitserland) (de-CH) is veranderd van "sFr." in "Fr.".
* LongDatePattern: Het lange datumpatroon voor de Divehi -cultuur (Dv-MV) is veranderd van "dd/MMMM/jjjj" in "dd/MM/jjjj".
* PMDesignator: De P.M. designator van de Afrikaanse (Zuid-Afrika) cultuur (af-ZA) is veranderd van "nm" in "PM".
Let op wijzigingen in de cultuurnaam.
LCID-parameter Om consistent te zijn met verwacht gedrag in automatiseringsserverinstellingen, geeft de CLR de huidige cultuur voor de LCID parameter niet langer door aan onbeheerde COM-toepassingen. In plaats daarvan passeert het 1033 (en-us) voor de cultuur. Er zijn geen wijzigingen nodig, behalve voor systeemeigen toepassingen waarvoor een opgegeven cultuur is vereist.
Verouderde cultuurtypen De CultureTypes en CultureTypes cultuurtypen zijn nu verouderd.

Voor compatibiliteit met CultureTypes eerdere versies retourneert nu neutrale en specifieke culturen die zijn opgenomen in het vorige .NET Framework en CultureTypes wordt nu een lege lijst geretourneerd.
Gebruik andere waarden van de CultureTypes opsomming.
Cultuur ophalen Vanaf Windows 7 haalt .NET Framework 4 cultuurgegevens op uit het besturingssysteem in plaats van de gegevens zelf op te slaan. Daarnaast synchroniseert .NET Framework met Windows voor het sorteren en hoofdlettergebruik van gegevens. Geen.
Unicode 5.1-standaarden .NET Framework ondersteunt nu alle Unicode 5.1-tekens, een toevoeging van ongeveer 1400 tekens. De extra tekens zijn onder andere nieuwe symbolen, pijlen, diakritische tekens, interpunctie, wiskundige symbolen, CJK-pennenstreken en ideografieën, extra numerieke tekens van Malayalam en Telugu, en verschillende tekens uit Myanmar, Latijns, Arabisch, Grieks, Mongools en Cyrillisch. De volgende nieuwe scripts worden ondersteund met Unicode 5.1: Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu, en Malayalam tekens en Cham. Geen.

Uitzonderingen

Naamruimten: System, System.Runtime.ExceptionServices

Assembly: mscorlib (in mscorlib.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Uitzonderingen voor beschadigde processtatus De CLR levert geen uitzonderingen meer voor beschadigde processtatussen aan uitzonderingshandlers in beheerde code. Deze uitzonderingen geven aan dat de status van een proces is beschadigd. Het wordt afgeraden om uw toepassing in deze status uit te voeren.

Zie de HandleProcessCorruptedStateExceptionsAttribute vermelding Handling Corrupted State Exceptions in het MSDN magazine voor meer informatie.
Uitzonderingen voor uitvoeringsengine ExecutionEngineException is nu verouderd, omdat een ondervangbare uitzondering een instabiele proces kan blijven uitvoeren. Deze wijziging verbetert de voorspelbaarheid en betrouwbaarheid in de runtime. Gebruik een InvalidOperationException om de voorwaarde aan te geven.

Reflectie

Naamruimte: System.Reflection

Assembly: mscorlib (in mscorlib.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Assembly-hashalgoritmen De HashAlgorithm eigenschap retourneert AssemblyHashAlgorithmnu, omdat de runtime het hash-algoritme van de assembly waarnaar wordt verwezen niet weet wanneer de assembly niet wordt geladen. (Dit verwijst naar het gebruik van de eigenschap op een assembly waarnaar wordt verwezen, zoals die geretourneerd door de GetReferencedAssemblies methode.) Geen.
Assembly laden Om redundant laden van assembly's te voorkomen en virtuele adresruimte te besparen, laadt de CLR nu assembly's met behulp van alleen de Win32-functie MapViewOfFile . De functie wordt niet meer aangeroepen LoadLibrary .

Deze wijziging is van invloed op diagnostische toepassingen op de volgende manieren:

* A ProcessModuleCollection bevat geen modules meer uit een klassebibliotheek (.dll bestand), zoals verkregen door een aanroep naar Process.GetCurrentProcess().Modules.
* Win32-toepassingen die gebruikmaken van de EnumProcessModules functie, zien niet alle beheerde modules worden vermeld.
Geen.
Type declareren De DeclaringType eigenschap retourneert nu juist null als het type geen declarerend type heeft. Geen.
Afgevaardigden Een gemachtigde genereert nu een ArgumentNullException in plaats van een NullReferenceException wanneer een null-waarde wordt doorgegeven aan de constructor van de gemachtigde. Zorg ervoor dat elke uitzonderingsafhandeling van vangsten ArgumentNullException.
Locatie van globale assemblycache wijzigen Voor .NET Framework 4-assembly's is de globale assemblycache verplaatst van de Windows-map (%WINDIR%) naar de Microsoft.Net submap (%WINDIR%\Microsoft.Net). Assembly's uit eerdere versies blijven in de oudere map staan.

De niet-beheerde ASM_CACHE_FLAGS opsomming bevat de nieuwe ASM_CACHE_ROOT_EX vlag. Met deze vlag wordt de cachelocatie voor .NET Framework 4-assembly's opgehaald, die kunnen worden verkregen door de functie GetCachePath .
Geen, ervan uitgaande dat toepassingen geen expliciete paden gebruiken voor assembly's, wat geen aanbevolen procedure is.
Global Assembly Cache Tool Het Gacutil.exe (Global Assembly Cache Tool) biedt geen ondersteuning meer voor de shell-invoegtoepassingsviewer. Geen.

Interoperabiliteit

Naamruimte: System.Runtime.InteropServices

Assembly: mscorlib (in mscorlib.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Bufferlengte (niet-beheerde API) Om geheugen op te slaan, is de functionaliteit voor de pBufferLengthOffset parameter voor de methode ICorProfilerInfo2::GetStringLayout gewijzigd zodat deze overeenkomt met de pStringLengthOffset parameter. Beide parameters verwijzen nu naar de offsetlocatie van de lengte van de tekenreeks. De bufferlengte is verwijderd uit de weergave van de tekenreeksklasse. Verwijder eventuele afhankelijkheid van de bufferlengte.
JIT-foutopsporing Ter vereenvoudiging van de registratie voor Just-In-Time-foutopsporing (JIT) gebruikt het .NET Framework-foutopsporingsprogramma nu alleen de registersleutel AeDebug, waarmee het JIT-foutopsporingsgedrag voor systeemeigen code wordt bepaald. Deze wijziging resulteert in het volgende:

* U kunt geen twee verschillende foutopsporingsprogramma's meer registreren voor beheerde en systeemeigen code.
* U kunt het foutopsporingsprogramma niet meer automatisch starten voor een niet-interactief proces, maar u kunt de gebruiker vragen om een interactief proces.
* U ontvangt geen melding meer wanneer het foutopsporingsprogramma niet kan worden gestart of wanneer er geen geregistreerd foutopsporingsprogramma is gestart.
* Beleid voor automatisch starten dat afhankelijk is van de interactiviteit van de toepassing, wordt niet meer ondersteund.
Pas de foutopsporingsbewerkingen naar behoefte aan.
Platform aanroepen Als u de prestaties in de interoperabiliteit met niet-beheerde code wilt verbeteren, worden onjuiste aanroepconventies in een platform nu veroorzaakt dat de toepassing mislukt. In eerdere versies loste de marshalllaag deze fouten op de stapel op. Fouten opsporen in uw toepassingen in Microsoft Visual Studio waarschuwt u voor deze fouten, zodat u ze kunt corrigeren.

Als u binaire bestanden hebt die niet kunnen worden bijgewerkt, kunt u het element NetFx40_PInvokeStackResilience> opnemen in het <configuratiebestand van uw toepassing om aanroepende fouten op te lossen zoals in eerdere versies. Dit kan echter van invloed zijn op de prestaties van uw toepassing.
Verwijderde interfaces (niet-beheerde API) Om verwarring bij ontwikkelaars te voorkomen, zijn de volgende interfaces verwijderd, omdat ze geen nuttige runtimescenario's bieden en de CLR geen implementaties heeft verstrekt of accepteert:

* INativeImageINativeImageDependency
* INativeImageInstallInfo
* INativeImageEvaluate
* INativeImage Converter
* ICorModule
* IMetaData Converter
Geen.

Gegevens

In deze sectie worden migratieproblemen beschreven voor het gebruik van gegevenssets en SQL-clients, entity framework, LINQ naar SQL en WCF-gegevensservers (voorheen bekend als ADO.NET Data Services).

DataSet en SQL Client

In de volgende tabel worden verbeteringen beschreven in functies die eerder beperkingen of andere problemen hadden.

Naamruimten: System.Data, System.Data.Objects.DataClassesSystem.Data.SqlClient

Assembly's: System.Data (in System.Data.dll), System.Data.Entity (in System.Data.Entity.dll)

Functie Verschillen van 3.5 SP1
POCO-scenario's De IRelatedEnd interface heeft nieuwe methoden om de bruikbaarheid te verbeteren in POCO-scenario's (Plain Old CLR Object). Deze nieuwe methoden nemen een Object in plaats van een IEntityWithRelationships entiteit als parameter.
Rijen bewerken De IndexOf methode, zoals geïmplementeerd door de DataView klasse, retourneert nu de waarde van een rij die wordt bewerkt, in plaats van -1 te retourneren.
Gebeurtenissen De PropertyChanged gebeurtenis wordt nu gegenereerd wanneer een rij een gewijzigde status heeft en de RejectChanges methode wordt aangeroepen. Deze wijziging maakt het eenvoudiger om UI-besturingselementen te maken die de inhoud van een DataSet object beschikbaar maken.
Uitzonderingen De Prepare methode genereert nu een InvalidOperationException wanneer een verbinding niet is ingesteld of geopend in plaats van een NullReferenceException.
Toewijzingsweergaven Toewijzingsfouten in queryweergaven worden nu op het ontwerptijd gedetecteerd in plaats van een NullReferenceException runtime te genereren.

Bij toewijzingsvalidatie wordt nu de fout onderschept waarin twee koppelingssets in conceptueel schema (CSDL) zijn toegewezen aan dezelfde kolom.
Transacties Als een toepassing probeert een instructie uit te voeren op een verbinding nadat een transactie is voltooid (inclusief afgebroken of teruggedraaid), wordt er nu een InvalidOperationException gegenereerd. In eerdere versies is geen uitzondering gegenereerd en kunt u extra opdrachten uitvoeren, zelfs als een transactie is afgebroken.

Entity Framework

In de volgende tabel worden verbeteringen beschreven in functies die eerder beperkingen of andere problemen hadden.

Naamruimten: System.Data, System.Data.ObjectsSystem.Data.Objects.DataClasses

Assembly's: System.Data.Entity (in System.Data.Entity.dll)

Functie Verschillen van 3.5 SP1
Entiteitsobjecten Er is nu pariteit tussen de Detach methode en de status van het entiteitsobject wanneer de SaveChanges methode wordt aangeroepen. Deze verbeterde consistentie voorkomt dat onverwachte uitzonderingen worden gegenereerd.
Entiteits-SQL Regels zijn verbeterd voor id-oplossingen in Entity SQL.

De Entiteit SQL-parser heeft verbeterde logica voor het omzetten van id's met meerdere onderdelen.
Structurele aantekeningen Het Entity Framework herkent nu structurele aantekeningen.
Query's De volgende verbeteringen zijn aangebracht in query's:

* Een GroupBy query met een null-sleutel voor een lege verzameling retourneert geen rijen, ongeacht of er extra selecties in de query zijn.
* Gegenereerde SQL in LINQ- en Entity-SQL-query's behandelen nu standaard tekenreeksparameters als niet-Unicode-waarden.

LINQ naar SQL

In de volgende tabel worden verbeteringen beschreven in functies die eerder beperkingen of andere problemen hadden.

Naamruimte: System.Data.Linq

Assembly: System.Data.Linq (in System.Data.Linq.dll)

Functie Verschillen van 3.5 SP1
Gebeurtenissen Een EntitySet<TEntity> verzameling genereert nu de ListChanged gebeurtenis voor het toevoegen en verwijderen van bewerkingen als de EntitySet<TEntity> bewerkingen worden verwijderd, naast het verhogen van de gebeurtenis wanneer de verzameling wordt geladen.
Query's Skip(0) wordt niet langer genegeerd in LINQ naar SQL-query's. Als gevolg hiervan kunnen query's met deze methode zich anders gedragen. In sommige gevallen is er bijvoorbeeld een OrderBy component vereist met Skip(0). De query genereert nu een NotSupportedException uitzondering als de OrderBy component niet is opgenomen.

WCF Data Services

In de volgende tabel worden verbeteringen beschreven in functies die eerder beperkingen of andere problemen hadden.

Naamruimten: System.Data.Services, System.Data.Services.Client, System.Data.Services.CommonSystem.Data.Services.Providers

Assembly's: System.Data.Services (in System.Data.Services.dll), System.Data.Services.Client (in System.Data.Services.Client.dll)

Functie Verschillen van 3.5 SP1
Gebatcheerde binaire inhoud WCF Data Services ondersteunt nu batchgewijze binaire inhoud in aanvragen en antwoorden.
Onderscheppingspunt wijzigen Wijzigingsinter interceptors worden nu uitgevoerd voor een verwijderaanvraag.

Een wijzigingsinterpunt is een methode die wordt uitgevoerd telkens wanneer een aanvraag wordt ontvangen door de server om een entiteit in de entiteitsset te wijzigen. Deze wordt uitgevoerd voordat de binnenkomende aanvraag wordt uitgevoerd. De snijpuntwijziging biedt toegang tot de entiteit die wordt gewijzigd en de bewerking die erop wordt uitgevoerd.
Uitzonderingen De volgende voorwaarden genereren nu nuttigere uitzonderingen in plaats van een NullReferenceException:

* Een TimeoutException time-out wanneer een aanroep naar een gegevensservice een time-out optreedt.
* Een DataServiceRequestException wanneer een ongeldige aanvraag wordt ingediend bij een gegevensservice.

In uw toepassingen moet u de verwerking van uitzonderingen wijzigen om de nieuwe uitzonderingen te ondervangen.
Kopteksten De volgende verbeteringen zijn aangebracht in headers:

* WCF Data Services weigert nu correct een eTag header met een niet-opgegeven waarde.
* WCF Data Services retourneert nu een fout en voert de aanvraag voor een verwijderaanvraag niet uit naar een koppeling wanneer een if-* header zich in de aanvraag bevindt.
* WCF Data Services retourneert nu een fout naar de client in de indeling (Atom, JSON) die de client heeft opgegeven in de header Accepteren.
JSON-lezer De JSON-lezer (JavaScript Object Notation) retourneert nu een fout wanneer het escape-teken met één backslash (\) wordt gelezen, wanneer JSON-nettoladingen worden verwerkt die naar een WCF-gegevensservice worden verzonden.
Samengevoegd De volgende verbeteringen zijn aangebracht in de MergeOption opsomming:

* De MergeOption samenvoegoptie wijzigt de entiteit op de client niet meer als gevolg van een volgende reactie van een gegevensservice.
* De MergeOption optie is nu consistent tussen dynamische SQL en opgeslagen updates op basis van procedures.
Aanvragen De OnStartProcessingRequest methode wordt nu aangeroepen voordat een aanvraag voor gegevensservices wordt verwerkt. Hierdoor kan de aanvraag correct werken voor ServiceOperation services.
Streams WCF Data Services sluit de onderliggende stroom niet meer voor lees- en schrijfbewerkingen.
Uris Het ontsnappen van URI's door de WCF Data Services-client is gecorrigeerd.

Windows Communication Foundation (WCF)

In de volgende tabel worden verbeteringen beschreven in functies die eerder beperkingen of andere problemen hadden.

Functie Verschillen van 3.5 SP1
Configuratiebestanden Om overname van gedrag via de configuratiebestandshiërarchie mogelijk te maken, biedt WCF nu ondersteuning voor het samenvoegen van configuratiebestanden.

Het configuratieovernamemodel is nu uitgebreid om gebruikers gedrag te laten definiëren dat wordt toegepast op alle services die op de computer worden uitgevoerd.

U kunt gedragswijzigingen tegenkomen als er gedrag is met dezelfde naam op verschillende niveaus van de hiërarchie.
Servicehosting U kunt het <serviceHostingEnvironment> configuratie-element niet meer opgeven op serviceniveau door het kenmerk allowDefinition="MachineToApplication" toe te voegen aan de elementdefinitie.

Het opgeven van het <serviceHostingEnvironment> element op serviceniveau is technisch onjuist en veroorzaakt inconsistent gedrag.

Windows Presentation Foundation (WPF)

Toepassingen

Naamruimten: System.Windows, System.Windows.Controls

Assembly's: PresentationFramework (in PresentationFramework.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Afhandeling van uitzonderingen Om fouten eerder te detecteren, genereert WPF een TargetInvocationException en stelt wpf de InnerException eigenschap in op kritieke uitzonderingen, zoals NullReferenceException, OutOfMemoryException, StackOverflowExceptionen , in SecurityExceptionplaats van de oorspronkelijke uitzondering te ondervangen. Geen.
Gekoppelde resources Om het koppelen eenvoudiger te maken, gebruiken resourcebestanden (zoals afbeeldingen) die zich op een andere locatie bevinden dan de mapstructuur van het project, het volledige pad van het resourcebestand in plaats van alleen de bestandsnaam als de resource-id wanneer de toepassing wordt gebouwd. De toepassing kan de bestanden tijdens runtime vinden. Geen.
Toepassingen met gedeeltelijke vertrouwensrelatie Voor beveiligingsoverwegingen genereren Windows-toepassingen die worden uitgevoerd in gedeeltelijke vertrouwensrelatie en die een WebBrowser besturingselement of een Frame besturingselement met HTML bevatten, een SecurityException wanneer het besturingselement wordt gemaakt.

Browsertoepassingen genereren een uitzondering en geven een bericht weer als aan alle volgende voorwaarden wordt voldaan:

* De toepassing wordt uitgevoerd in Firefox.
* De toepassing wordt uitgevoerd in gedeeltelijke vertrouwensrelatie in de internetzone vanaf niet-vertrouwde sites.
* De toepassing bevat een WebBrowser besturingselement of een Frame besturingselement dat HTML bevat.

Toepassingen die worden uitgevoerd vanaf vertrouwde sites of vanuit de intranetzone, worden niet beïnvloed.
In uw browsertoepassingen kunt u deze wijziging vereenvoudigen door een van de volgende handelingen uit te voeren:

* Voer de browsertoepassing volledig vertrouwen uit.
* Laat klanten de site van de toepassing toevoegen aan de zone vertrouwde sites.
Resourcewoordenlijsten Als u resourcewoordenlijsten op themaniveau wilt verbeteren en wilt voorkomen dat ze worden gewijzigd, worden resources die zijn gedefinieerd in een resourcewoordenlijst en samengevoegd in een woordenlijst op themaniveau, nu altijd gemarkeerd als geblokkeerd en onveranderbaar. Dit is het verwachte gedrag voor gratis resources. Toepassingen die een resource wijzigen die is gedefinieerd in een samengevoegde woordenlijst op themaniveau, moeten de resource klonen en de gekloonde kopie wijzigen. U kunt de resource ook markeren zodat de ResourceDictionary nieuwe kopie wordt gemaakt x:Shared="false" telkens wanneer de resource wordt opgevraagd.
Windows 7 Om WPF-toepassingen beter te laten werken in Windows 7, zijn de volgende verbeteringen aangebracht om het gedrag van een venster te corrigeren:

* Dock- en gebarenstatussen werken nu zoals verwacht op basis van gebruikersinteracties.
* De taakbalkopdrachten trapsgewijs vensters, vensters weergeven gestapeld en Vensters naast elkaar weergeven hebben nu het juiste gedrag en de juiste eigenschappen bijwerken.
* De Top, Left, en WidthHeight eigenschappen voor een gemaximaliseerd of geminimaliseerd venster bevatten nu de juiste herstellocatie van het venster in plaats van andere waarden, afhankelijk van de monitor.
Geen.
Windows-stijl en transparantie Er InvalidOperationException wordt een gegenereerd als u probeert in te stellen WindowStyle op een andere waarde dan WindowStyle wanneer AllowsTransparency en trueWindowState is WindowState. Als u de WindowStyle wanneer AllowsTransparencytruemoet wijzigen, kunt u de Win32-functie SetWindowLongPtr aanroepen.
XPS Viewer WPF bevat niet het Microsoft XML Paper Specification Essentials Pack (XPSEP). XPSEP is opgenomen in Windows 7 en Windows Vista.

Op een computer waarop Windows XP wordt uitgevoerd zonder .NET Framework 3.5 SP1 geïnstalleerd, is afdrukken met een andere WPF-API dan die waarin PrintDialog wordt uitgevoerd, afhankelijk van de WINSPOOL. Sommige printermogelijkheden worden niet gerapporteerd en sommige printerinstellingen worden niet toegepast tijdens het afdrukken.
Installeer indien nodig het Microsoft XML Paper Specification Essentials Pack.

Besturingselementen

Naamruimten: System.Windows, System.Windows.Controls, System.Windows.DataSystem.Windows.Input

Assembly's: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Dialoogvensters Om de betrouwbaarheid te verbeteren, wordt de ShowDialog methode aangeroepen op dezelfde thread die het FileDialog besturingselement heeft gemaakt. Zorg ervoor dat u een FileDialog besturingselement maakt en de ShowDialog methode aanroept op dezelfde thread.
Zwevende vensters Als u de focusherstellogica wilt herstellen die een zwevend venster onjuist activeert (zodat het lijkt op een modaal dialoogvenster), wordt het herstellen van de focus nu voorkomen als de kandidaat geen onderliggend element van het venster is. Geen.
Items in verzamelingen Wanneer een item wordt verplaatst of toegevoegd aan een onderliggende verzameling, wordt het weergegeven op CollectionView dezelfde relatieve locatie als het CollectionView niet is gesorteerd. Dit biedt consistentie tussen de positie van het item in de verzameling en in de bijbehorende CollectionView. Gebruik de ContainerFromItem of IndexOf methode om de locatie van een item te vinden in een CollectionView plaats van te vertrouwen op een vaste locatie van een item.
Indelingen Als u onnodige herindelingen wilt voorkomen, wijzigt u de ShowsNavigationUI indeling niet meer of veroorzaakt u een andere indeling. Als u verwacht dat wijzigingen ShowsNavigationUI leiden tot een andere indelingspas, roept u de aanroep InvalidateVisual na het instellen van de eigenschap.
Menu's Als u ClearType-tekst in pop-ups van het menu wilt inschakelen, zijn wijzigingen aangebracht in de ControlTemplate klasse en in het MenuItem besturingselement en andere besturingselementen. Toepassingen mogen niet afhankelijk zijn van de visuele structuur van besturingssjablonen. Alleen benoemde delen van een contract ControlTemplate maken deel uit van het openbare contract. Als een toepassing een bepaald object in een ControlTemplateobject moet vinden, zoekt u in de visualstructuur naar een specifiek type in plaats van te vertrouwen op een vaste locatie van een object in de structuur.
Navigeren Als een Frame rechtstreeks naar een locatie navigeert, is true de IsNavigationInitiator eigenschap na de eerste navigatie. Deze wijziging voorkomt dat er extra gebeurtenissen worden gegenereerd tijdens opstartscenario's. Geen.
Pop-ups De CustomPopupPlacementCallback gemachtigde kan nu meerdere keren worden aangeroepen tijdens een indelingspas in plaats van slechts één keer. Als uw CustomPopupPlacementCallback gemachtigde de positie van een Popup waarde berekent op basis van de vorige positie, berekent u de positie alleen opnieuw als de waarden van de popupSize, targetSizeof offset parameters veranderen.
Eigenschapswaarden Met SetCurrentValue de methode kunt u nu een eigenschap instellen op een effectieve waarde, hoewel deze elke binding, stijl of trigger blijft respecteren die van invloed zijn op de eigenschap. Auteurs van besturingselementen moeten gebruiken SetCurrentValue wanneer de eigenschapswaarde wordt gewijzigd als een neveneffect van een andere actie, waaronder het bewerken van gebruikers.
Tekstvakken Voor beveiligingsoverwegingen mislukken de en Cut methoden op de Copy achtergrond wanneer ze in gedeeltelijke vertrouwensrelatie worden aangeroepen.

Bovendien wordt programmatische uitvoering van de Copy of Cut eigenschap op een besturingselement waarvan de overname TextBoxBase betrekking heeft, geblokkeerd in gedeeltelijke vertrouwensrelatie. Door de gebruiker geïnitieerde opdrachten voor kopiëren en knippen, zoals klikken op een knop waarvan Command de eigenschap is gebonden aan een van deze opdrachten, werkt echter wel. Standaard kopiëren en knippen door sneltoetsen en het contextmenu werkt nog steeds zoals voorheen in gedeeltelijk vertrouwen.
Koppel de of Cut opdracht aan een door de Copy gebruiker geïnitieerde actie, zoals klikken op een knop.

Afbeeldingen

Naamruimten: System.Windows, System.Windows.Controls, System.Windows.Data, , System.Windows.InputSystem.Windows.Media.Effects

Assembly's: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Bitmapeffecten Om de prestaties te verbeteren, zijn de BitmapEffect klasse en de klassen die overnemen van de BitmapEffect klasse, hoewel ze nog aanwezig zijn, uitgeschakeld. Het effect wordt weergegeven met behulp van de hardwareversnelde renderingpijplijn als aan de volgende voorwaarden wordt voldaan:

* De toepassing maakt gebruik van een DropShadowBitmapEffect of een BlurBitmapEffect met een radius-eigenschap die kleiner is dan 100 DIU.
* De videokaart op de computer waarop de toepassing wordt uitgevoerd, ondersteunt pixel-shader 2.0.

Als niet aan deze voorwaarden wordt voldaan, heeft een BitmapEffect object geen effect.

Visual Studio produceert ook een compilerwaarschuwing wanneer het object of een subklasse tegenkomt BitmapEffect .

De PushEffect methode is gemarkeerd als verouderd.
Stop met het gebruik van de verouderde BitmapEffect en afgeleide klassen en gebruik in plaats daarvan de nieuwe klassen die zijn afgeleid van Effect: BlurEffect, DropShadowEffecten ShaderEffect.

U kunt ook uw eigen effecten maken door deze over te nemen van de ShaderEffect klasse.
Bitmapframes De gekloonde BitmapFrame objecten ontvangen nu de DownloadProgress, DownloadCompleteden DownloadFailed gebeurtenissen. Hierdoor kunnen afbeeldingen die worden gedownload van het web en worden toegepast op het Image besturingselement, correct Style werken.

U ziet alleen een wijziging in gedrag als alle volgende instructies waar zijn:

* U abonneert u op de DownloadProgress, DownloadCompletedof DownloadFailed gebeurtenis.
* De bron van het BitmapFrame web is.
* De BitmapFrame kloon wordt gekloond terwijl het downloaden nog bezig is.
Controleer de afzender in de gebeurtenis-handler en neem alleen actie als de afzender de oorspronkelijke BitmapFrameis.
Afbeeldingen decoderen Om te voorkomen dat een IOException afbeelding niet wordt verwerkt wanneer afbeeldingen mogelijk niet decoderen, wordt de BitmapSourceDecodeFailed gebeurtenis gegenereerd wanneer een afbeelding niet wordt gedecodeerd. Verwijder eventuele afhandeling van uitzonderingen voor IOExceptionen gebruik de DecodeFailed gebeurtenis om te controleren of er een fout is gedecodeerd.

Invoer

Naamruimten: System.Windows, System.Windows.Controls, System.Windows.DataSystem.Windows.Input

Assembly's: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Binding-opdrachtexemplaren Als u een mechanisme wilt bieden voor het binden van opdrachtexemplaren op basis van view-model aan invoerbewegingen op basis van weergave, neemt de InputBinding klasse nu over van Freezable in plaats van DependencyObject. De volgende eigenschappen zijn nu afhankelijkheidseigenschappen:

* Command
* CommandParameter
* CommandTarget

Deze wijziging resulteert in het volgende:

* Een InputBinding object wordt nu geblokkeerd wanneer het is geregistreerd in plaats van onveranderbaar te blijven.
* U hebt geen toegang tot objecten op exemplaarniveau InputBinding van meerdere threads, vanwege de beperkingen van de DependencyObject klasse.
* U kunt invoerbindingen op klasseniveau niet dempen na de registratie, vanwege de beperkingen van de Freezable klasse.
* U kunt geen invoerbindingen opgeven voor opdrachtexemplaren die zijn gemaakt in een weergavemodel.
Maak afzonderlijke exemplaren van een InputBinding klasse op afzonderlijke threads als bindingen onveranderbaar moeten zijn of anders blokkeren. Muteer een statisch InputBinding klasseniveau niet nadat deze is geregistreerd.
Browsertoepassingen WPF Browser-toepassingen (. XBAP) verwerkt nu belangrijke gebeurtenissen, net zoals zelfstandige WPF-toepassingen, zodat objecten gerouteerde sleutelgebeurtenissen in de juiste volgorde ontvangen. Geen.
Combinaties van dode toetsen WPF verdooft dode sleutels, die geen zichtbaar teken produceren, maar geeft in plaats daarvan aan dat de sleutel moet worden gecombineerd met de volgende lettertoets om één teken te produceren. De sleutelinvoer-gebeurtenissen, zoals de KeyDownEvent gebeurtenis, rapporteren wanneer een sleutel een dode sleutel is door de Key eigenschap in te stellen op de Key waarde. Dit is meestal verwacht gedrag omdat toepassingen meestal niet van plan zijn te reageren op toetsenbordinvoer waarmee een gecombineerd teken wordt gemaakt. Toepassingen die verwachten sleutels te lezen die deel uitmaken van gecombineerde tekens, kunnen de nu verborgen sleutel ophalen met behulp van de DeadCharProcessedKey eigenschap.
Focusbeheer Wanneer de FocusManager.GetFocusedElement(DependencyObject) methode wordt doorgegeven aan een element waaraan de eigenschap IsFocusScope is gekoppeld true, retourneert de methode een element dat het laatste toetsenbordgerichte element binnen dat focusbereik is als en alleen als het geretourneerde element deel uitmaakt van hetzelfde PresentationSource object als het element dat aan de methode wordt doorgegeven. Geen.

UI-automatisering

Naamruimte: System.Windows, , System.Windows.Automation.ProviderSystem.Windows.Automation.Peers, System.Windows.Controls, , System.Windows.DataSystem.Windows.Input

Assembly's: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), UIAutomationProvider (in UIAutomationProvider.dll), WindowsBase (in WindowsBase.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Klassenhiërarchie van weergaven De TreeViewAutomationPeer en TreeViewItemAutomationPeer klassen nemen over van ItemsControlAutomationPeer in plaats van FrameworkElementAutomationPeer. Als u de TreeViewItemAutomationPeer klassen overschrijft en de GetChildrenCore methode overschrijft, kunt u een object retourneren dat van de nieuwe TreeViewDataItemAutomationPeer klasse overgaat.
Containers buiten het scherm Als u een onjuiste retourwaarde wilt herstellen, retourneert de methode nu correct voor itemcontainers false die uit de IsOffscreenCore weergave zijn geschoven. Ook wordt de waarde van de methode niet beïnvloed door occlusie door andere vensters of door of het element zichtbaar is op een specifieke monitor. Geen.
Menu's en onderliggende objecten Als u ui-automatisering wilt inschakelen van menu's die andere onderliggende items dan MenuItem objecten bevatten, retourneert de GetChildrenCore methode nu het AutomationPeer object van een onderliggend UIElement object in plaats van een MenuItemAutomationPeer object. Geen.
Nieuwe interfaces en assembly Om nieuwe functies voor UI-automatisering in te schakelen, zijn de volgende interfaces toegevoegd:

* IItemContainerProvider
* ISynchronizedInputProvider
* IVirtualizedItemProvider
Elk project dat WPF-automatiseringspeers bouwt, moet een expliciete verwijzing naar UIAutomationProvider.dll toevoegen.
Duimen De GetClassNameCore methode retourneert een waarde in plaats van null. Daarom rapporteren besturingselementen zoals GridSplitter die overnemen van de Thumb klasse een naam aan UI Automation. Geen.
Gevirtualiseerde elementen Om de prestaties te verbeteren, retourneert de GetChildrenCore methode alleen de onderliggende objecten die zich in de visualstructuur bevinden, in plaats van alle onderliggende objecten, ongeacht of ze zijn gevirtualiseerd. Gebruik ItemContainerPattern dit om alle items van een ItemsControlAutomationPeerbestand te herhalen.

XAML

Naamruimten: System.Windows, System.Windows.Controls, System.Windows.Data, , System.Windows.InputSystem.Windows.Markup

Assembly's: PresentationFramework (in PresentationFramework.dll), PresentationCore (in PresentationCore.dll), WindowsBase (in WindowsBase.dll)

Functie Verschillen van 3.5 SP1 Aanbevolen wijzigingen
Markeringsextensie WPF gebruikt nu altijd de waarde van de ProvideValue methode in plaats van het MarkupExtension object in bepaalde gevallen te retourneren wanneer een markeringsextensie wordt gebruikt om een eigenschap in te stellen of een item in een verzameling te maken. In sommige gevallen kan een markeringsextensie zichzelf retourneren. Als uw toepassing toegang krijgt tot een resource die een MarkupExtension object in eerdere versies heeft geretourneerd, verwijst u naar het object dat wordt geretourneerd ProvideValuein plaats van het MarkupExtension object.
Kenmerken parseren Kenmerken in XAML kunnen nu slechts één punt hebben. Het volgende is bijvoorbeeld geldig:

<Button Background="Red"/> (geen punten)

<Button Button.Background = "Red"/> (één punt)

Het volgende is niet meer geldig:

<Button Control.Button.Background = "Red"/> (meer dan één periode)
Corrigeer XAML-kenmerken met meerdere perioden.

XML

In de rijen in deze tabel worden verbeteringen beschreven voor functies die eerder beperkingen of andere problemen hadden.

Schema en transformaties

Naamruimten: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Assembly's: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)

Functie Verschillen van 3.5 SP1
Ch resourceschema's Om beschadiging van gegevens te voorkomen, worden ch resourceschema's nu correct gekloond wanneer ze zijn opgenomen in meerdere schema's.

Chschema's zijn schema's die geen doelnaamruimte hebben en wanneer ze zijn opgenomen in een andere XSD, nemen ze de doelnaamruimte van het importschema over. Ze worden vaak gebruikt om algemene typen in een schema op te nemen.
Id-functies De functie XSLT-id retourneert nu de juiste waarde in plaats van null wanneer een XmlReader object wordt doorgegeven aan een XLST.

Als de gebruiker een XmlReader object van een LINQ naar XML-klasse heeft gemaakt met behulp van de CreateReader methode en dit XmlReader object is doorgegeven aan een XSLT, hebben alle exemplaren van de id functie in de XSLT eerder null geretourneerd. Dit is geen toegestane retourwaarde voor de id functie.
Kenmerk naamruimte Om beschadiging van gegevens te voorkomen, retourneert een XPathNavigator object nu de lokale naam van het x:xmlns kenmerk correct.
Naamruimtedeclaraties Een XmlReader object in een substructuur maakt geen dubbele naamruimtedeclaraties meer binnen één XML-element.
Schemavalidatie Om onjuiste schemavalidatie te voorkomen, kunnen XSD-schema's met de XmlSchemaSet klasse correct en consistent worden gecompileerd. Deze schema's kunnen andere schema's bevatten; Kan bijvoorbeeld A.xsd , B.xsdwaaronder C.xsd. Als u een van deze items compileert, wordt deze grafiek van afhankelijkheden doorkruist.
Scriptfuncties De functie die beschikbaar is, retourneert false niet meer onjuist wanneer de functie daadwerkelijk beschikbaar is.
Uris De Load methode retourneert nu de juiste BaseURI in LINQ-query's.

Validatie

Naamruimten: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Assembly's: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)

Functie Verschillen van 3.5 SP1
Naamruimte-resolvers De ReadContentAs methode negeert niet langer de IXmlNamespaceResolver doorgegeven resolver.

In eerdere versies werd de opgegeven naamruimteomzetting genegeerd en werd de XmlReader naamruimte gebruikt.
Witruimte Als u gegevensverlies wilt voorkomen wanneer u een lezer maakt, wordt met de Create methode geen aanzienlijke witruimte meer verwijderd.

XML-validatie herkent mixed-con tentmodus, waarbij tekst kan worden gecombineerd met XML-markeringen. In de gemengde modus is alle witruimte aanzienlijk en moet worden gerapporteerd.

Schrijven

Naamruimten: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath

Assembly's: System.Xml (in System.Xml.dll), System.Xml.Linq (in System.Xml.Linq.dll)

Functie Verschillen van 3.5 SP1
Entiteitsverwijzing Om beschadiging van gegevens te voorkomen, worden entiteitsverwijzingen niet langer tweemaal in XML-kenmerken getitiseerd.

Als de gebruiker een entiteit probeerde te schrijven naar een xmlns kenmerk of in een xml:lang of xml:space kenmerk met behulp van de WriteEntityRef methode, werd de entiteit tweemaal getitiseerd in de uitvoer, waardoor de gegevens beschadigd raakten.
Nieuwe regelafhandeling Om beschadiging van gegevens te voorkomen, XmlWriter respecteren objecten de NewLineHandling optie.

Zie ook