Nieuw in .NET Framework

Notitie

.NET Framework 4.8 is de laatste versie van .NET Framework. .NET Framework maandelijks wordt onderhouden met oplossingen voor beveiligings- en betrouwbaarheidsfouten. .NET Framework blijft opgenomen in Windows, zonder dat u deze wilt verwijderen. U hoeft uw .NET Framework-apps niet te migreren, maar voor nieuwe ontwikkeling gebruikt u .NET 5 of hoger.

Dit artikel bevat een overzicht van de belangrijkste nieuwe functies en verbeteringen in de volgende versies van .NET Framework:

Dit artikel bevat geen uitgebreide informatie over elke nieuwe functie en kan worden gewijzigd. Zie Aan de slag voor algemene informatie over .NET Framework. Zie Systeemvereisten voor ondersteunde platforms. Zie de installatiehandleiding voor downloadkoppelingen en installatie-instructies.

Notitie

Het .NET Framework team brengt ook functies uit de band, met behulp van NuGet, uit om platformondersteuning uit te breiden en nieuwe functionaliteit te introduceren, zoals onveranderbare verzamelingen en vectortypen met SIMD-functionaliteit. Zie Aanvullende klassebibliotheken en API's en.NET Framework en out-of-band-releases voor meer informatie. Bekijk een volledige lijst met NuGet-pakketten voor .NET Framework.

Inleiding tot .NET Framework 4.8

.NET Framework 4.8 bouwt voort op eerdere versies van .NET Framework 4.x door veel nieuwe fixes en verschillende nieuwe functies toe te voegen terwijl het een zeer stabiel product blijft.

.NET Framework 4.8 downloaden en installeren

U kunt .NET Framework 4.8 downloaden vanaf de volgende locaties:

.NET Framework 4.8 kan worden geïnstalleerd op Windows 10, Windows 8.1, Windows 7 SP1 en de bijbehorende serverplatforms die beginnen met Windows Server 2008 R2 SP1. U kunt .NET Framework 4.8 installeren met behulp van het webinstallatieprogramma of het offlineinstallatieprogramma. De aanbevolen manier voor de meeste gebruikers is het webinstallatieprogramma te gebruiken.

U kunt .NET Framework 4.8 in Visual Studio 2012 of hoger richten door het .NET Framework 4.8 Developer Pack te installeren.

Nieuw in .NET Framework 4.8

.NET Framework 4.8 introduceert nieuwe functies op de volgende gebieden:

Verbeterde toegankelijkheid, waardoor een toepassing een geschikte ervaring kan bieden voor gebruikers van Ondersteunende technologie, blijft een belangrijke focus van .NET Framework 4.8. Zie Wat is er nieuw in toegankelijkheid in .NET Framework voor informatie over toegankelijkheidsverbeteringen in .NET Framework 4.8.

Basisklassen

Beperkte FIPS-impact op cryptografie. In eerdere versies van .NET Framework worden klassen van beheerde cryptografische providers, zoals SHA256Managed het gooien van een CryptographicException wanneer de cryptografische systeembibliotheken zijn geconfigureerd in de FIPS-modus. Deze uitzonderingen worden gegenereerd omdat de beheerde versies van de cryptografische providerklassen, in tegenstelling tot de cryptografische systeembibliotheken, geen FIPS-certificering (Federal Information Processing Standards) 140-2 hebben ondergaan. Omdat weinig ontwikkelaars hun ontwikkelmachines in de FIPS-modus hebben, worden de uitzonderingen vaak in productiesystemen gegenereerd.

Standaard worden in toepassingen die zijn gericht op .NET Framework 4.8, de volgende beheerde cryptografieklassen in dit geval niet meer gegooidCryptographicException:

In plaats daarvan leiden deze klassen cryptografische bewerkingen om naar een systeemcryptografiebibliotheek. Deze wijziging verwijdert effectief een mogelijk verwarrend verschil tussen ontwikkelomgevingen en productieomgevingen en maakt systeemeigen onderdelen en beheerde onderdelen onder hetzelfde cryptografische beleid. Toepassingen die afhankelijk zijn van deze uitzonderingen kunnen het vorige gedrag herstellen door de AppContext-switch in Switch.System.Security.Cryptography.UseLegacyFipsThrow te stellen op true. Zie Beheerde cryptografieklassen genereren geen CryptographyException in de FIPS-modus voor meer informatie.

Gebruik van bijgewerkte versie van ZLib

Vanaf .NET Framework 4.5 gebruikt de clrcompression.dll assembly ZLib, een systeemeigen externe bibliotheek voor gegevenscompressie, om een implementatie te bieden voor het deflate algoritme. De .NET Framework 4.8-versie van clrcompression.dll wordt bijgewerkt voor het gebruik van ZLib versie 1.2.11, waaronder verschillende belangrijke verbeteringen en oplossingen.

Windows Communication Foundation (WCF)

Inleiding tot ServiceHealthBehavior

Statuseindpunten worden veel gebruikt door indelingshulpprogramma's voor het beheren van services op basis van hun statusstatus. Statuscontroles kunnen ook worden gebruikt door bewakingshulpprogramma's om meldingen over de beschikbaarheid en prestaties van een service bij te houden en te bieden.

ServiceHealthBehavior is een WCF-servicegedrag dat zich uitbreidt IServiceBehavior. Wanneer dit wordt toegevoegd aan de ServiceDescription.Behaviors verzameling, doet een servicegedrag het volgende:

  • Retourneert de status van de service met HTTP-antwoordcodes. U kunt in een querytekenreeks de HTTP-statuscode opgeven voor een HTTP/GET-statustestaanvraag.

  • Publiceert informatie over de servicestatus. Servicespecifieke details, waaronder servicestatus, aantal beperkingen en capaciteit, kunnen worden weergegeven met behulp van een HTTP/GET-aanvraag met de ?health querytekenreeks. Toegankelijkheid van dergelijke informatie is belangrijk bij het oplossen van problemen met een onjuiste WCF-service.

Er zijn twee manieren om het statuseindpunt beschikbaar te maken en wcF-servicestatusgegevens te publiceren:

  • Via code. Bijvoorbeeld:

    ServiceHost host = new ServiceHost(typeof(Service1),
                       new Uri("http://contoso:81/Service1"));
    ServiceHealthBehavior healthBehavior =
        host.Description.Behaviors.Find<ServiceHealthBehavior>();
    healthBehavior ??= new ServiceHealthBehavior();
    host.Description.Behaviors.Add(healthBehavior);
    
    Dim host As New ServiceHost(GetType(Service1),
                New Uri("http://contoso:81/Service1"))
    Dim healthBehavior As ServiceHealthBehavior =
       host.Description.Behaviors.Find(Of ServiceHealthBehavior)()
    If healthBehavior Is Nothing Then
       healthBehavior = New ServiceHealthBehavior()
    End If
    host.Description.Behaviors.Add(healthBehavior)
    
  • Met behulp van een configuratiebestand. Bijvoorbeeld:

    <behaviors>
      <serviceBehaviors>
        <behavior name="DefaultBehavior">
          <serviceHealth httpsGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    

De status van een service kan worden opgevraagd met behulp van queryparameters zoals OnServiceFailure, OnDispatcherFailure, OnListenerFailure, OnThrottlePercentExceeded) en een HTTP-antwoordcode kan worden opgegeven voor elke queryparameter. Als de HTTP-antwoordcode wordt weggelaten voor een queryparameter, wordt standaard een HTTP-antwoordcode van 503 gebruikt. Bijvoorbeeld:

Queryparameters en voorbeelden:

  • OnDispatcherFailure: https://contoso:81/Service1?health&OnDispatcherFailure=455

    Er wordt een 455 HTTP-antwoordstatuscode geretourneerd wanneer de status van een van de kanaal-dispatchers groter is dan CommunicationState.Opened.

  • OnListenerFailure: https://contoso:81/Service1?health&OnListenerFailure=465

    Er wordt een 465 HTTP-antwoordstatuscode geretourneerd wanneer de status van een van de kanaallisteners groter is dan CommunicationState.Opened.

  • OnThrottlePercentExceededed: https://contoso:81/Service1?health&OnThrottlePercentExceeded= 70:350,95:500

    Hiermee geeft u het percentage {1 – 100} op waarmee het antwoord en de HTTP-antwoordcode {200 – 599} worden geactiveerd. In dit voorbeeld:

    • Als het percentage groter is dan 95, wordt een HTTP-antwoordcode van 500 geretourneerd.

    • Als het percentage tussen 70 en 95 ligt, wordt 350 geretourneerd.

    • Anders wordt 200 geretourneerd.

De status van de service kan worden weergegeven in HTML door een querytekenreeks zoals https://contoso:81/Service1?health of in XML op te geven door een querytekenreeks op te geven, zoals https://contoso:81/Service1?health&Xml. Een queryreeks, zoals https://contoso:81/Service1?health&NoContent een lege HTML-pagina, retourneert.

Windows Presentation Foundation (WPF)

Hoge DPI-verbeteringen

In .NET Framework 4.8 voegt WPF ondersteuning toe voor Per-Monitor V2 DPI Awareness en Mixed-Mode DPI-schaalaanpassing. Zie High DPI Desktop Application Development op Windows voor meer informatie over hoge DPI-ontwikkeling.

.NET Framework 4.8 verbetert de ondersteuning voor gehoste HWND's en Windows Forms interoperation in WPF-toepassingen met hoge DPI op platforms die ondersteuning bieden voor Mixed-Mode DPI-schaalaanpassing (vanaf Windows 10 update van april 2018). Wanneer gehoste HWND's of Windows Forms besturingselementen worden gemaakt als Mixed-Mode DPI-geschaalde vensters door SetThreadDpiHostingBehavior en SetThreadDpiAwarenessContext aan te roepen, kunnen ze worden gehost in een Per-Monitor V2 WPF-toepassing en op de juiste manier worden geschaald en geschaald. Dergelijke gehoste inhoud wordt niet weergegeven op de systeemeigen DPI; In plaats daarvan schaalt het besturingssysteem de gehoste inhoud naar de juiste grootte. Met de ondersteuning voor Per-Monitor v2 DPI-modus kunnen WPF-besturingselementen ook worden gehost (dat wil gezegd, bovenliggend) in een systeemeigen venster in een high-DPI-toepassing.

Als u ondersteuning wilt inschakelen voor Mixed-Mode hoge DPI-schaalaanpassing, kunt u de volgende AppContext-switches instellen voor het configuratiebestand van de toepassing:

<runtime>
   <AppContextSwitchOverrides value = "Switch.System.Windows.DoNotScaleForDpiChanges=false; Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false"/>
</runtime>

Algemene taalruntime

De runtime in .NET Framework 4.8 bevat de volgende wijzigingen en verbeteringen:

Verbeteringen aan de JIT-compiler. De Just-In-Time-compiler (JIT) in .NET Framework 4.8 is gebaseerd op de JIT-compiler in .NET Core 2.1. Veel van de optimalisaties en alle bugfixes die zijn aangebracht in de .NET Core 2.1 JIT-compiler, zijn opgenomen in de .NET Framework 4.8 JIT-compiler.

NGEN-verbeteringen. De runtime heeft het geheugenbeheer voor NGEN-installatiekopieën ( Native Image Generator ) verbeterd, zodat de gegevens die zijn toegewezen aan NGEN-installatiekopieën, geen geheugenbewoner zijn. Dit vermindert het oppervlakoppervlak dat beschikbaar is voor aanvallen die proberen willekeurige code uit te voeren door geheugen te wijzigen dat wordt uitgevoerd.

Antimalwarescans voor alle assembly's. In eerdere versies van .NET Framework scant de runtime alle assembly's die vanaf de schijf zijn geladen met behulp van Windows Defender of antimalwaresoftware van derden. Assembly's die zijn geladen vanuit andere bronnen, zoals door de Assembly.Load(Byte[]) methode, worden echter niet gescand en kunnen mogelijk niet-gedetecteerde malware bevatten. Vanaf .NET Framework 4.8 die wordt uitgevoerd op Windows 10, activeert de runtime een scan door antimalwareoplossingen die de Antimalware Scan Interface (AMSI) implementeren.

Nieuw in .NET Framework 4.7.2

.NET Framework 4.7.2 bevat nieuwe functies op de volgende gebieden:

Een voortdurende focus in .NET Framework 4.7.2 is verbeterde toegankelijkheid, waardoor een toepassing een geschikte ervaring biedt voor gebruikers van Ondersteunende technologie. Zie Wat is er nieuw in toegankelijkheid in .NET Framework voor meer informatie over toegankelijkheidsverbeteringen in .NET Framework 4.7.2.

Basisklassen

.NET Framework 4.7.2 bevat een groot aantal cryptografische verbeteringen, betere decompressieondersteuning voor ZIP-archieven en aanvullende verzameling-API's.

Nieuwe overbelastingen van RSA. Maken en DSA. Maken

Met de DSA.Create(DSAParameters) en RSA.Create(RSAParameters) methoden kunt u belangrijke parameters opgeven bij het instantiëren van een nieuwe DSA of RSA sleutel. Hiermee kunt u code als volgt vervangen:

// Before .NET Framework 4.7.2
using (RSA rsa = RSA.Create())
{
   rsa.ImportParameters(rsaParameters);
   // Other code to execute using the RSA instance.
}
' Before .NET Framework 4.7.2
Using rsa = RSA.Create()
   rsa.ImportParameters(rsaParameters)
   ' Other code to execute using the rsa instance.
End Using

met code als volgt:

// Starting with .NET Framework 4.7.2
using (RSA rsa = RSA.Create(rsaParameters))
{
   // Other code to execute using the rsa instance.
}
' Starting with .NET Framework 4.7.2
Using rsa = RSA.Create(rsaParameters)
   ' Other code to execute using the rsa instance.
End Using

Met de DSA.Create(Int32) en RSA.Create(Int32) methoden kunt u nieuwe DSA sleutels genereren RSA met een specifieke sleutelgrootte. Bijvoorbeeld:

using (DSA dsa = DSA.Create(2048))
{
   // Other code to execute using the dsa instance.
}
Using dsa = DSA.Create(2048)
   ' Other code to execute using the dsa instance.
End Using

Rfc2898DeriveBytes-constructors accepteren de naam van een hash-algoritme

De Rfc2898DeriveBytes klasse heeft drie nieuwe constructors met een HashAlgorithmName parameter die het HMAC-algoritme identificeert dat moet worden gebruikt bij het afleiden van sleutels. In plaats van SHA-1 te gebruiken, moeten ontwikkelaars een SHA-2-gebaseerde HMAC zoals SHA-256 gebruiken, zoals wordt weergegeven in het volgende voorbeeld:

private static byte[] DeriveKey(string password, out int iterations, out byte[] salt,
                                out HashAlgorithmName algorithm)
{
   iterations = 100000;
   algorithm = HashAlgorithmName.SHA256;

   const int SaltSize = 32;
   const int DerivedValueSize = 32;

   using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, SaltSize,
                                                             iterations, algorithm))
   {
      salt = pbkdf2.Salt;
      return pbkdf2.GetBytes(DerivedValueSize);
   }
}
Private Shared Function DeriveKey(password As String, ByRef iterations As Integer,
                                  ByRef salt AS Byte(), ByRef algorithm As HashAlgorithmName) As Byte()
   iterations = 100000
   algorithm = HashAlgorithmName.SHA256

   Const SaltSize As Integer = 32
   Const  DerivedValueSize As Integer = 32

   Using pbkdf2 = New Rfc2898DeriveBytes(password, SaltSize, iterations, algorithm)
      salt = pbkdf2.Salt
      Return pbkdf2.GetBytes(DerivedValueSize)
   End Using
End Function

Ondersteuning voor tijdelijke sleutels

PfX-import kan optioneel persoonlijke sleutels rechtstreeks vanuit het geheugen laden, waardoor de harde schijf wordt overgeslagen. Wanneer de nieuwe X509KeyStorageFlags.EphemeralKeySet vlag wordt opgegeven in een X509Certificate2 constructor of een van de overbelastingen van de X509Certificate2.Import methode, worden de persoonlijke sleutels geladen als tijdelijke sleutels. Hiermee voorkomt u dat de sleutels zichtbaar zijn op de schijf. Echter:

  • Omdat de sleutels niet op schijf worden bewaard, zijn certificaten die met deze vlag zijn geladen, geen goede kandidaten om toe te voegen aan een X509Store.

  • Sleutels die op deze manier worden geladen, worden bijna altijd geladen via Windows CNG. Daarom moeten bellers toegang krijgen tot de persoonlijke sleutel door extensiemethoden aan te roepen, zoals certificaat. GetRSAPrivateKey(). De X509Certificate2.PrivateKey eigenschap werkt niet.

  • Omdat de verouderde X509Certificate2.PrivateKey eigenschap niet met certificaten werkt, moeten ontwikkelaars strenge tests uitvoeren voordat ze overschakelen naar tijdelijke sleutels.

Programmatisch maken van PKCS#10-certificaatondertekeningsaanvragen en X.509-certificaten voor openbare sleutel

Vanaf .NET Framework 4.7.2 kunnen workloads aanvragen voor certificaatondertekening (CDR's) genereren, waardoor het genereren van certificaataanvragen in bestaande hulpprogramma's kan worden gefaseerd. Dit is vaak handig in testscenario's.

Zie 'Programmatisch maken van PKCS#10 certificeringsaanvragen en X.509-certificaten voor openbare sleutel' in de .NET-blog voor meer informatie en codevoorbeelden.

Nieuwe SignerInfo-leden

Vanaf .NET Framework 4.7.2 bevat de SignerInfo klasse meer informatie over de handtekening. U kunt de waarde van de System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm eigenschap ophalen om het handtekeningalgoritmen te bepalen dat door de ondertekenaar wordt gebruikt. SignerInfo.GetSignature kan worden aangeroepen om een kopie van de cryptografische handtekening voor deze ondertekenaar op te halen.

Een verpakte stream open laten nadat CryptoStream is verwijderd

Vanaf .NET Framework 4.7.2 heeft de klasse een extra constructor waarmee de CryptoStream verpakte stroom niet kan Dispose worden gesloten. Als u de verpakte stroom open wilt laten nadat het CryptoStream exemplaar is verwijderd, roept u de nieuwe CryptoStream constructor als volgt aan:

var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)

Decompressiewijzigingen in DeflateStream

Vanaf .NET Framework 4.7.2 is de implementatie van decompressiebewerkingen in de DeflateStream klasse gewijzigd zodat standaard systeemeigen Windows API's worden gebruikt. Dit resulteert doorgaans in een aanzienlijke prestatieverbetering.

Ondersteuning voor decompressie met behulp van Windows API's is standaard ingeschakeld voor toepassingen die zijn gericht op .NET Framework 4.7.2. Toepassingen die zijn gericht op eerdere versies van .NET Framework, maar worden uitgevoerd onder .NET Framework 4.7.2, kunnen ervoor kiezen dit gedrag toe te voegen door de volgende AppContext-switch toe te voegen aan het toepassingsconfiguratiebestand:

<AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=false" />

Aanvullende verzameling-API's

.NET Framework 4.7.2 voegt een aantal nieuwe API's toe aan de SortedSet<T> en HashSet<T> typen. Deze omvatten:

De ConcurrentDictionary<TKey,TValue> klasse bevat nieuwe overbelastingen van de AddOrUpdate woordenlijst en GetOrAdd methoden om een waarde op te halen uit de woordenlijst of om deze toe te voegen als deze niet wordt gevonden en om een waarde toe te voegen aan de woordenlijst of om deze bij te werken als deze al bestaat.

public TValue AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, TValue> addValueFactory, Func<TKey, TValue, TArg, TValue> updateValueFactory, TArg factoryArgument)

public TValue GetOrAdd<TArg>(TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)
Public AddOrUpdate(Of TArg)(key As TKey, addValueFactory As Func(Of TKey, TArg, TValue), updateValueFactory As Func(Of TKey, TValue, TArg, TValue), factoryArgument As TArg) As TValue

Public GetOrAdd(Of TArg)(key As TKey, valueFactory As Func(Of TKey, TArg, TValue), factoryArgument As TArg) As TValue

ASP.NET

Ondersteuning voor afhankelijkheidsinjectie in Web Forms

Met afhankelijkheidsinjectie (DI) worden objecten en hun afhankelijkheden losgekoppeld, zodat de code van een object niet meer hoeft te worden gewijzigd omdat een afhankelijkheid is gewijzigd. Wanneer u ASP.NET toepassingen ontwikkelt die zijn gericht op .NET Framework 4.7.2, kunt u het volgende doen:

Ondersteuning voor cookies op dezelfde site

SameSite voorkomt dat een browser een cookie samen met een aanvraag op meerdere sites verzendt. .NET Framework 4.7.2 voegt een HttpCookie.SameSite eigenschap toe waarvan de waarde een System.Web.SameSiteMode opsommingslid is. Als de waarde is SameSiteMode.Strict ofSameSiteMode.Lax, voegt ASP.NET het SameSite kenmerk toe aan de set-cookieheader. SameSite-ondersteuning is van toepassing op HttpCookie objecten, evenals op FormsAuthentication en System.Web.SessionState cookies.

U kunt SameSite als volgt instellen voor een HttpCookie object:

var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;
Dim c As New HttpCookie("secureCookie", "same origin")
c.SameSite = SameSiteMode.Lax

U kunt SameSite-cookies ook configureren op toepassingsniveau door het web.config bestand te wijzigen:

<system.web>
   <httpCookies sameSite="Strict" />
</system.web>

U kunt SameSite voor FormsAuthentication en System.Web.SessionState cookies toevoegen door het webconfiguratiebestand te wijzigen:

<system.web>
   <authentication mode="Forms">
      <forms cookieSameSite="Lax">
         <!-- ...   -->
      </forms>
   </authentication>
   <sessionState cookieSameSite="Lax"></sessionState>
</system.web>

Netwerken

Implementatie van HttpClientHandler-eigenschappen

.NET Framework 4.7.1 heeft acht eigenschappen toegevoegd aan de System.Net.Http.HttpClientHandler klasse. Twee gooiden echter een PlatformNotSupportedException. .NET Framework 4.7.2 biedt nu een implementatie voor deze eigenschappen. De eigenschappen zijn:

SQLClient

Ondersteuning voor Azure Active Directory universele verificatie en meervoudige verificatie

Voor groeiende nalevings- en beveiligingsvereisten is vereist dat veel klanten meervoudige verificatie (MFA) gebruiken. Daarnaast wordt het gebruik van huidige aanbevolen procedures afgeraden om gebruikerswachtwoorden rechtstreeks in verbindingsreeksen op te geven. Ter ondersteuning van deze wijzigingen breidt .NET Framework 4.7.2 SQLClient-verbindingsreeksen uit door een nieuwe waarde, Active Directory Interactive, toe te voegen voor het bestaande trefwoord Verificatie ter ondersteuning van MFA en Azure AD-verificatie. De nieuwe interactieve methode ondersteunt systeemeigen en federatieve Azure AD-gebruikers en Azure AD-gastgebruikers. Wanneer deze methode wordt gebruikt, wordt de MFA-verificatie die door Azure AD wordt opgelegd, ondersteund voor SQL databases. Daarnaast vraagt het verificatieproces een gebruikerswachtwoord aan om te voldoen aan de aanbevolen beveiligingsprocedures.

In eerdere versies van .NET Framework SQL connectiviteit alleen de SqlAuthenticationMethod.ActiveDirectoryPassword en SqlAuthenticationMethod.ActiveDirectoryIntegrated opties ondersteund. Beide maken deel uit van het niet-interactieve ADAL-protocol, dat geen ondersteuning biedt voor MFA. Met de nieuwe SqlAuthenticationMethod.ActiveDirectoryInteractive optie ondersteunt SQL connectiviteit MFA en bestaande verificatiemethoden (wachtwoord en geïntegreerde verificatie), waarmee gebruikers interactief gebruikerswachtwoorden kunnen invoeren zonder wachtwoorden in de connection string te behouden.

Zie voor meer informatie en een voorbeeld 'SQL - Azure AD Universal and Multifactor Authentication Support' in de .NET-blog.

Ondersteuning voor Always Encrypted versie 2

NET Framework 4.7.2 voegt ondersteuning toe voor enclavegebaseerde Always Encrypted. De oorspronkelijke versie van Always Encrypted is een versleutelingstechnologie aan de clientzijde waarin versleutelingssleutels de client nooit verlaten. In enclave-Always Encrypted kan de client desgewenst de versleutelingssleutels verzenden naar een beveiligde enclave. Dit is een beveiligde rekenkundige entiteit die kan worden beschouwd als onderdeel van SQL Server, maar dat SQL Server code niet kan knoeien. Ter ondersteuning van enclavegebaseerde Always Encrypted voegt .NET Framework 4.7.2 de volgende typen en leden toe aan de System.Data.SqlClient naamruimte:

Het configuratiebestand van de toepassing geeft vervolgens een concrete implementatie van de abstracte System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider klasse op die de functionaliteit biedt voor de enclaveprovider. Bijvoorbeeld:

<configuration>
  <configSections>
    <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/>
  </configSections>
  <SqlColumnEncryptionEnclaveProviders>
    <providers>
      <add name="Azure" type="Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp"/>
      <add name="HGS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp" />
    </providers>
  </SqlColumnEncryptionEnclaveProviders >
</configuration>

De basisstroom van enclavegebaseerde Always Encrypted is:

  1. De gebruiker maakt een AlwaysEncrypted-verbinding met SQL Server die ondersteuning biedt voor enclave-Always Encrypted. Het stuurprogramma neemt contact op met de Attestation-service om ervoor te zorgen dat deze verbinding maakt met de juiste enclave.

  2. Zodra de enclave is getest, brengt het stuurprogramma een beveiligd kanaal tot stand met de beveiligde enclave die wordt gehost op SQL Server.

  3. Het stuurprogramma deelt versleutelingssleutels die zijn geautoriseerd door de client met de beveiligde enclave voor de duur van de SQL-verbinding.

Windows Presentation Foundation

ResourceDictionaries zoeken op bron

Vanaf .NET Framework 4.7.2 kan een diagnostische assistent de ResourceDictionaries URI vinden die is gemaakt op basis van een bepaalde bron-URI. (Deze functie is bedoeld voor gebruik door diagnostische assistenten, niet door productietoepassingen.) Met een diagnostische assistent, zoals de faciliteit Bewerken en Doorgaan van Visual Studio, kan de gebruiker een ResourceDictionary bewerken met de bedoeling dat de wijzigingen worden toegepast op de actieve toepassing. Eén stap bij het bereiken hiervan is het vinden van alle ResourceDictionaries die door de actieve toepassing zijn gemaakt op basis van de woordenlijst die wordt bewerkt. Een toepassing kan bijvoorbeeld een ResourceDictionary declareren waarvan de inhoud wordt gekopieerd uit een bepaalde bron-URI:

<ResourceDictionary Source="MyRD.xaml" />

Een diagnostische assistent die de oorspronkelijke markering in MyRD.xaml bewerkt, kan de nieuwe functie gebruiken om de woordenlijst te zoeken. De functie wordt geïmplementeerd door een nieuwe statische methode, ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. De diagnostische assistent roept de nieuwe methode aan met behulp van een absolute URI die de oorspronkelijke markering identificeert, zoals wordt geïllustreerd door de volgende code:

IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));
Dim dictionaries As IEnumerable(Of ResourceDictionary) = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(New Uri("pack://application:,,,/MyApp;component/MyRD.xaml"))

De methode retourneert een lege opsomming, tenzij VisualDiagnostics deze is ingeschakeld en de ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO omgevingsvariabele is ingesteld.

ResourceDictionary-eigenaren zoeken

Vanaf .NET Framework 4.7.2 kan een diagnostische assistent de eigenaren van een bepaalde ResourceDictionaryassistent vinden. (De functie is bedoeld voor gebruik door diagnostische assistenten en niet door productietoepassingen.) Wanneer een wijziging wordt aangebracht in een ResourceDictionary, vindt WPF automatisch alle DynamicResource-verwijzingen die mogelijk worden beïnvloed door de wijziging.

Een diagnostische assistent, zoals de faciliteit 'Edit-and-Continue' van Visual Studio, wil dit mogelijk uitbreiden om staticResource-verwijzingen te verwerken. De eerste stap in dit proces is het vinden van de eigenaren van de woordenlijst; dat wil gezegd hebben, om alle objecten te vinden waarvan Resources de eigenschap naar de woordenlijst verwijst (rechtstreeks of indirect via de ResourceDictionary.MergedDictionaries eigenschap). Drie nieuwe statische methoden die zijn geïmplementeerd in de System.Windows.Diagnostics.ResourceDictionaryDiagnostics klasse, één voor elk van de basistypen die een Resources eigenschap hebben, ondersteunen deze stap:

Met deze methoden wordt een lege opsomming geretourneerd, tenzij deze is ingeschakeld en de ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO omgevingsvariabele VisualDiagnostics is ingesteld.

StaticResource-verwijzingen zoeken

Een diagnostische assistent kan nu een melding ontvangen wanneer een StaticResource-verwijzing wordt opgelost. (De functie is bedoeld voor gebruik door diagnostische assistenten, niet door productietoepassingen.) Een diagnostische assistent, zoals Visual Studio's 'Edit-and-Continue'-faciliteit, wil mogelijk alle toepassingen van een resource bijwerken wanneer de waarde ervan in een ResourceDictionary wijziging wordt gewijzigd. WPF doet dit automatisch voor DynamicResource-verwijzingen , maar dit doet opzettelijk niet voor StaticResource-verwijzingen . Vanaf .NET Framework 4.7.2 kan de diagnostische assistent deze meldingen gebruiken om deze toepassingen van de statische resource te vinden.

De melding wordt geïmplementeerd door de nieuwe ResourceDictionaryDiagnostics.StaticResourceResolved gebeurtenis:

public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;
Public Shared Event StaticResourceResolved As EventHandler(Of StaticResourceResolvedEventArgs)

Deze gebeurtenis wordt gegenereerd wanneer de runtime een StaticResource-verwijzing oplost. De StaticResourceResolvedEventArgs argumenten beschrijven de resolutie en geven het object en de eigenschap aan die als host fungeren voor de StaticResource-verwijzing en de ResourceDictionary sleutel die wordt gebruikt voor de resolutie:

public class StaticResourceResolvedEventArgs : EventArgs
{
   public Object TargetObject { get; }

   public Object TargetProperty { get; }

   public ResourceDictionary ResourceDictionary { get; }

   public object ResourceKey { get; }
}
Public Class StaticResourceResolvedEventArgs : Inherits EventArgs
   Public ReadOnly Property TargetObject As Object
   Public ReadOnly Property TargetProperty As Object
   Public ReadOnly Property ResourceDictionary As ResourceDictionary
   Public ReadOnly Property ResourceKey As Object
End Class

De gebeurtenis wordt niet gegenereerd (en add de accessor wordt genegeerd) tenzij deze is ingeschakeld en de ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO omgevingsvariabele VisualDiagnostics is ingesteld.

ClickOnce

HDPI-compatibele toepassingen voor Windows Forms, Windows Presentation Foundation (WPF) en Visual Studio Tools for Office (VSTO) kunnen allemaal worden geïmplementeerd met behulp van ClickOnce. Als de volgende vermelding wordt gevonden in het toepassingsmanifest, slaagt de implementatie onder .NET Framework 4.7.2:

<windowsSettings>
   <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>

Voor Windows Forms toepassing is de vorige tijdelijke oplossing voor het instellen van DPI-bewustzijn in het toepassingsconfiguratiebestand in plaats van het toepassingsmanifest niet meer nodig om ClickOnce implementatie te voltooien.

Nieuw in .NET Framework 4.7.1

.NET Framework 4.7.1 bevat nieuwe functies op de volgende gebieden:

Daarnaast is een belangrijke focus in .NET Framework 4.7.1 verbeterde toegankelijkheid, waardoor een toepassing een geschikte ervaring biedt voor gebruikers van Ondersteunende technologie. Zie Wat is er nieuw in toegankelijkheid in .NET Framework voor informatie over toegankelijkheidsverbeteringen in .NET Framework 4.7.1.

Basisklassen

Ondersteuning voor .NET Standard 2.0

.NET Standard definieert een set API's die beschikbaar moeten zijn voor elke .NET-implementatie die ondersteuning biedt voor die versie van de standaard. .NET Framework 4.7.1 biedt volledige ondersteuning voor .NET Standard 2.0 en voegt ongeveer 200 API's toe die zijn gedefinieerd in .NET Standard 2.0 en ontbreken in .NET Framework 4.6.1, 4.6.2 en 4.7. (Houd er rekening mee dat deze versies van .NET Framework alleen .NET Standard 2.0 ondersteunen als aanvullende .NET Standard-ondersteuningsbestanden ook op het doelsysteem worden geïmplementeerd.) Zie BCL - .NET Standard 2.0 Support in het blogbericht .NET Framework 4.7.1 Runtime en Compiler Features voor meer informatie.

Ondersteuning voor configuratiebouwers

Met configuratiebouwers kunnen ontwikkelaars configuratie-instellingen voor toepassingen dynamisch in runtime injecteren en bouwen. Aangepaste configuratiebouwers kunnen worden gebruikt om bestaande gegevens in een configuratiesectie te wijzigen of om een volledig nieuwe configuratiesectie te bouwen. Zonder configuratiebouwers zijn .config bestanden statisch en worden hun instellingen enige tijd gedefinieerd voordat een toepassing wordt gestart.

Als u een aangepaste opbouwfunctie voor configuraties wilt maken, leidt u de opbouwfunctie af van de abstracte ConfigurationBuilder klasse en overschrijft u de ConfigurationBuilder.ProcessConfigurationSection bijbehorende en ConfigurationBuilder.ProcessRawXml. U definieert ook uw opbouwfuncties in uw .config-bestand. Zie de sectie Configuratiebouwers in het blogbericht .NET Framework 4.7.1 ASP.NET en configuratiefuncties voor meer informatie.

Detectie van runtimefuncties

De System.Runtime.CompilerServices.RuntimeFeature klasse biedt een mechanisme om te bepalen of een vooraf gedefinieerde functie wordt ondersteund voor een bepaalde .NET-implementatie tijdens het compileren of runtime. Tijdens het compileren kan een compiler controleren of er een opgegeven veld bestaat om te bepalen of de functie wordt ondersteund; als dat het zo is, kan er code worden verzonden die gebruikmaakt van die functie. Tijdens runtime kan een toepassing de RuntimeFeature.IsSupported methode aanroepen voordat code tijdens runtime wordt verzonden. Zie Helper-methode toevoegen voor het beschrijven van functies die worden ondersteund door de runtime voor meer informatie.

Waarde-tupletypen kunnen worden geserialiseerbaar

Vanaf .NET Framework 4.7.1 System.ValueTuple en de bijbehorende algemene typen zijn gemarkeerd als Serializeerbaar, waardoor binaire serialisatie mogelijk is. Dit maakt het migreren van Tuple-typen, zoals Tuple<T1,T2,T3> en Tuple<T1,T2,T3,T4>, eenvoudiger om tupletypen te waarderen. Zie Compiler -- ValueTuple is Serializable in het blogbericht .NET Framework 4.7.1 Runtime en Compiler Features voor meer informatie.

Ondersteuning voor alleen-lezenverwijzingen

.NET Framework 4.7.1 voegt de System.Runtime.CompilerServices.IsReadOnlyAttribute. Dit kenmerk wordt gebruikt door taalcomp compilers om leden te markeren die alleen-lezen ref typen of parameters hebben. Zie Compiler -- Ondersteuning voor ReadOnlyReferences in het blogbericht .NET Framework 4.7.1 Runtime- en compilerfuncties voor meer informatie. Zie Ref-retourwaarden en ref-lokale waarden (C#Guide) en Ref return values (Visual Basic) voor informatie over retourwaarden voor ref.

Common Language Runtime (CLR)

Prestatieverbeteringen in garbagecollection

Wijzigingen in garbagecollection (GC) in .NET Framework 4.7.1 verbeteren de algehele prestaties, met name voor grote LOH-toewijzingen (object heap). In .NET Framework 4.7.1 worden afzonderlijke vergrendelingen gebruikt voor kleine object heap (SOH) en LOH-toewijzingen, waardoor LOH-toewijzingen kunnen optreden wanneer achtergrond-GC de SOH veegt. Als gevolg hiervan moeten toepassingen die een groot aantal LOH-toewijzingen maken, een vermindering van de toewijzingsvergrendelingsconflicten en verbeterde prestaties zien. Zie de sectie 'Runtime -- GC Performance Improvements' in het blogbericht .NET Framework 4.7.1 Runtime- en compilerfuncties voor meer informatie.

Netwerken

SHA-2-ondersteuning voor Message.HashAlgorithm

In .NET Framework 4.7 en eerdere versies worden de waarden van HashAlgorithm.Md5 en HashAlgorithm.Sha alleen door de Message.HashAlgorithm eigenschap ondersteund. Vanaf .NET Framework 4.7.1, HashAlgorithm.Sha256HashAlgorithm.Sha384en HashAlgorithm.Sha512 worden ook ondersteund. Of deze waarde daadwerkelijk wordt gebruikt, is afhankelijk van MSMQ, omdat het Message exemplaar zelf geen hashing doet, maar gewoon waarden doorgeeft aan MSMQ. Zie de sectie SHA-2-ondersteuning voor Message.HashAlgorithm in het blogbericht .NET Framework 4.7.1 ASP.NET en configuratiefuncties voor meer informatie.

ASP.NET

Uitvoeringsstappen in ASP.NET toepassingen

ASP.NET aanvragen verwerkt in een vooraf gedefinieerde pijplijn met 23 gebeurtenissen. ASP.NET voert elke gebeurtenis-handler uit als een uitvoeringsstap. In versies van ASP.NET tot .NET Framework 4.7 kan ASP.NET de uitvoeringscontext niet doorstromen vanwege het schakelen tussen systeemeigen en beheerde threads. In plaats daarvan ASP.NET alleen de HttpContext. Vanaf .NET Framework 4.7.1 kunnen HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) modules ook omgevingsgegevens herstellen. Deze functie is gericht op bibliotheken met betrekking tot tracering, profilering, diagnostische gegevens of transacties, die bijvoorbeeld belangrijk zijn voor de uitvoeringsstroom van de toepassing. Zie de functie 'ASP.NET uitvoeringsstap' in het blogbericht .NET Framework 4.7.1 ASP.NET en configuratiefuncties voor meer informatie.

ASP.NET HttpCookie parseren

.NET Framework 4.7.1 bevat een nieuwe methode, HttpCookie.TryParsedie een gestandaardiseerde manier biedt om een HttpCookie object te maken op basis van een tekenreeks en cookiewaarden zoals vervaldatum en pad nauwkeurig toe te wijzen. Zie 'ASP.NET HttpCookie parseren' in het blogbericht .NET Framework 4.7.1 ASP.NET en configuratiefuncties voor meer informatie.

SHA-2-hashopties voor ASP.NET formulierverificatiereferenties

In .NET Framework 4.7 en eerdere versies hebben ontwikkelaars ASP.NET toegestaan om gebruikersreferenties op te slaan met gehashte wachtwoorden in configuratiebestanden met MD5 of SHA1. Vanaf .NET Framework 4.7.1 ondersteunt ASP.NET ook nieuwe beveiligde SHA-2-hashopties, zoals SHA256, SHA384 en SHA512. SHA1 blijft de standaardwaarde en een niet-standaardhashalgoritme kan worden gedefinieerd in het webconfiguratiebestand. Bijvoorbeeld:

<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/login.aspx">
          <credentials passwordFormat="SHA512">
            <user name="jdoe" password="6D003E98EA1C7F04ABF8FCB375388907B7F3EE06F278DB966BE960E7CBBD103DF30CA6D61F7E7FD981B2E4E3A64D43C836A4BEDCA165C33B163E6BCDC538A664" />
          </credentials>
        </forms>
    </authentication>
</system.web>

Nieuw in .NET Framework 4.7

.NET Framework 4.7 bevat nieuwe functies op de volgende gebieden:

Zie .NET Framework 4.7 API-wijzigingen in GitHub voor een lijst met nieuwe API's die zijn toegevoegd aan .NET Framework 4.7. Zie .NET Framework 4.7-lijst met wijzigingen in GitHub voor een lijst met functieverbeteringen en bugfixes in .NET Framework 4.7. Zie Aankondiging van .NET Framework 4.7 in de .NET-blog voor meer informatie.

Basisklassen

.NET Framework 4.7 verbetert de serialisatie door de DataContractJsonSerializer:

Verbeterde functionaliteit met Elliptic Curve Cryptography (ECC)*

In .NET Framework 4.7 ImportParameters(ECParameters) zijn methoden toegevoegd aan de ECDsa en ECDiffieHellman klassen, zodat een object een reeds gevestigde sleutel vertegenwoordigt. Er is ook een ExportParameters(Boolean) methode toegevoegd voor het exporteren van de sleutel met behulp van expliciete curveparameters.

.NET Framework 4.7 voegt ook ondersteuning toe voor extra curven (inclusief de Brainpool-curvesuite) en heeft vooraf gedefinieerde definities toegevoegd voor het gemak van creatie via de nieuwe Create en Create fabrieksmethoden.

U ziet een voorbeeld van verbeteringen in .NET Framework 4.7 cryptografie op GitHub.

Betere ondersteuning voor besturingstekens door de DataContractJsonSerializer

In .NET Framework 4.7 serialiseert de DataContractJsonSerializer klasse controletekens in overeenstemming met de ECMAScript 6-standaard. Dit gedrag is standaard ingeschakeld voor toepassingen die zijn gericht op .NET Framework 4.7 en is een opt-in-functie voor toepassingen die worden uitgevoerd onder .NET Framework 4.7, maar die zijn gericht op een eerdere versie van .NET Framework. Zie de sectie Toepassingscompatibiliteit voor meer informatie.

Netwerken

.NET Framework 4.7 voegt de volgende netwerkgerelateerde functie toe:

Standaardondersteuning voor besturingssystemen voor TLS-protocollen*

Met de TLS-stack, die wordt gebruikt door System.Net.Security.SslStream en up-stackonderdelen zoals HTTP, FTP en SMTP, kunnen ontwikkelaars de standaard TLS-protocollen gebruiken die door het besturingssysteem worden ondersteund. Ontwikkelaars hoeven een TLS-versie niet meer in code te coden.

ASP.NET

In .NET Framework 4.7 bevat ASP.NET de volgende nieuwe functies:

Uitbreidbaarheid van objectcache

Vanaf .NET Framework 4.7 voegt ASP.NET een nieuwe set API's toe waarmee ontwikkelaars de standaardimplementaties van ASP.NET kunnen vervangen voor caching van in-memory objecten en geheugenbewaking. Ontwikkelaars kunnen nu een van de volgende drie onderdelen vervangen als de ASP.NET implementatie niet voldoende is:

  • ObjectCache-archief. Door de configuratiesectie van nieuwe cacheproviders te gebruiken, kunnen ontwikkelaars nieuwe implementaties van een objectcache voor een ASP.NET toepassing inschakelen met behulp van de nieuwe ICacheStoreProvider-interface.

  • Geheugenbewaking. De standaardgeheugenmonitor in ASP.NET geeft toepassingen een waarschuwing wanneer ze dicht bij de geconfigureerde limiet voor privébytes voor het proces worden uitgevoerd, of wanneer de machine weinig fysiek RAM-geheugen heeft. Wanneer deze limieten bijna zijn bereikt, worden meldingen geactiveerd. Voor sommige toepassingen worden meldingen te dicht bij de geconfigureerde limieten geactiveerd om nuttige reacties mogelijk te maken. Ontwikkelaars kunnen nu hun eigen geheugenmonitors schrijven om de standaardwaarde te vervangen door de ApplicationMonitors.MemoryMonitor eigenschap te gebruiken.

  • Reacties op geheugenlimiet. Standaard probeert ASP.NET de objectcache te beperken en periodiek aan te roepen GC.Collect wanneer de limiet voor het privé-byteproces bijna is bereikt. Voor sommige toepassingen zijn de frequentie van aanroepen naar GC.Collect of de hoeveelheid cache die is ingekort inefficiënt. Ontwikkelaars kunnen het standaardgedrag nu vervangen of aanvullen door IObserver-implementaties te abonneren op de geheugenmonitor van de toepassing.

Windows Communication Foundation (WCF)

Windows Communication Foundation (WCF) voegt de volgende functies en wijzigingen toe:

Mogelijkheid om de standaardinstellingen voor berichtbeveiliging te configureren voor TLS 1.1 of TLS 1.2

Vanaf .NET Framework 4.7 kunt u met WCF TLS 1.1 of TLS 1.2 configureren naast SSL 3.0 en TLS 1.0 als standaardprotocol voor berichtbeveiliging. Dit is een opt-in-instelling; om dit in te schakelen, moet u de volgende vermelding toevoegen aan uw toepassingsconfiguratiebestand:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>

Verbeterde betrouwbaarheid van WCF-toepassingen en WCF-serialisatie

WCF bevat een aantal codewijzigingen waarmee racevoorwaarden worden geëlimineerd, waardoor de prestaties en de betrouwbaarheid van serialisatieopties worden verbeterd. Deze omvatten:

  • Betere ondersteuning voor het combineren van asynchrone en synchrone code in aanroepen naar SocketConnection.BeginRead en SocketConnection.Read.
  • Verbeterde betrouwbaarheid bij het afbreken van een verbinding met SharedConnectionListener en DuplexChannelBinder.
  • Verbeterde betrouwbaarheid van serialisatiebewerkingen bij het aanroepen van de FormatterServices.GetSerializableMembers(Type) methode.
  • Verbeterde betrouwbaarheid bij het verwijderen van een ober door de methode ChannelSynchronizer.RemoveWaiter aan te roepen.

Windows Forms

In .NET Framework 4.7 verbetert Windows Forms ondersteuning voor hoge DPI-monitors.

Ondersteuning voor hoge DPI

Vanaf toepassingen die gericht zijn op .NET Framework 4.7, beschikt .NET Framework over hoge DPI- en dynamische DPI-ondersteuning voor Windows Forms toepassingen. Hoge DPI-ondersteuning verbetert de indeling en het uiterlijk van formulieren en besturingselementen op hoge DPI-beeldschermen. Dynamische DPI wijzigt de indeling en weergave van formulieren en besturingselementen wanneer de gebruiker de DPI wijzigt of de schaalfactor van een actieve toepassing weergeeft.

Hoge DPI-ondersteuning is een opt-in-functie die u configureert door een <System.Windows te definiëren. Sectie Forms.ConfigurationSection> in uw toepassingsconfiguratiebestand. Zie High DPI Support in Windows Forms voor meer informatie over het toevoegen van hoge DPI-ondersteuning en dynamische DPI-ondersteuning aan uw Windows Forms toepassing.

Windows Presentation Foundation (WPF)

In .NET Framework 4.7 bevat WPF de volgende verbeteringen:

Ondersteuning voor een touch/stylus-stack op basis van Windows WM_POINTER berichten

U hebt nu de mogelijkheid om een touch/stylus-stack te gebruiken op basis van WM_POINTER berichten in plaats van het Windows Ink Services Platform (WISP). Dit is een opt-in-functie in .NET Framework. Zie de sectie Toepassingscompatibiliteit voor meer informatie.

Nieuwe implementatie voor WPF-afdruk-API's

De afdruk-API's van WPF in de System.Printing.PrintQueue klasse roepen de Windows Print Document Package-API aan in plaats van de afgeschafte XPS Print-API. Zie de sectie Toepassingscompatibiliteit voor de impact van deze wijziging op de compatibiliteit van toepassingen.

Nieuw in .NET Framework 4.6.2

.NET Framework 4.6.2 bevat nieuwe functies op de volgende gebieden:

Zie .NET Framework 4.6.2 API-wijzigingen in GitHub voor een lijst met nieuwe API's die zijn toegevoegd aan .NET Framework 4.6.2. Zie .NET Framework 4.6.2 Lijst met wijzigingen in GitHub voor een lijst met functieverbeteringen en bugfixes in .NET Framework 4.6.2. Zie Aankondiging van .NET Framework 4.6.2 in de .NET-blog voor meer informatie.

ASP.NET

In .NET Framework 4.6.2 bevat ASP.NET de volgende verbeteringen:

Verbeterde ondersteuning voor gelokaliseerde foutberichten in validators voor gegevensaantekening

Met validatiegegevens kunt u validatie uitvoeren door een of meer kenmerken toe te voegen aan een klasse-eigenschap. Het element van ValidationAttribute.ErrorMessage het kenmerk definieert de tekst van het foutbericht als de validatie mislukt. Vanaf .NET Framework 4.6.2 kunt u met ASP.NET eenvoudig foutberichten lokaliseren. Foutberichten worden gelokaliseerd als:

  1. De ValidationAttribute.ErrorMessage waarde wordt opgegeven in het validatiekenmerk.

  2. Het resourcebestand wordt opgeslagen in de map App_LocalResources.

  3. De naam van het gelokaliseerde resourcesbestand heeft de formuliernaam}.resxDataAnnotation.Localization.{, waarbij de naam een cultuurnaam is in de notatie languageCodecountry-/regionCode of languageCode.

  4. De sleutelnaam van de resource is de tekenreeks die is toegewezen aan het ValidationAttribute.ErrorMessage kenmerk en de bijbehorende waarde is het gelokaliseerde foutbericht.

Het volgende kenmerk voor gegevensaantekening definieert bijvoorbeeld het foutbericht van de standaardcultuur voor een ongeldige classificatie.

public class RatingInfo
{
   [Required(ErrorMessage = "The rating must be between 1 and 10.")]
   [Display(Name = "Your Rating")]
   public int Rating { get; set; }
}
Public Class RatingInfo
   <Required(ErrorMessage = "The rating must be between 1 and 10.")>
   <Display(Name = "Your Rating")>
   Public Property Rating As Integer = 1
End Class

Vervolgens kunt u een resourcebestand maken, DataAnnotation.Localization.fr.resx, waarvan de sleutel de tekenreeks van het foutbericht is en waarvan de waarde het gelokaliseerde foutbericht is. Het bestand moet worden gevonden in de App.LocalResources map. Het volgende is bijvoorbeeld de sleutel en de waarde ervan in een gelokaliseerd foutbericht over de Franse taal (fr):

Name Waarde
De classificatie moet tussen 1 en 10 zijn. La note doit être bestaat uit entre 1 et 10.

Daarnaast is lokalisatie van gegevensaantekening uitbreidbaar. Ontwikkelaars kunnen hun eigen localizerprovider voor tekenreeksen aansluiten door de IStringLocalizerProvider interface te implementeren om lokalisatiereeks ergens anders op te slaan dan in een resourcebestand.

Async-ondersteuning met providers van sessiestatusopslag

ASP.NET staat nu toe dat taak terugkerende methoden worden gebruikt met providers van sessiestatusopslag, waardoor ASP.NET apps de schaalbaarheidsvoordelen van asynchroon kunnen krijgen. Ter ondersteuning van asynchrone bewerkingen met providers van sessiestatusopslag bevat ASP.NET een nieuwe interface, System.Web.SessionState.ISessionStateModuledie ontwikkelaars overneemt van en waarmee ontwikkelaars hun eigen sessiestatusmodules en asynchrone sessiearchiefproviders IHttpModule kunnen implementeren. De interface wordt als volgt gedefinieerd:

public interface ISessionStateModule : IHttpModule {
    void ReleaseSessionState(HttpContext context);
    Task ReleaseSessionStateAsync(HttpContext context);
}
Public Interface ISessionStateModule : Inherits IHttpModule
   Sub ReleaseSessionState(context As HttpContext)
   Function ReleaseSessionStateAsync(context As HttpContext) As Task
End Interface

Daarnaast bevat de SessionStateUtility klasse twee nieuwe methoden en IsSessionStateReadOnlyIsSessionStateRequired, die kunnen worden gebruikt om asynchrone bewerkingen te ondersteunen.

Async-ondersteuning voor uitvoercacheproviders

Vanaf .NET Framework 4.6.2 kunnen taak retournerende methoden worden gebruikt met uitvoercacheproviders om de schaalbaarheidsvoordelen van asynchroon te bieden. Providers die deze methoden implementeren, verminderen threadblokkering op een webserver en verbeteren de schaalbaarheid van een ASP.NET-service.

De volgende API's zijn toegevoegd ter ondersteuning van asynchrone uitvoercacheproviders:

Tekencategorieën

Tekens in .NET Framework 4.6.2 worden geclassificeerd op basis van de Unicode Standard versie 8.0.0. In .NET Framework 4.6 en .NET Framework 4.6.1 zijn tekens geclassificeerd op basis van Unicode 6.3-tekencategorieën.

Ondersteuning voor Unicode 8.0 is beperkt tot de classificatie van tekens door de CharUnicodeInfo klasse en van typen en methoden die erop afhankelijk zijn. Dit zijn de StringInfo klasse, de overbelaste Char.GetUnicodeCategory methode en de tekenklassen die worden herkend door de .NET Framework reguliere expressie-engine. Het vergelijken en sorteren van tekens en tekenreeksen wordt niet beïnvloed door deze wijziging en blijft afhankelijk van het onderliggende besturingssysteem of, op Windows 7 systemen, op tekengegevens van .NET Framework.

Zie De Unicode Standard, versie 7.0.0 op de website van het Unicode Consortium voor wijzigingen in tekencategorieën van Unicode 6.0 naar Unicode 7.0. Zie De Unicode Standard, versie 8.0.0 op de website van het Unicode Consortium voor wijzigingen van Unicode 7.0 naar Unicode Consortium.

Cryptografie

Ondersteuning voor X509-certificaten met FIPS 186-3 DSA

.NET Framework 4.6.2 voegt ondersteuning toe voor DSA-certificaten (Digital Signature Algorithm) X509 waarvan de sleutels de FIPS 186-2 1024-bits limiet overschrijden.

Naast het ondersteunen van de grotere sleutelgrootten van FIPS 186-3, biedt .NET Framework 4.6.2 computinghandtekeningen met de SHA-2-serie hash-algoritmen (SHA256, SHA384 en SHA512). FIPS 186-3-ondersteuning wordt geleverd door de nieuwe System.Security.Cryptography.DSACng klasse.

In overeenstemming met recente wijzigingen in de RSA klasse in .NET Framework 4.6 en de ECDsa klasse in .NET Framework 4.6.1 heeft de DSA abstracte basisklasse in .NET Framework 4.6.2 aanvullende methoden om bellers deze functionaliteit te laten gebruiken zonder cast-bewerking. U kunt de DSACertificateExtensions.GetDSAPrivateKey extensiemethode aanroepen om gegevens te ondertekenen, zoals in het volgende voorbeeld wordt weergegeven.

public static byte[] SignDataDsaSha384(byte[] data, X509Certificate2 cert)
{
    using (DSA dsa = cert.GetDSAPrivateKey())
    {
        return dsa.SignData(data, HashAlgorithmName.SHA384);
    }
}
Public Shared Function SignDataDsaSha384(data As Byte(), cert As X509Certificate2) As Byte()
    Using DSA As DSA = cert.GetDSAPrivateKey()
        Return DSA.SignData(data, HashAlgorithmName.SHA384)
    End Using
End Function

En u kunt de DSACertificateExtensions.GetDSAPublicKey extensiemethode aanroepen om ondertekende gegevens te verifiëren, zoals in het volgende voorbeeld wordt weergegeven.

public static bool VerifyDataDsaSha384(byte[] data, byte[] signature, X509Certificate2 cert)
{
    using (DSA dsa = cert.GetDSAPublicKey())
    {
        return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384);
    }
}
 Public Shared Function VerifyDataDsaSha384(data As Byte(), signature As Byte(), cert As X509Certificate2) As Boolean
    Using dsa As DSA = cert.GetDSAPublicKey()
        Return dsa.VerifyData(data, signature, HashAlgorithmName.SHA384)
    End Using
End Function

Verbeterde duidelijkheid voor invoer in ECDiffieHellman key derivation routines

.NET Framework 3,5 heeft ondersteuning toegevoegd voor Elliptic Curve Diffie-Hellman Key Agreement met drie verschillende KDF-routines (Key Derivation Function). De invoer voor de routines en de routines zelf zijn geconfigureerd via eigenschappen van het ECDiffieHellmanCng object. Maar omdat niet elke routine elke invoereigenschap leest, was er voldoende ruimte voor verwarring over het verleden van de ontwikkelaar.

Om dit in .NET Framework 4.6.2 aan te pakken, zijn de volgende drie methoden toegevoegd aan de ECDiffieHellman basisklasse om deze KDF-routines en de bijbehorende invoer duidelijker weer te geven:

Methode ECDiffieHellman Description
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) Sleutelmateriaal afleiden met behulp van de formule

HASH(secretPrepend || x || secretAppend)

HASH(secretPrepend OrElse x OrElse secretAppend)

waarbij x het berekende resultaat is van het EC-Diffie-Hellman-algoritme.
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) Sleutelmateriaal afleiden met behulp van de formule

HMAC(hmacKey, secretPrepend || x || secretAppend)

HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend)

waarbij x het berekende resultaat is van het EC-Diffie-Hellman-algoritme.
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) Hiermee wordt sleutelmateriaal afgeleid met behulp van het PRF-algoritme (Pseudo-Random Function) van TLS.

Ondersteuning voor permanente symmetrische versleuteling

De Windows cryptografiebibliotheek (CNG) heeft ondersteuning toegevoegd voor het opslaan van persistente symmetrische sleutels en het gebruik van op hardware opgeslagen symmetrische sleutels, en .NET Framework 4.6.2 maakt het mogelijk voor ontwikkelaars om gebruik te maken van deze functie. Aangezien het begrip sleutelnamen en sleutelproviders implementatiespecifiek is, moet u met deze functie de constructor van de concrete implementatietypen gebruiken in plaats van de voorkeursfactorybenadering (zoals aanroepen Aes.Create).

Ondersteuning voor permanente symmetrische versleuteling bestaat voor de AES-algoritmen (AesCng) en 3DES (TripleDESCng). Bijvoorbeeld:

public static byte[] EncryptDataWithPersistedKey(byte[] data, byte[] iv)
{
    using (Aes aes = new AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider))
    {
        aes.IV = iv;

        // Using the zero-argument overload is required to make use of the persisted key
        using (ICryptoTransform encryptor = aes.CreateEncryptor())
        {
            if (!encryptor.CanTransformMultipleBlocks)
            {
                throw new InvalidOperationException("This is a sample, this case wasn't handled...");
            }

            return encryptor.TransformFinalBlock(data, 0, data.Length);
        }
    }
}
Public Shared Function EncryptDataWithPersistedKey(data As Byte(), iv As Byte()) As Byte()
    Using Aes As Aes = New AesCng("AesDemoKey", CngProvider.MicrosoftSoftwareKeyStorageProvider)
        Aes.IV = iv

        ' Using the zero-argument overload Is required to make use of the persisted key
        Using encryptor As ICryptoTransform = Aes.CreateEncryptor()
            If Not encryptor.CanTransformMultipleBlocks Then
                Throw New InvalidOperationException("This is a sample, this case wasn't handled...")
            End If
            Return encryptor.TransformFinalBlock(data, 0, data.Length)
        End Using
    End Using
End Function

SignXml-ondersteuning voor SHA-2-hashing

.NET Framework 4.6.2 voegt ondersteuning toe aan de SignedXml klasse voor RSA-SHA256-, RSA-SHA384- en RSA-SHA512 PKCS#1-handtekeningmethoden en SHA256-, SHA384- en SHA512-verwijzingssamenvattalgoritmen.

De URI-constanten worden allemaal weergegeven op SignedXml:

Veld SignedXml Constant
XmlDsigSHA256Url "http://www.w3.org/2001/04/xmlenc#sha256"
XmlDsigRSASHA256Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
XmlDsigSHA384Url "http://www.w3.org/2001/04/xmldsig-more#sha384"
XmlDsigRSASHA384Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha384"
XmlDsigSHA512Url "http://www.w3.org/2001/04/xmlenc#sha512"
XmlDsigRSASHA512Url "http://www.w3.org/2001/04/xmldsig-more#rsa-sha512"

Alle programma's die een aangepaste SignatureDescription handler CryptoConfig hebben geregistreerd om ondersteuning voor deze algoritmen toe te voegen, blijven werken zoals ze in het verleden hebben gedaan, maar omdat er nu platforminstellingen zijn, is de CryptoConfig registratie niet meer nodig.

SqlClient

.NET Framework Gegevensprovider voor SQL Server (System.Data.SqlClient) bevat de volgende nieuwe functies in .NET Framework 4.6.2:

Verbindingspooling en time-outs met Azure SQL databases

Wanneer groepsgewijze verbindingen is ingeschakeld en er een time-out of een andere aanmeldingsfout optreedt, wordt er een uitzondering in de cache opgeslagen en wordt de uitzondering in de cache opgetreden bij elke volgende verbindingspoging voor de komende 5 seconden tot 1 minuut. Zie SQL Server Connection Pooling (ADO.NET) voor meer informatie.

Dit gedrag is niet wenselijk wanneer u verbinding maakt met Azure SQL Databases, omdat verbindingspogingen kunnen mislukken met tijdelijke fouten die doorgaans snel worden hersteld. Om de ervaring met opnieuw proberen te optimaliseren, wordt het blokkerende periodegedrag van de verbindingsgroep verwijderd wanneer verbindingen met Azure SQL Databases mislukken.

Met de toevoeging van het nieuwe PoolBlockingPeriod trefwoord kunt u de blokkeringsperiode selecteren die het meest geschikt is voor uw app. De waarden zijn:

Auto

De blokkeringsperiode van de verbindingsgroep voor een toepassing die verbinding maakt met een Azure SQL Database is uitgeschakeld en de blokkeringsperiode van de verbindingsgroep voor een toepassing die verbinding maakt met een andere SQL Server-instantie is ingeschakeld. Dit is de standaardwaarde. Als de servereindpuntnaam eindigt op een van de volgende, worden ze beschouwd als Azure SQL Databases:

  • .database.windows.net

  • .database.chinacloudapi.cn

  • .database.usgovcloudapi.net

  • .database.cloudapi.de

AlwaysBlock

De blokkerende periode van de verbindingsgroep is altijd ingeschakeld.

NeverBlock

De blokkerende periode van de verbindingsgroep is altijd uitgeschakeld.

Verbeteringen voor Always Encrypted

SQLClient introduceert twee verbeteringen voor Always Encrypted:

  • Om de prestaties van geparameteriseerde query's te verbeteren op versleutelde databasekolommen, worden versleutelingsmetagegevens voor queryparameters nu in de cache opgeslagen. Als de SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled eigenschap is ingesteld true op (dit is de standaardwaarde), als dezelfde query meerdere keren wordt aangeroepen, haalt de client parametermetagegevens van de server slechts één keer op.

  • Kolomversleutelingssleutelvermeldingen in de sleutelcache worden nu verwijderd na een configureerbaar tijdsinterval, ingesteld met behulp van de SqlConnection.ColumnEncryptionKeyCacheTtl eigenschap.

Windows Communication Foundation

In .NET Framework 4.6.2 is Windows Communication Foundation uitgebreid op de volgende gebieden:

WCF-transportbeveiligingsondersteuning voor certificaten die zijn opgeslagen met behulp van CNG

WCF-transportbeveiliging ondersteunt certificaten die zijn opgeslagen met behulp van de Windows cryptografiebibliotheek (CNG). In .NET Framework 4.6.2 is deze ondersteuning beperkt tot het gebruik van certificaten met een openbare sleutel die niet meer dan 32 bits lang is. Wanneer een toepassing is gericht op .NET Framework 4.6.2, is deze functie standaard ingeschakeld.

Voor toepassingen die zijn gericht op .NET Framework 4.6.1 en eerder, maar die worden uitgevoerd op .NET Framework 4.6.2, kan deze functie worden ingeschakeld door de volgende regel toe te voegen aan de <runtimesectie> van het app.config- of web.config-bestand.

<AppContextSwitchOverrides
    value="Switch.System.IdentityModel.DisableCngCertificates=false"
/>

Dit kan ook programmatisch worden gedaan met code zoals de volgende:

private const string DisableCngCertificates = @"Switch.System.IdentityModel.DisableCngCertificates";
AppContext.SetSwitch(disableCngCertificates, false);
Const DisableCngCertificates As String = "Switch.System.IdentityModel.DisableCngCertificates"
AppContext.SetSwitch(disableCngCertificates, False)

Betere ondersteuning voor meerdere regels voor zomertijdaanpassing door de DataContractJsonSerializer-klasse

Klanten kunnen een toepassingsconfiguratie-instelling gebruiken om te bepalen of de DataContractJsonSerializer klasse ondersteuning biedt voor meerdere aanpassingsregels voor één tijdzone. Dit is een opt-in-functie. Als u dit wilt inschakelen, voegt u de volgende instelling toe aan uw app.config-bestand:

<runtime>
     <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseTimeZoneInfo=false" />
</runtime>

Wanneer deze functie is ingeschakeld, gebruikt een DataContractJsonSerializer object het TimeZoneInfo type in plaats van het TimeZone type om datum- en tijdgegevens te deserialiseren. TimeZoneInfo ondersteunt meerdere aanpassingsregels, waardoor het mogelijk is om te werken met historische tijdzonegegevens; TimeZone Niet.

Zie Overzicht van tijdzones voor meer informatie over de TimeZoneInfo structuur- en tijdzoneaanpassingen.

NetNamedPipeBinding best match

WCF heeft een nieuwe app-instelling die kan worden ingesteld voor clienttoepassingen om ervoor te zorgen dat ze altijd verbinding maken met de service die luistert op de URI die het beste overeenkomt met de app die ze aanvragen. Als deze app-instelling is ingesteld false op (de standaardinstelling), is het mogelijk dat clients NetNamedPipeBinding proberen verbinding te maken met een service die luistert op een URI die een subtekenreeks van de aangevraagde URI is.

Een client probeert bijvoorbeeld verbinding te maken met een service die luistert naar net.pipe://localhost/Service1, maar een andere service op die computer die wordt uitgevoerd met beheerdersbevoegdheden luistert naar net.pipe://localhost. Als deze app-instelling is ingesteld falseop, probeert de client verbinding te maken met de verkeerde service. Nadat u de app-instelling hebt ingesteld true, maakt de client altijd verbinding met de best overeenkomende service.

Notitie

Clients die NetNamedPipeBinding services zoeken op basis van het basisadres van de service (indien aanwezig) in plaats van het volledige eindpuntadres. Om ervoor te zorgen dat deze instelling altijd werkt, moet de service een uniek basisadres gebruiken.

Als u deze wijziging wilt inschakelen, voegt u de volgende app-instelling toe aan het App.config- of Web.config-bestand van uw clienttoepassing:

<configuration>
    <appSettings>
        <add key="wcf:useBestMatchNamedPipeUri" value="true" />
    </appSettings>
</configuration>

SSL 3.0 is geen standaardprotocol

Wanneer u NetTcp gebruikt met transportbeveiliging en een referentietype certificaat, is SSL 3.0 niet langer een standaardprotocol dat wordt gebruikt voor het onderhandelen over een beveiligde verbinding. In de meeste gevallen mag dit geen invloed hebben op bestaande apps, omdat TLS 1.0 is opgenomen in de protocollijst voor NetTcp. Alle bestaande clients moeten kunnen onderhandelen over een verbinding met ten minste TLS 1.0. Als Ssl3 is vereist, gebruikt u een van de volgende configuratiemechanismen om deze toe te voegen aan de lijst met onderhandelde protocollen.

Windows Presentation Foundation (WPF)

In .NET Framework 4.6.2 is Windows Presentation Foundation uitgebreid op de volgende gebieden:

Groepssortering

Een toepassing die gebruikmaakt van een CollectionView object om gegevens te groeperen, kan nu expliciet declareren hoe de groepen moeten worden gesorteerd. Met expliciete sortering wordt het probleem opgelost van niet-intuïtieve volgorde die optreedt wanneer een app groepen dynamisch toevoegt of verwijdert, of wanneer deze de waarde van itemeigenschappen wijzigt die betrokken zijn bij het groeperen. Het kan ook de prestaties van het proces voor het maken van groepen verbeteren door vergelijkingen van de groeperingseigenschappen van het type volledige verzameling te verplaatsen naar het soort groepen.

Ter ondersteuning van groepssortering beschrijven de nieuwe GroupDescription.SortDescriptions en GroupDescription.CustomSort eigenschappen hoe u de verzameling groepen sorteert die door het GroupDescription object worden geproduceerd. Dit is vergelijkbaar met de manier waarop de identieke benoemde ListCollectionView eigenschappen beschrijven hoe de gegevensitems moeten worden gesorteerd.

Twee nieuwe statische eigenschappen van de PropertyGroupDescription klasse en CompareNameAscendingCompareNameDescendingkunnen worden gebruikt voor de meest voorkomende gevallen.

De volgende XAML groeperen bijvoorbeeld gegevens op leeftijd, sorteren de leeftijdsgroepen in oplopende volgorde en groeperen de items binnen elke leeftijdsgroep op achternaam.

<GroupDescriptions>
     <PropertyGroupDescription
         PropertyName="Age"
         CustomSort=
              "{x:Static PropertyGroupDescription.CompareNamesAscending}"/>
     </PropertyGroupDescription>
</GroupDescriptions>

<SortDescriptions>
     <SortDescription PropertyName="LastName"/>
</SortDescriptions>

Ondersteuning voor aanraaktoetsenbord

Met ondersteuning voor aanraaktoetsenbord kunt u focustracking in WPF-toepassingen mogelijk maken door het aanraaktoetsenbord automatisch aan te roepen en te sluiten in Windows 10 wanneer de aanraakinvoer wordt ontvangen door een besturingselement dat tekstuele invoer kan aannemen.

In eerdere versies van .NET Framework kunnen WPF-toepassingen zich niet aanmelden voor het bijhouden van de focus zonder ondersteuning voor WPF-pen-/aanraakbewegingen uit te schakelen. Als gevolg hiervan moeten WPF-toepassingen kiezen tussen volledige WPF-aanraakondersteuning of afhankelijk zijn van Windows muispromotie.

DPI per monitor

WpF in .NET Framework 4.6.2 maakt per monitor bewustzijn mogelijk om de recente verspreiding van high-DPI- en hybrid-DPI-omgevingen voor WPF-apps te ondersteunen. Zie de voorbeelden en ontwikkelaarshandleiding over GitHub voor meer informatie over het inschakelen van uw WPF-app om dpi-per monitor te worden.

In eerdere versies van .NET Framework zijn WPF-apps systeem-DPI-bewust. Met andere woorden, de gebruikersinterface van de toepassing wordt naar behoren geschaald door het besturingssysteem, afhankelijk van de DPI van de monitor waarop de app wordt weergegeven.

Voor apps die worden uitgevoerd onder .NET Framework 4.6.2, kunt u DPI-wijzigingen per monitor uitschakelen in WPF-apps door als volgt een configuratie-instructie toe te voegen aan de <runtimesectie> van uw toepassingsconfiguratiebestand:

<runtime>
   <AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
</runtime>

Windows Workflow Foundation (WF)

In .NET Framework 4.6.2 is Windows Workflow Foundation uitgebreid op het volgende gebied:

Ondersteuning voor C#-expressies en IntelliSense in de opnieuw gehoste WF Designer

Vanaf .NET Framework 4.5 ondersteunt WF C#-expressies in zowel de Visual Studio Designer als in codewerkstromen. De opnieuw gehoste werkstroomontwerper is een belangrijke functie van WF waarmee workflowontwerper zich in een toepassing buiten Visual Studio bevindt (bijvoorbeeld in WPF). Windows Workflow Foundation biedt de mogelijkheid om C#-expressies en IntelliSense te ondersteunen in de opnieuw gehoste werkstroomontwerper. Zie het blog Windows Workflow Foundation voor meer informatie.

Availability of IntelliSense when a customer rebuilds a workflow project from Visual StudioIn versies van de .NET Framework vóór 4.6.2 wordt WF Designer IntelliSense verbroken wanneer een klant een werkstroomproject herbouwt vanuit Visual Studio. Hoewel de projectbuild is geslaagd, worden de werkstroomtypen niet gevonden in de ontwerpfunctie en worden waarschuwingen van IntelliSense voor de ontbrekende werkstroomtypen weergegeven in het venster Foutenlijst . .NET Framework 4.6.2 dit probleem verhelpt en IntelliSense beschikbaar maakt.

Werkstroom V1-toepassingen met werkstroomtracking worden nu uitgevoerd onder FIPS-modus

Machines waarvoor de FIPS-nalevingsmodus is ingeschakeld, kunnen nu een werkstroomtoepassing met versie 1 van de werkstroom uitvoeren waarop werkstroomtracking is ingeschakeld. Als u dit scenario wilt inschakelen, moet u de volgende wijziging aanbrengen in uw app.config-bestand:

<add key="microsoft:WorkflowRuntime:FIPSRequired" value="true" />

Als dit scenario niet is ingeschakeld, blijft het uitvoeren van de toepassing een uitzondering genereren met het bericht 'Deze implementatie maakt geen deel uit van de Windows Platform FIPS gevalideerde cryptografische algoritmen'.

Werkstroomverbeteringen bij het gebruik van dynamische updates met Visual Studio Workflow Designer

Workflow Designer, FlowChart Activity Designer en andere werkstroomactiviteitontwerpers laden en weergeven werkstromen die zijn opgeslagen na het aanroepen van de DynamicUpdateServices.PrepareForUpdate methode. In versies van de .NET Framework vóór .NET Framework 4.6.2 kan het laden van een XAML-bestand in Visual Studio voor een werkstroom die is opgeslagen na het aanroepen DynamicUpdateServices.PrepareForUpdate de volgende problemen veroorzaken:

  • Werkstroomontwerper kan het XAML-bestand niet correct laden (wanneer het ViewStateData.Id zich aan het einde van de regel bevindt).

  • Flowchart Activity Designer of andere werkstroomactiviteitontwerpers kunnen alle objecten op hun standaardlocaties weergeven in plaats van gekoppelde eigenschapswaarden.

ClickOnce

ClickOnce is bijgewerkt ter ondersteuning van TLS 1.1 en TLS 1.2 naast het 1.0-protocol dat al wordt ondersteund. ClickOnce detecteert automatisch welk protocol is vereist. Er zijn geen extra stappen in de ClickOnce-toepassing vereist om TLS 1.1- en 1.2-ondersteuning in te schakelen.

Windows Forms- en WPF-apps converteren naar UWP-apps

Windows biedt nu mogelijkheden om bestaande Windows bureaublad-apps, waaronder WPF- en Windows Forms-apps, naar het Universeel Windows-platform (UWP) te brengen. Deze technologie fungeert als een brug door u in staat te stellen uw bestaande codebasis geleidelijk te migreren naar UWP, waardoor uw app naar alle Windows 10 apparaten wordt gebracht.

Geconverteerde bureaublad-apps krijgen een app-identiteit die vergelijkbaar is met de app-identiteit van UWP-apps, waardoor UWP-API's toegankelijk zijn om functies zoals Live-tegels en meldingen in te schakelen. De app blijft zich gedragen zoals voorheen en wordt uitgevoerd als een app met volledig vertrouwen. Zodra de app is geconverteerd, kan een app-containerproces worden toegevoegd aan het bestaande proces voor volledig vertrouwen om een adaptieve gebruikersinterface toe te voegen. Wanneer alle functionaliteit wordt verplaatst naar het containerproces van de app, kan het volledige vertrouwensproces worden verwijderd en kan de nieuwe UWP-app beschikbaar worden gesteld voor alle Windows 10 apparaten.

Foutopsporingsverbeteringen

De niet-beheerde foutopsporings-API is verbeterd in .NET Framework 4.6.2 om extra analyses uit te voeren wanneer er een NullReferenceException wordt gegenereerd, zodat het mogelijk is om te bepalen welke variabele in één regel broncode isnull. Ter ondersteuning van dit scenario zijn de volgende API's toegevoegd aan de niet-beheerde foutopsporings-API.

  • De interfaces ICorDebugCode4, ICorDebugVariableHome en ICorDebugVariableHomeEnum , die de systeemeigen huizen van beheerde variabelen beschikbaar maken. Hierdoor kunnen foutopsporingsprogramma's een codestroomanalyse uitvoeren wanneer er zich een NullReferenceException voordoet en achterwaarts werken om de beheerde variabele te bepalen die overeenkomt met de systeemeigen locatie die was null.

  • De methode ICorDebugType2::GetTypeID biedt een toewijzing voor ICorDebugType aan COR_TYPEID, waardoor het foutopsporingsprogramma een COR_TYPEID kan verkrijgen zonder een exemplaar van het ICorDebugType. Bestaande API's op COR_TYPEID kunnen vervolgens worden gebruikt om de klasse-indeling van het type te bepalen.

Nieuw in .NET Framework 4.6.1

.NET Framework 4.6.1 bevat nieuwe functies op de volgende gebieden:

Zie de volgende onderwerpen voor meer informatie over .NET Framework 4.6.1:

Cryptografie: Ondersteuning voor X509-certificaten met ECDSA

.NET Framework 4.6 heeft RSACng-ondersteuning toegevoegd voor X509-certificaten. .NET Framework 4.6.1 voegt ondersteuning toe voor ECDSA(Elliptic Curve Digital Signature Algorithm) X509-certificaten.

ECDSA biedt betere prestaties en is een veiliger cryptografie-algoritme dan RSA, wat een uitstekende keuze biedt waarbij Transport Layer Security (TLS) prestaties en schaalbaarheid een probleem is. De .NET Framework-implementatie verpakt aanroepen in bestaande Windows functionaliteit.

In de volgende voorbeeldcode ziet u hoe eenvoudig het is om een handtekening voor een bytestream te genereren met behulp van de nieuwe ondersteuning voor ECDSA X509-certificaten die zijn opgenomen in .NET Framework 4.6.1.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public class Net461Code
{
    public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
    {
        using (ECDsa privateKey = cert.GetECDsaPrivateKey())
        {
            return privateKey.SignData(data, HashAlgorithmName.SHA512);
        }
    }

    public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
    {
        return privateKey.SignData(data, HashAlgorithmName.SHA512);
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates

Public Class Net461Code
    Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
        Using privateKey As ECDsa = cert.GetECDsaPrivateKey()
            Return privateKey.SignData(data, HashAlgorithmName.SHA512)
        End Using
    End Function

    Public Shared Function SignECDsaSha512(data As Byte, privateKey As ECDsa) As Byte()
        Return privateKey.SignData(data, HashAlgorithmName.SHA512)
    End Function
End Class

Dit biedt een gemarkeerd contrast met de code die nodig is om een handtekening te genereren in .NET Framework 4.6.

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

public class Net46Code
{
    public static byte[] SignECDsaSha512(byte[] data, X509Certificate2 cert)
    {
        // This would require using cert.Handle and a series of p/invokes to get at the
        // underlying key, then passing that to a CngKey object, and passing that to
        // new ECDsa(CngKey).  It's a lot of work.
        throw new Exception("That's a lot of work...");
    }

    public static byte[] SignECDsaSha512(byte[] data, ECDsa privateKey)
    {
        // This way works, but SignData probably better matches what you want.
        using (SHA512 hasher = SHA512.Create())
        {
            byte[] signature1 = privateKey.SignHash(hasher.ComputeHash(data));
        }

        // This might not be the ECDsa you got!
        ECDsaCng ecDsaCng = (ECDsaCng)privateKey;
        ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512;
        return ecDsaCng.SignData(data);
    }
}
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates

Public Class Net46Code
    Public Shared Function SignECDsaSha512(data As Byte(), cert As X509Certificate2) As Byte()
        ' This would require using cert.Handle and a series of p/invokes to get at the
        ' underlying key, then passing that to a CngKey object, and passing that to
        ' new ECDsa(CngKey).  It's a lot of work.
        Throw New Exception("That's a lot of work...")
    End Function

    Public Shared Function SignECDsaSha512(data As Byte(), privateKey As ECDsa) As Byte()
        ' This way works, but SignData probably better matches what you want.
        Using hasher As SHA512 = SHA512.Create()
            Dim signature1 As Byte() = privateKey.SignHash(hasher.ComputeHash(data))
        End Using

        ' This might not be the ECDsa you got!
        Dim ecDsaCng As ECDsaCng = CType(privateKey, ECDsaCng)
        ecDsaCng.HashAlgorithm = CngAlgorithm.Sha512
        Return ecDsaCng.SignData(data)
    End Function
End Class

ADO.NET

De volgende zijn toegevoegd aan ADO.NET:

Always Encrypted ondersteuning voor door hardware beveiligde sleutels

ADO.NET biedt nu ondersteuning voor het opslaan van Always Encrypted kolomhoofdsleutels in hardwarebeveiligingsmodules (HSM's). Met deze ondersteuning kunnen klanten gebruikmaken van asymmetrische sleutels die zijn opgeslagen in HSM's zonder dat ze aangepaste sleutelarchiefproviders voor kolommen hoeven te schrijven en ze in toepassingen te registreren.

Klanten moeten de door de leverancier geleverde CSP-provider of CNG-sleutelarchiefproviders van HSM installeren op de app-servers of clientcomputers om toegang te krijgen tot Always Encrypted gegevens die zijn beveiligd met kolomhoofdsleutels die zijn opgeslagen in een HSM.

Verbeterd MultiSubnetFailover verbindingsgedrag voor AlwaysOn

SqlClient biedt nu automatisch snellere verbindingen met een AlwaysOn-beschikbaarheidsgroep (AG). Het detecteert transparant of uw toepassing verbinding maakt met een AlwaysOn-beschikbaarheidsgroep (AG) in een ander subnet en detecteert snel de huidige actieve server en biedt een verbinding met de server. Vóór deze release moest een toepassing de connection string instellen om aan te "MultisubnetFailover=true" geven dat deze verbinding maakte met een AlwaysOn-beschikbaarheidsgroep. Zonder het verbindingswoord in te truestellen, kan een toepassing een time-out ervaren tijdens het maken van verbinding met een AlwaysOn-beschikbaarheidsgroep. Met deze release hoeft een toepassing niet meer in true te stellen MultiSubnetFailover op. Zie SqlClient-ondersteuning voor hoge beschikbaarheid, herstel na noodgevallen voor meer informatie over SqlClient-ondersteuning voor AlwaysOn-beschikbaarheidsgroepen.

Windows Presentation Foundation (WPF)

Windows Presentation Foundation bevat een aantal verbeteringen en wijzigingen.

Verbeterde prestaties

De vertraging bij het afvuren van aanraakgebeurtenissen is opgelost in .NET Framework 4.6.1. Bovendien wordt de renderthread tijdens snelle invoer niet meer gekoppeld aan het typen in een RichTextBox besturingselement.

Verbeteringen voor spellingcontrole

De spellingcontrole in WPF is bijgewerkt op Windows 8.1 en nieuwere versies om gebruik te maken van besturingssysteemondersteuning voor spellingcontrole in aanvullende talen. Er is geen wijziging in de functionaliteit voor Windows versies vóór Windows 8.1.

Net als in eerdere versies van .NET Framework wordt de taal voor een TextBox besturingselement of een RichTextBox blok gedetecteerd door te zoeken naar informatie in de volgende volgorde:

  • xml:lang, als het aanwezig is.

  • Huidige invoertaal.

  • Huidige cultuur.

Zie de WPF-blogpost over .NET Framework 4.6.1-functies voor meer informatie over taalondersteuning in WPF.

Aanvullende ondersteuning voor aangepaste woordenlijsten per gebruiker

In .NET Framework 4.6.1 herkent WPF aangepaste woordenlijsten die wereldwijd zijn geregistreerd. Deze mogelijkheid is beschikbaar naast de mogelijkheid om ze per controle te registreren.

In eerdere versies van WPF herkenden aangepaste woordenlijsten geen uitgesloten woorden en AutoCorrectie-lijsten. Ze worden ondersteund op Windows 8.1 en Windows 10 via het gebruik van bestanden die in de %AppData%\Microsoft\Spelling\<language tag> map kunnen worden geplaatst. De volgende regels zijn van toepassing op deze bestanden:

  • De bestanden moeten extensies van .dic hebben (voor toegevoegde woorden), .exc (voor uitgesloten woorden) of .acl (voor AutoCorrectie).

  • De bestanden moeten UTF-16 LE plaintext zijn die begint met de Byte Order Mark (BOM).

  • Elke regel moet bestaan uit een woord (in de lijsten met toegevoegde en uitgesloten woorden) of een autocorrectie-paar met de woorden gescheiden door een verticale balk ('|') (in de AutoCorrectie-woordenlijst).

  • Deze bestanden worden beschouwd als alleen-lezen en worden niet gewijzigd door het systeem.

Notitie

Deze nieuwe bestandsindelingen worden niet rechtstreeks ondersteund door de WPF-spellingcontrole-API's en de aangepaste woordenlijsten die worden geleverd aan WPF in toepassingen, moeten .lex-bestanden blijven gebruiken.

Voorbeelden

Er zijn een aantal WPF-voorbeelden in de opslagplaats Microsoft/WPF-Samples GitHub. Help ons onze voorbeelden te verbeteren door ons een pull-aanvraag te sturen of een GitHub probleem te openen.

DirectX-extensies

WPF bevat een NuGet-pakket dat nieuwe implementaties biedt waarmee D3DImage u eenvoudig kunt samenwerken met DX10- en Dx11-inhoud. De code voor dit pakket is open source en is beschikbaar op GitHub.

Windows Workflow Foundation: Transacties

De Transaction.EnlistPromotableSinglePhase methode kan nu een andere gedistribueerde transactiemanager dan MSDTC gebruiken om de transactie te promoten. U doet dit door een GUID-transactiepromoteridentificatie-id op te geven voor de nieuwe Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) overbelasting. Als deze bewerking is geslaagd, gelden er beperkingen voor de mogelijkheden van de transactie. Zodra een niet-MSDTC-transactiepromoter is ingeschreven, gooien de volgende methoden een TransactionPromotionException omdat deze methoden promotie naar MSDTC vereisen:

Zodra een niet-MSDTC-transactiepromoter is ingeschreven, moet deze worden gebruikt voor toekomstige duurzame inlijstingen met behulp van protocollen die worden gedefinieerd. De Guid transactiepromoter kan worden verkregen door gebruik te maken van de PromoterType accommodatie. Wanneer de transactie bevordert, biedt de transactiepromoter een Byte matrix die het gepromoveerde token vertegenwoordigt. Een toepassing kan het gepromoveerde token verkrijgen voor een niet-MSDTC gepromoveerde transactie met de GetPromotedToken methode.

Gebruikers van de nieuwe Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) overbelasting moeten een specifieke aanroepreeks volgen om de promotiebewerking te kunnen voltooien. Deze regels worden beschreven in de documentatie van de methode.

Profileren

De niet-beheerde profilerings-API is als volgt uitgebreid:

  • Betere ondersteuning voor toegang tot PDBs in de ICorProfilerInfo7-interface .

    In ASP.NET Core wordt het veel gebruikelijker dat assembly's in het geheugen worden gecompileerd door Roslyn. Voor ontwikkelaars die profileringshulpprogramma's maken, betekent dit dat PDBs die historisch op schijf zijn geserialiseerd, mogelijk niet meer aanwezig zijn. Profiler-hulpprogramma's gebruiken vaak PDBs om code weer toe te wijzen aan broncoderegels voor taken zoals codedekking of een line-by-line prestatieanalyse. De interface ICorProfilerInfo7 bevat nu twee nieuwe methoden, ICorProfilerInfo7::GetInMemorySymbolsLength en ICorProfilerInfo7::ReadInMemorySymbols, om deze profilerhulpprogramma's toegang te bieden tot de in-memory PDB-gegevens, door de nieuwe API's te gebruiken, kan een profiler de inhoud van een in-memory PDB verkrijgen als bytematrix en deze vervolgens verwerken of serialiseren op schijf.

  • Betere instrumentatie met de ICorProfiler-interface.

    Profilers die gebruikmaken van de ICorProfiler API's ReJit-functionaliteit voor dynamische instrumentatie kunnen nu bepaalde metagegevens wijzigen. Eerder konden dergelijke hulpprogramma's IL op elk gewenst moment instrumenteeren, maar metagegevens konden alleen worden gewijzigd tijdens de laadtijd van de module. Omdat IL verwijst naar metagegevens, beperkt dit de soorten instrumentatie die kan worden uitgevoerd. We hebben enkele van deze limieten opgeheven door de methode ICorProfilerInfo7::ApplyMetaData toe te voegen ter ondersteuning van een subset van metagegevensbewerkingen nadat de module is geladen, met name door nieuwe AssemblyRef, TypeRefTypeSpec, , MemberRef, , MemberSpecen UserString records toe te voegen. Deze wijziging maakt een veel breder scala aan on-the-fly instrumentatie mogelijk.

Native Image Generator (NGEN) PDBs

Met gebeurtenistracering op meerdere machines kunnen klanten een programma op Machine A profileren en de profileringsgegevens bekijken met bronlijntoewijzing op machine B. Met eerdere versies van .NET Framework kopieert de gebruiker alle modules en systeemeigen installatiekopieën van de geprofileerde machine naar de analysemachine die de IL PDB bevat om de bron-naar-systeemeigen toewijzing te maken. Hoewel dit proces goed werkt wanneer de bestanden relatief klein zijn, zoals voor telefoontoepassingen, kunnen de bestanden zeer groot zijn op desktopsystemen en veel tijd nodig hebben om te kopiëren.

Met Ngen-PDBs kan NGen een PDB maken die de IL-naar-native toewijzing bevat zonder een afhankelijkheid van de IL PDB. In ons scenario voor het traceren van gebeurtenissen op meerdere machines is het kopiëren van de systeemeigen installatiekopie PDB die wordt gegenereerd door Machine A naar Machine B en het gebruik van API's voor foutopsporingsinterfacetoegang om de bron-naar-IL-toewijzing van de IL-PDB en de IL-naar-native toewijzing van de PDB-installatiekopie te lezen. Het combineren van beide toewijzingen biedt een bron-naar-systeemeigen toewijzing. Omdat de systeemeigen installatiekopie PDB veel kleiner is dan alle modules en systeemeigen installatiekopieën, is het kopiëren van Machine A naar Machine B veel sneller.

Nieuw in .NET 2015

.NET 2015 introduceert .NET Framework 4.6 en .NET Core. Sommige nieuwe functies zijn van toepassing op beide en andere functies zijn specifiek voor .NET Framework 4.6 of .NET Core.

  • ASP.NET Core

    .NET 2015 bevat ASP.NET Core, een lean .NET-implementatie voor het bouwen van moderne cloud-apps. ASP.NET Core is modulair, zodat u alleen de functies kunt opnemen die nodig zijn in uw toepassing. Deze kan worden gehost op IIS of zelf-hosten in een aangepast proces en u kunt apps uitvoeren met verschillende versies van de .NET Framework op dezelfde server. Het bevat een nieuw omgevingsconfiguratiesysteem dat is ontworpen voor cloudimplementatie.

    MVC, web-API en webpagina's worden geïntegreerd in één framework met de naam MVC 6. U bouwt ASP.NET Core apps via hulpprogramma's in Visual Studio 2015 of hoger. Uw bestaande toepassingen werken aan de nieuwe .NET Framework. Als u echter een app wilt bouwen die gebruikmaakt van MVC 6 of SignalR 3, moet u het projectsysteem in Visual Studio 2015 of hoger gebruiken.

    Zie ASP.NET Core voor meer informatie.

  • ASP.NET updates

    • Taakgebaseerde API voor Asynchrone reactie leegmaken

      ASP.NET biedt nu een eenvoudige api op basis van taken voor asynchrone responsspoeling, HttpResponse.FlushAsyncwaarmee reacties asynchroon kunnen worden leeggemaakt met behulp van de ondersteuning van async/await uw taal.

    • Modelbinding ondersteunt methoden voor het retourneren van taken

      In .NET Framework 4.5 heeft ASP.NET de functie Modelbinding toegevoegd waarmee een uitbreidbare, codegerichte benadering van CRUD-gegevensbewerkingen in Web Forms pagina's en gebruikersbesturingselementen mogelijk is. Het modelbindingssysteem biedt nu ondersteuning voor Taskhet retourneren van modelbindingsmethoden. Met deze functie kunnen ontwikkelaars Web Forms ontwikkelaars de schaalbaarheidsvoordelen van asynchroon krijgen met het gemak van het systeem voor gegevensbinding wanneer ze nieuwere versies van ORM's gebruiken, waaronder het Entity Framework.

      Asynchrone modelbinding wordt beheerd door de aspnet:EnableAsyncModelBinding configuratie-instelling.

      <appSettings>
          <add key=" aspnet:EnableAsyncModelBinding" value="true|false" />
      </appSettings>
      

      In apps wordt het doel .NET Framework 4.6 standaard ingesteld op true. Voor apps die worden uitgevoerd op .NET Framework 4.6 waarop een eerdere versie van .NET Framework is gericht, is false dit standaard. Deze kan worden ingeschakeld door de configuratie-instelling in te stellen op true.

    • HTTP/2-ondersteuning (Windows 10)

      HTTP/2 is een nieuwe versie van het HTTP-protocol dat veel beter verbindingsgebruik biedt (minder retourneert tussen client en server), wat resulteert in het laden van webpagina's met een lagere latentie voor gebruikers. Webpagina's (in tegenstelling tot services) profiteren het meeste van HTTP/2, omdat het protocol optimaliseert voor meerdere artefacten die worden aangevraagd als onderdeel van één ervaring. HTTP/2-ondersteuning is toegevoegd aan ASP.NET in .NET Framework 4.6. Omdat netwerkfunctionaliteit op meerdere lagen bestaat, zijn er nieuwe functies vereist in Windows, in IIS en in ASP.NET om HTTP/2 in te schakelen. U moet worden uitgevoerd op Windows 10 om HTTP/2 te gebruiken met ASP.NET.

      HTTP/2 wordt ook standaard ondersteund en ingeschakeld voor Windows 10 Universeel Windows-platform -apps (UWP) die gebruikmaken van de System.Net.Http.HttpClient API.

      Om een manier te bieden om de PUSH_PROMISE-functie in ASP.NET toepassingen te gebruiken, is er een nieuwe methode met twee overbelastingen PushPromise(String) en PushPromise(String, String, NameValueCollection), toegevoegd aan de HttpResponse klasse.

      Notitie

      Hoewel ASP.NET Core HTTP/2 ondersteunt, is de ondersteuning voor de functie PUSH PROMISE nog niet toegevoegd.

      De browser en de webserver (IIS op Windows) doen al het werk. U hoeft geen zware taken uit te voeren voor uw gebruikers.

      De meeste van de belangrijkste browsers ondersteunen HTTP/2, dus het is waarschijnlijk dat uw gebruikers profiteren van HTTP/2-ondersteuning als uw server dit ondersteunt.

    • Ondersteuning voor het tokenbindingsprotocol

      Microsoft en Google hebben samengewerkt aan een nieuwe benadering van verificatie, het tokenbindingsprotocol genoemd. Het uitgangspunt is dat verificatietokens (in uw browsercache) kunnen worden gestolen en door criminelen kunnen worden gebruikt voor toegang tot anderszins beveiligde resources (bijvoorbeeld uw bankrekening) zonder uw wachtwoord of andere bevoegde kennis. Het nieuwe protocol is erop gericht dit probleem te verhelpen.

      Het tokenbindingsprotocol wordt als browserfunctie geïmplementeerd in Windows 10. ASP.NET apps deelnemen aan het protocol, zodat verificatietokens legitiem zijn. De client en de serverimplementaties stellen de end-to-end-beveiliging vast die door het protocol is opgegeven.

    • Gerandomiseerde hash-algoritmen voor tekenreeksen

      .NET Framework 4.5 heeft een gerandomiseerd hash-algoritme voor tekenreeksen geïntroduceerd. Het werd echter niet ondersteund door ASP.NET vanwege sommige ASP.NET functies afhankelijk van een stabiele hash-code. In .NET Framework 4.6 worden gerandomiseerde hashalgoritmen voor tekenreeksen nu ondersteund. Gebruik de aspnet:UseRandomizedStringHashAlgorithm configuratie-instelling om deze functie in te schakelen.

      <appSettings>
          <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" />
      </appSettings>
      
  • ADO.NET

    ADO .NET ondersteunt nu de Always Encrypted functie die beschikbaar is in SQL Server 2016. Met Always Encrypted kan SQL Server bewerkingen uitvoeren op versleutelde gegevens, en het beste van alle versleutelingssleutels bevindt zich bij de toepassing in de vertrouwde omgeving van de klant en niet op de server. Always Encrypted klantgegevens beveiligt zodat DBA's geen toegang hebben tot gegevens zonder opmaak. Versleuteling en ontsleuteling van gegevens gebeurt transparant op stuurprogrammaniveau, waardoor wijzigingen die moeten worden aangebracht in bestaande toepassingen worden geminimaliseerd. Zie Always Encrypted (Database Engine) en Always Encrypted (clientontwikkeling) voor meer informatie.

  • 64-bits JIT-compiler voor beheerde code

    .NET Framework 4.6 bevat een nieuwe versie van de 64-bits JIT-compiler (oorspronkelijk code genaamd RyuJIT). De nieuwe 64-bits compiler biedt aanzienlijke prestatieverbeteringen ten opzichte van de oudere 64-bits JIT-compiler. De nieuwe 64-bits compiler is ingeschakeld voor 64-bits processen die worden uitgevoerd op .NET Framework 4.6. Uw app wordt uitgevoerd in een 64-bits proces als deze is gecompileerd als 64-bits of AnyCPU en wordt uitgevoerd op een 64-bits besturingssysteem. Hoewel er zo transparant mogelijk is om de overgang naar de nieuwe compiler te maken, zijn er wijzigingen in gedrag mogelijk.

    De nieuwe 64-bits JIT-compiler bevat ook hardware-SIMD-versnellingsfuncties in combinatie met simd-typen in de System.Numerics naamruimte, wat goede prestatieverbeteringen kan opleveren.

  • Verbeteringen aan assemblylaadprogramma's

    De montagelaadmachine maakt nu efficiënter gebruik van geheugen door IL-assembly's te lossen nadat een bijbehorende NGEN-installatiekopieën zijn geladen. Deze wijziging vermindert het virtuele geheugen, wat vooral nuttig is voor grote 32-bits apps (zoals Visual Studio), en bespaart ook fysiek geheugen.

  • Wijzigingen in basisklassebibliotheek

    Er zijn veel nieuwe API's toegevoegd aan .NET Framework 4.6 om belangrijke scenario's mogelijk te maken. Dit zijn onder andere de volgende wijzigingen en toevoegingen:

    • IReadOnlyCollectionT-implementaties<>

      Aanvullende verzamelingen implementeren IReadOnlyCollection<T> zoals Queue<T> en Stack<T>.

    • CultureInfo.CurrentCulture en CultureInfo.CurrentUICulture

      De CultureInfo.CurrentCulture eigenschappen en CultureInfo.CurrentUICulture eigenschappen zijn nu lezen/schrijven in plaats van alleen-lezen. Als u een nieuw CultureInfo object aan deze eigenschappen toewijst, verandert ook de huidige threadcultuur die is gedefinieerd door de Thread.CurrentThread.CurrentCulture eigenschap en de huidige ui-threadcultuur die is gedefinieerd door de Thread.CurrentThread.CurrentUICulture eigenschappen.

    • Verbeteringen aan garbagecollection (GC)

      De GC klasse bevat TryStartNoGCRegion nu en EndNoGCRegion methoden waarmee u garbagecollection tijdens de uitvoering van een kritiek pad niet kunt toestaan.

      Met een nieuwe overbelasting van de GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) methode kunt u bepalen of zowel de kleine object heap als de grote object heap worden geveegd en gecomprimeerd of alleen worden geveegd.

    • SimD-typen

      De System.Numerics naamruimte bevat nu een aantal SIMD-typen, zoals Matrix3x2, Matrix4x4, PlaneQuaternion, , Vector2, en Vector3Vector4.

      Omdat de nieuwe 64-bits JIT-compiler ook hardware-SIMD-versnellingsfuncties bevat, zijn er met name aanzienlijke prestatieverbeteringen bij het gebruik van de typen SIMD met de nieuwe 64-bits JIT-compiler.

    • Cryptografie-updates

      De System.Security.Cryptography API wordt bijgewerkt ter ondersteuning van de Windows cryptografie-API's van CNG. Vorige versies van de .NET Framework hebben volledig vertrouwd op een eerdere versie van de Windows Cryptografie-API's als basis voor de System.Security.Cryptography implementatie. We hebben aanvragen gehad om de CNG-API te ondersteunen, omdat deze moderne cryptografiealgoritmen ondersteunt, die belangrijk zijn voor bepaalde categorieën apps.

      .NET Framework 4.6 bevat de volgende nieuwe verbeteringen ter ondersteuning van de Windows CNG-cryptografie-API's:

      • Een set uitbreidingsmethoden voor X509-certificaten System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2) en System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2), die indien mogelijk een op CNG gebaseerde implementatie retourneren in plaats van een OP CAPI gebaseerde implementatie. (Sommige smartcards, enzovoort, vereisen nog steeds CAPI en de API's verwerken de terugval).

      • De System.Security.Cryptography.RSACng klasse, die een CNG-implementatie van het RSA-algoritme biedt.

      • Verbeteringen aan de RSA-API, zodat veelgebruikte acties geen cast-bewerkingen meer nodig hebben. Voor het versleutelen van gegevens met behulp van een X509Certificate2 object is bijvoorbeeld code vereist, zoals in eerdere versies van .NET Framework.

        RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
        byte[] oaepEncrypted = rsa.Encrypt(data, true);
        byte[] pkcs1Encrypted = rsa.Encrypt(data, false);
        
        Dim rsa As RSACryptoServiceProvider = CType(cert.PrivateKey, RSACryptoServiceProvider)
        Dim oaepEncrypted() As Byte = rsa.Encrypt(data, True)
        Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, False)
        

        Code die gebruikmaakt van de nieuwe cryptografie-API's in .NET Framework 4.6, kan als volgt worden herschreven om de cast te voorkomen.

        RSA rsa = cert.GetRSAPrivateKey();
        if (rsa == null)
           throw new InvalidOperationException("An RSA certificate was expected");
        
        byte[] oaepEncrypted = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1);
        byte[] pkcs1Encrypted = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1);
        
        Dim rsa As RSA = cert.GetRSAPrivateKey()
        If rsa Is Nothing Then
            Throw New InvalidOperationException("An RSA certificate was expected")
        End If
        
        Dim oaepEncrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA1)
        Dim pkcs1Encrypted() As Byte = rsa.Encrypt(data, RSAEncryptionPadding.Pkcs1)
        
    • Ondersteuning voor het converteren van datums en tijden naar of van Unix-tijd

      De volgende nieuwe methoden zijn toegevoegd aan de DateTimeOffset structuur ter ondersteuning van het converteren van datum- en tijdwaarden naar of van Unix-tijd:

    • Compatibiliteitsswitches

      De AppContext klasse voegt een nieuwe compatibiliteitsfunctie toe waarmee bibliotheekschrijvers een uniform opt-outmechanisme kunnen bieden voor nieuwe functionaliteit voor hun gebruikers. Het brengt een losjes gekoppeld contract tussen onderdelen tot stand om een opt-outaanvraag te communiceren. Deze mogelijkheid is doorgaans belangrijk wanneer een wijziging in bestaande functionaliteit wordt aangebracht. Omgekeerd is er al een impliciete opt-in voor nieuwe functionaliteit.

      Met AppContextbibliotheken definiëren en beschikbaar maken van compatibiliteitsswitches, terwijl code die afhankelijk is van deze switches kan instellen om het gedrag van de bibliotheek te beïnvloeden. Bibliotheken bieden standaard de nieuwe functionaliteit en wijzigen deze alleen (dat wil gezegd, ze bieden de vorige functionaliteit) als de switch is ingesteld.

      Een toepassing (of een bibliotheek) kan de waarde van een switch (die altijd een Boolean waarde is) declareren die een afhankelijke bibliotheek definieert. De switch is altijd impliciet false. Als u de schakeloptie instelt om deze in te true schakelen. De schakeloptie expliciet instellen op false het nieuwe gedrag.

      AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", true);
      
      AppContext.SetSwitch("Switch.AmazingLib.ThrowOnException", True)
      

      De bibliotheek moet controleren of een consument de waarde van de switch heeft gedeclareerd en vervolgens op de juiste wijze actie heeft ondernemen.

      if (!AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", out shouldThrow))
      {
          // This is the case where the switch value was not set by the application.
          // The library can choose to get the value of shouldThrow by other means.
          // If no overrides nor default values are specified, the value should be 'false'.
          // A false value implies the latest behavior.
      }
      
      // The library can use the value of shouldThrow to throw exceptions or not.
      if (shouldThrow)
      {
          // old code
      }
      else
      {
          // new code
      }
      
      If Not AppContext.TryGetSwitch("Switch.AmazingLib.ThrowOnException", shouldThrow) Then
          ' This is the case where the switch value was not set by the application.
          ' The library can choose to get the value of shouldThrow by other means.
          ' If no overrides nor default values are specified, the value should be 'false'.
          ' A false value implies the latest behavior.
      End If
      
      ' The library can use the value of shouldThrow to throw exceptions or not.
      If shouldThrow Then
          ' old code
      Else
          ' new code
      End If
      

      Het is handig om een consistente indeling te gebruiken voor switches, omdat ze een formeel contract zijn dat beschikbaar wordt gesteld door een bibliotheek. Hier volgen twee voor de hand liggende indelingen.

      • Schakel over. naamruimte. switchname

      • Schakel over. bibliotheek. switchname

    • Wijzigingen in het asynchrone patroon op basis van taken (TAP)

      Voor apps die zijn gericht op .NET Framework 4.6 Task en Task<TResult> objecten nemen de cultuur en ui-cultuur van de aanroepende thread over. Het gedrag van apps die zijn gericht op eerdere versies van .NET Framework, of die geen specifieke versie van .NET Framework hebben, wordt niet beïnvloed. Zie de sectie 'Asynchrone bewerkingen op basis van cultuur en taken' van het CultureInfo klasonderwerp voor meer informatie.

      Met de System.Threading.AsyncLocal<T> klasse kunt u omgevingsgegevens vertegenwoordigen die lokaal zijn voor een bepaalde asynchrone controlestroom, zoals een async methode. Het kan worden gebruikt om gegevens over threads te behouden. U kunt ook een callbackmethode definiëren die wordt gewaarschuwd wanneer de omgevingsgegevens worden gewijzigd, omdat de AsyncLocal<T>.Value eigenschap expliciet is gewijzigd of omdat de thread een contextovergang heeft aangetroffen.

      Er zijn drie handige methoden, Task.CompletedTaskTask.FromCanceleden Task.FromException, toegevoegd aan het asynchrone patroon op basis van taken (TAP) om voltooide taken in een bepaalde status te retourneren.

      De NamedPipeClientStream klasse ondersteunt nu asynchrone communicatie met de nieuwe ConnectAsync. Methode.

    • EventSource ondersteunt nu schrijven naar het gebeurtenislogboek

      U kunt nu de EventSource klasse gebruiken om administratieve of operationele berichten aan te melden bij het gebeurtenislogboek, naast eventuele bestaande ETW-sessies die op de computer zijn gemaakt. In het verleden moest u het NuGet-pakket Microsoft.Diagnostics.Tracing.EventSource gebruiken voor deze functionaliteit. Deze functionaliteit is nu ingebouwd in .NET Framework 4.6.

      Zowel het NuGet-pakket als .NET Framework 4.6 zijn bijgewerkt met de volgende functies:

      • Dynamische gebeurtenissen

        Hiermee staat u gebeurtenissen toe die 'on-the-fly' zijn gedefinieerd zonder gebeurtenismethoden te maken.

      • Uitgebreide nettoladingen

        Hiermee kunnen speciaal toegewezen klassen en matrices en primitieve typen worden doorgegeven als nettolading

      • Activiteiten volgen

        Hiermee worden gebeurtenissen starten en stoppen gemarkeerd met een id die alle actieve activiteiten vertegenwoordigt.

      Ter ondersteuning van deze functies is de overbelaste Write methode toegevoegd aan de EventSource klasse.

  • Windows Presentation Foundation (WPF)

    • HDPI-verbeteringen

      HDPI-ondersteuning in WPF is nu beter in .NET Framework 4.6. Er zijn wijzigingen aangebracht in het afronden van de lay-out om het aantal knipsels in besturingselementen met randen te verminderen. Deze functie is standaard alleen ingeschakeld als uw TargetFrameworkAttribute functie is ingesteld op .NET Framework 4.6. Toepassingen die gericht zijn op eerdere versies van het framework, maar worden uitgevoerd op .NET Framework 4.6, kunnen zich aanmelden voor het nieuwe gedrag door de volgende regel toe te voegen aan de <runtimesectie> van het app.config-bestand:

      <AppContextSwitchOverrides
      value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false"
      />
      

      WPF-vensters die meerdere monitors met verschillende DPI-instellingen (Multi-DPI-instellingen) gebruiken, worden nu volledig weergegeven zonder uitgezonderde regio's. U kunt zich afmelden voor dit gedrag door de volgende regel toe te voegen aan de <appSettings> sectie van het app.config-bestand om dit nieuwe gedrag uit te schakelen:

      <add key="EnableMultiMonitorDisplayClipping" value="true"/>
      

      Ondersteuning voor het automatisch laden van de rechtercursor op basis van dpi-instelling is toegevoegd aan System.Windows.Input.Cursor.

    • Touch is beter

      Klantrapporten over Verbinding maken dat aanraking onvoorspelbaar gedrag produceert, zijn behandeld in .NET Framework 4.6. De drempelwaarde voor dubbeltik voor Windows Store-toepassingen en WPF-toepassingen is nu hetzelfde in Windows 8.1 en hoger.

    • Ondersteuning voor transparante onderliggende vensters

      WPF in .NET Framework 4.6 ondersteunt transparante onderliggende vensters in Windows 8.1 en hoger. Hiermee kunt u niet-rechthoekige en transparante onderliggende vensters maken in uw vensters op het hoogste niveau. U kunt deze functie inschakelen door de HwndSourceParameters.UsesPerPixelTransparency eigenschap in te stellen op true.

  • Windows Communication Foundation (WCF)

    • SSL-ondersteuning

      WCF ondersteunt nu SSL-versie TLS 1.1 en TLS 1.2, naast SSL 3.0 en TLS 1.0, wanneer u NetTcp gebruikt met transportbeveiliging en clientverificatie. Het is nu mogelijk om te selecteren welk protocol moet worden gebruikt of om oude minder veilige protocollen uit te schakelen. U kunt dit doen door de SslProtocols eigenschap in te stellen of door het volgende toe te voegen aan een configuratiebestand.

      <netTcpBinding>
          <binding>
            <security mode= "None|Transport|Message|TransportWithMessageCredential" >
                <transport clientCredentialType="None|Windows|Certificate"
                          protectionLevel="None|Sign|EncryptAndSign"
                          sslProtocols="Ssl3|Tls1|Tls11|Tls12">
                  </transport>
            </security>
          </binding>
      </netTcpBinding>
      
    • Berichten verzenden met behulp van verschillende HTTP-verbindingen

      Met WCF kunnen gebruikers er nu voor zorgen dat bepaalde berichten worden verzonden met behulp van verschillende onderliggende HTTP-verbindingen. U kunt dit op twee manieren doen:

      • Een voorvoegsel voor de naam van een verbindingsgroep gebruiken

        Gebruikers kunnen een tekenreeks opgeven die WCF gebruikt als voorvoegsel voor de naam van de verbindingsgroep. Twee berichten met verschillende voorvoegsels worden verzonden met behulp van verschillende onderliggende HTTP-verbindingen. U stelt het voorvoegsel in door een sleutel/waardepaar toe te voegen aan de eigenschap van Message.Properties het bericht. De sleutel is HttpTransportConnectionGroupNamePrefix; de waarde is het gewenste voorvoegsel.

      • Verschillende kanaalfactory's gebruiken

        Gebruikers kunnen ook een functie inschakelen die ervoor zorgt dat berichten die worden verzonden met behulp van kanalen die door verschillende kanaalfactory's zijn gemaakt, verschillende onderliggende HTTP-verbindingen gebruiken. Als u deze functie wilt inschakelen, moeten gebruikers het volgende appSetting instellen op true:

        <appSettings>
            <add key="wcf:httpTransportBinding:useUniqueConnectionPoolPerFactory" value="true" />
        </appSettings>
        
  • Windows Workflow Foundation (NF)

    U kunt nu het aantal seconden opgeven dat een werkstroomservice een niet-orderbewerkingsaanvraag bevat wanneer er een openstaande bladwijzer 'niet-protocol' is voordat er een time-out optreedt voor de aanvraag. Een bladwijzer zonder protocol is een bladwijzer die niet is gerelateerd aan openstaande ontvangstactiviteiten. Sommige activiteiten maken bladwijzers zonder protocol binnen hun implementatie, dus het is mogelijk niet duidelijk dat er een bladwijzer bestaat die niet het protocol bevat. Deze omvatten State en Pick. Dus als u een werkstroomservice hebt geïmplementeerd met een statusmachine of met een pick-activiteit, hebt u waarschijnlijk bladwijzers zonder protocol. U geeft het interval op door een regel als de volgende toe te voegen aan de appSettings sectie van uw app.config-bestand:

    <add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>
    

    De standaardwaarde is 60 seconden. Als value deze optie is ingesteld op 0, worden out-of-orderaanvragen onmiddellijk geweigerd met een fout met tekst die er als volgt uitziet:

    Operation 'Request3|{http://tempuri.org/}IService' on service instance with identifier '2b0667b6-09c8-4093-9d02-f6c67d534292' cannot be performed at this time. Please ensure that the operations are performed in the correct order and that the binding in use provides ordered delivery guarantees.
    

    Dit is hetzelfde bericht dat u ontvangt als er een afwezigheidsbewerkingsbericht wordt ontvangen en er geen bladwijzers zonder protocol zijn.

    Als de waarde van het FilterResumeTimeoutInSeconds element niet-nul is, zijn er bladwijzers zonder protocol en verloopt het time-outinterval, mislukt de bewerking met een time-outbericht.

  • Transacties

    U kunt nu de gedistribueerde transactie-id opnemen voor de transactie die een uitzondering heeft veroorzaakt die is afgeleid van TransactionException het gegenereerde. U doet dit door de volgende sleutel toe te voegen aan de appSettings sectie van uw app.config bestand:

    <add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>
    

    De standaardwaarde is false.

  • Netwerken

    • Socket hergebruik

      Windows 10 bevat een nieuw algoritme voor netwerken met hoge schaalbaarheid dat beter gebruik maakt van machineresources door lokale poorten te hergebruiken voor uitgaande TCP-verbindingen. .NET Framework 4.6 ondersteunt het nieuwe algoritme, waardoor .NET-apps kunnen profiteren van het nieuwe gedrag. In eerdere versies van Windows was er een kunstmatige gelijktijdige verbindingslimiet (meestal 16.384, de standaardgrootte van het dynamische poortbereik), waardoor de schaalbaarheid van een service kon worden beperkt door poortuitputting te veroorzaken bij het laden.

      In .NET Framework 4.6 zijn er twee API's toegevoegd om het hergebruik van poorten mogelijk te maken, waardoor de limiet van 64 kB voor gelijktijdige verbindingen effectief wordt verwijderd:

      De eigenschap is false standaard tenzij ServicePointManager.ReusePort de HWRPortReuseOnSocketBind waarde van de HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 registersleutel is ingesteld op 0x1. Als u lokale poort opnieuw wilt gebruiken voor HTTP-verbindingen, stelt u de ServicePointManager.ReusePort eigenschap in op true. Dit zorgt ervoor dat alle uitgaande TCP-socketverbindingen van HttpClient en HttpWebRequest een nieuwe Windows 10 socketoptie, SO_REUSE_UNICASTPORT, gebruiken waarmee lokale poort opnieuw kan worden gebruikt.

      Ontwikkelaars die een toepassing met alleen sockets schrijven, kunnen de System.Net.Sockets.SocketOptionName optie opgeven bij het aanroepen van een methode, zoals Socket.SetSocketOption dat uitgaande sockets lokale poorten hergebruiken tijdens de binding.

    • Ondersteuning voor internationale domeinnamen en PunyCode

      Er is een nieuwe eigenschap IdnHosttoegevoegd aan de Uri klasse om internationale domeinnamen en PunyCode beter te ondersteunen.

  • Het formaat wijzigen in Windows Forms besturingselementen.

    Deze functie is uitgebreid in .NET Framework 4.6 om de DomainUpDown, NumericUpDown, en DataGridViewComboBoxColumntypen DataGridViewColumn en ToolStripSplitButton de rechthoek op te nemen die is opgegeven door de eigenschap die wordt gebruikt bij het Bounds tekenen van een UITypeEditor.

    Dit is een opt-in-functie. Als u dit wilt inschakelen, stelt u het element true in op EnableWindowsFormsHighDpiAutoResizing het toepassingsconfiguratiebestand (app.config):

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Ondersteuning voor codepaginacoderingen

    .NET Core ondersteunt voornamelijk de Unicode-coderingen en biedt standaard beperkte ondersteuning voor codepaginacoderingen. U kunt ondersteuning toevoegen voor codepaginacoderingen die beschikbaar zijn in .NET Framework, maar niet worden ondersteund in .NET Core door codepaginacoderingen te registreren bij de Encoding.RegisterProvider methode. Voor meer informatie raadpleegt u System.Text.CodePagesEncodingProvider.

  • systeemeigen .NET

Universeel Windows-platform (UWP)-apps die zijn geschreven in C# of Visual Basic kunnen profiteren van een nieuwe technologie waarmee apps worden gecompileerd naar systeemeigen code in plaats van IL. Deze technologie produceert apps met snellere opstart- en uitvoeringstijden. Zie Apps compileren met systeemeigen .NET voor meer informatie. Zie systeemeigen .NET en Compilatie voor een overzicht van systeemeigen .NET waarin wordt onderzocht hoe deze verschilt van zowel JIT-compilatie als NGEN en wat dat betekent voor uw code.

Uw apps worden standaard gecompileerd naar systeemeigen code wanneer u ze compileert met Visual Studio 2015 of hoger. Zie Aan de slag met systeemeigen .NET voor meer informatie.

Ter ondersteuning van foutopsporing systeemeigen .NET apps zijn een aantal nieuwe interfaces en opsommingen toegevoegd aan de niet-beheerde foutopsporings-API. Zie het onderwerp Foutopsporing (Naslaginformatie over niet-beheerde API's) voor meer informatie.

Nieuw in .NET Framework 4.5.2

  • Nieuwe API's voor ASP.NET-apps. Met de nieuwe HttpResponse.AddOnSendingHeaders methoden HttpResponseBase.AddOnSendingHeaders kunt u antwoordheaders en statuscode inspecteren en wijzigen wanneer het antwoord wordt leeggemaakt naar de client-app. Overweeg deze methoden te gebruiken in plaats van de PreSendRequestHeaders en PreSendRequestContent gebeurtenissen; ze zijn efficiënter en betrouwbaarder.

    Met de HostingEnvironment.QueueBackgroundWorkItem methode kunt u kleine achtergrondwerkitems plannen. ASP.NET houdt deze items bij en voorkomt dat IIS het werkproces abrupt beëindigt totdat alle achtergrondwerkitems zijn voltooid. Deze methode kan niet buiten een ASP.NET beheerd app-domein worden aangeroepen.

    De nieuwe HttpResponse.HeadersWritten waarden en HttpResponseBase.HeadersWritten eigenschappen retourneren Booleaanse waarden die aangeven of de antwoordheaders zijn geschreven. U kunt deze eigenschappen gebruiken om ervoor te zorgen dat aanroepen naar API's, zoals HttpResponse.StatusCode (die uitzonderingen genereren als de headers zijn geschreven), slagen.

  • Het formaat wijzigen in Windows Forms besturingselementen. Deze functie is uitgevouwen. U kunt nu de systeem-DPI-instelling gebruiken om het formaat van onderdelen van de volgende aanvullende besturingselementen te wijzigen (bijvoorbeeld de vervolgkeuzepijl in keuzelijsten met invoervak):

    Dit is een opt-in-functie. Als u dit wilt inschakelen, stelt u het element true in op EnableWindowsFormsHighDpiAutoResizing het toepassingsconfiguratiebestand (app.config):

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Nieuwe werkstroomfunctie. Een resourcemanager die gebruikmaakt van de EnlistPromotableSinglePhase methode (en daarom de IPromotableSinglePhaseNotification interface implementeert) kan de nieuwe Transaction.PromoteAndEnlistDurable methode gebruiken om het volgende aan te vragen:

    Dit kan worden gedaan binnen hetzelfde app-domein en vereist geen extra onbeheerde code om te communiceren met MSDTC om de promotie uit te voeren. De nieuwe methode kan alleen worden aangeroepen wanneer er een openstaande aanroep is van System.Transactions de IPromotableSinglePhaseNotificationPromote methode die wordt geïmplementeerd door de promotable-aanroep.

  • Profileringsverbeteringen. De volgende nieuwe niet-beheerde profilerings-API's bieden krachtigere profilering:

    Eerdere ICorProfiler implementaties ondersteunden vertraagd laden van afhankelijke assembly's. Voor de nieuwe profilerings-API's zijn afhankelijke assembly's vereist die door de profiler worden geïnjecteerd om onmiddellijk te kunnen worden geladen, in plaats van te worden geladen nadat de app volledig is geïnitialiseerd. Deze wijziging heeft geen invloed op gebruikers van de bestaande ICorProfiler API's.

  • Verbeteringen voor foutopsporing. De volgende nieuwe onbeheerde foutopsporings-API's bieden een betere integratie met een profiler. U kunt nu toegang krijgen tot metagegevens die door de profiler zijn ingevoegd, evenals lokale variabelen en code die worden geproduceerd door reJIT-compileraanvragen bij dumpfoutopsporing.

  • Wijzigingen in gebeurtenistracering. .NET Framework 4.5.2 maakt out-of-process, Event Tracing voor Windows (ETW)-gebaseerde activiteitstracering mogelijk voor een groter oppervlak. Hierdoor kunnen APM-leveranciers (Advanced Power Management) lichtgewicht hulpprogramma's bieden waarmee de kosten van afzonderlijke aanvragen en activiteiten die threads kruisen nauwkeurig worden bijgehouden. Deze gebeurtenissen worden alleen gegenereerd wanneer ETW-controllers ze inschakelen; Daarom zijn de wijzigingen niet van invloed op eerder geschreven ETW-code of -code die wordt uitgevoerd met ETW uitgeschakeld.

  • Een transactie promoten en converteren naar een duurzame opname

    Transaction.PromoteAndEnlistDurableis een nieuwe API toegevoegd aan .NET Framework 4.5.2 en 4.6:

    [System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name = "FullTrust")]
    public Enlistment PromoteAndEnlistDurable(Guid resourceManagerIdentifier,
                                              IPromotableSinglePhaseNotification promotableNotification,
                                              ISinglePhaseNotification enlistmentNotification,
                                              EnlistmentOptions enlistmentOptions)
    
    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.LinkDemand, Name:="FullTrust")>
    public Function PromoteAndEnlistDurable(resourceManagerIdentifier As Guid,
                                            promotableNotification As IPromotableSinglePhaseNotification,
                                            enlistmentNotification As ISinglePhaseNotification,
                                            enlistmentOptions As EnlistmentOptions) As Enlistment
    

    De methode kan worden gebruikt door een opname die eerder is gemaakt als Transaction.EnlistPromotableSinglePhase reactie op de ITransactionPromoter.Promote methode. Het vraagt System.Transactions om de transactie te promoveren naar een MSDTC-transactie en om de promotietabel-opname te converteren naar een duurzame opname. Nadat deze methode is voltooid, wordt er niet meer naar de IPromotableSinglePhaseNotification interface verwezen System.Transactionsen worden toekomstige meldingen binnengekomen op de opgegeven ISinglePhaseNotification interface. De betrokken opname moet fungeren als een duurzame opname, het ondersteunen van transactielogboeken en herstel. Transaction.EnlistDurable Raadpleeg voor meer informatie. Bovendien moet de aanmelding worden ondersteund ISinglePhaseNotification. Deze methode kan alleen worden aangeroepen tijdens het verwerken van een ITransactionPromoter.Promote aanroep. Als dat niet het geval is, wordt er een TransactionException uitzondering gegenereerd.

Nieuw in .NET Framework 4.5.1

Updates van april 2014:

  • Visual Studio 2013 Update 2 bevat updates voor de sjablonen van de Portable Class Library ter ondersteuning van deze scenario's:

    • U kunt Windows Runtime API's gebruiken in draagbare bibliotheken die gericht zijn op Windows 8.1, Windows Phone 8.1 en Windows Phone Silverlight 8.1.

    • U kunt XAML (Windows) opnemen. UI. XAML-typen) in draagbare bibliotheken wanneer u zich richt op Windows 8.1 of Windows Phone 8.1. De volgende XAML-sjablonen worden ondersteund: lege pagina, resourcewoordenlijst, sjabloonbeheer en gebruikersbeheer.

    • U kunt een draagbaar Windows Runtime-onderdeel (.winmd-bestand) maken voor gebruik in Store-apps die zijn gericht op Windows 8.1 en Windows Phone 8.1.

    • U kunt een Windows Store of Windows Phone Store-klassebibliotheek opnieuw krijgt, zoals een Portable Class Library.

    Zie Portable Class Library voor meer informatie over deze wijzigingen.

  • De .NET Framework inhoudsset bevat nu documentatie voor systeemeigen .NET, een precompilatietechnologie voor het bouwen en implementeren van Windows-apps. systeemeigen .NET compileert uw apps rechtstreeks naar systeemeigen code, in plaats van naar tussenliggende taal (IL), voor betere prestaties. Zie Apps compileren met systeemeigen .NET voor meer informatie.

  • De .NET Framework Referentiebron biedt een nieuwe browse-ervaring en verbeterde functionaliteit. U kunt nu online door de .NET Framework broncode bladeren, de verwijzing voor offlineweergave downloaden en de bronnen (inclusief patches en updates) doorlopen tijdens foutopsporing. Zie het blogbericht A new look for .NET Reference Source voor meer informatie.

Nieuwe functies en verbeteringen in de basisklassen in .NET Framework 4.5.1 zijn onder andere:

  • Automatische bindingsomleiding voor assembly's. Vanaf Visual Studio 2013, wanneer u een app compileert die is gericht op .NET Framework 4.5.1, kunnen bindingsomleidingen worden toegevoegd aan het app-configuratiebestand als uw app of de bijbehorende onderdelen verwijzen naar meerdere versies van dezelfde assembly. U kunt deze functie ook inschakelen voor projecten die zijn gericht op oudere versies van .NET Framework. Zie Procedure: Automatische bindingsomleiding in- en uitschakelen voor meer informatie.

  • De mogelijkheid om diagnostische gegevens te verzamelen om ontwikkelaars te helpen de prestaties van server- en cloudtoepassingen te verbeteren. Zie de WriteEventWithRelatedActivityId en WriteEventWithRelatedActivityIdCore methoden in de EventSource klasse voor meer informatie.

  • Mogelijkheid om de grote object heap (LOH) expliciet te comprimeren tijdens garbagecollection. Zie de GCSettings.LargeObjectHeapCompactionMode eigenschap voor meer informatie.

  • Aanvullende prestatieverbeteringen, zoals ASP.NET app-schorsing, multi-core JIT-verbeteringen en sneller opstarten van apps na een .NET Framework update. Zie de aankondiging .NET Framework 4.5.1 en de blogpost ASP.NET app onderbreken voor meer informatie.

Verbeteringen in Windows Forms zijn onder andere:

  • Het formaat wijzigen in Windows Forms besturingselementen. U kunt de systeem-DPI-instelling gebruiken om het formaat van onderdelen van besturingselementen te wijzigen (bijvoorbeeld de pictogrammen die worden weergegeven in een eigenschappenraster) door u aan te geven met een vermelding in het toepassingsconfiguratiebestand (app.config) voor uw app. Deze functie wordt momenteel ondersteund in de volgende Windows Forms besturingselementen:

    Als u deze functie wilt inschakelen, voegt u een nieuw <appSettings-element> toe aan het configuratiebestand (app.config) en stelt u het EnableWindowsFormsHighDpiAutoResizing element in op true:

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    

Verbeteringen bij het opsporen van fouten in uw .NET Framework-apps in Visual Studio 2013 zijn onder andere:

  • Retourneer waarden in het Visual Studio foutopsporingsprogramma. Wanneer u fouten in een beheerde app in Visual Studio 2013 opsneert, worden in het venster Autos retourtypen en -waarden voor methoden weergegeven. Deze informatie is beschikbaar voor desktop-, Windows Store- en Windows Phone-apps. Zie Retourwaarden van methode-aanroepen onderzoeken voor meer informatie.

  • Bewerken en doorgaan voor 64-bits apps. Visual Studio 2013 ondersteunt de functie Bewerken en Doorgaan voor 64-bits beheerde apps voor desktop, Windows Store en Windows Phone. De bestaande beperkingen blijven van kracht voor zowel 32-bits als 64-bits apps (zie het laatste gedeelte van het artikel Ondersteunde codewijzigingen (C#).

  • Asynchrone foutopsporing. Om het eenvoudiger te maken om fouten op te sporen in asynchrone apps in Visual Studio 2013, verbergt de aanroepstack de infrastructuurcode van compilers ter ondersteuning van asynchrone programmering en ketens in logische bovenliggende frames, zodat u de uitvoering van logische programma's duidelijker kunt volgen. Een venster Taken vervangt het venster Parallelle taken en geeft taken weer die betrekking hebben op een bepaald onderbrekingspunt, en geeft ook andere taken weer die momenteel actief of gepland zijn in de app. Meer informatie over deze functie vindt u in de sectie Asynchrone foutopsporing van de aankondiging van .NET Framework 4.5.1.

  • Betere uitzonderingsondersteuning voor Windows Runtime onderdelen. In Windows 8.1 bewaren uitzonderingen die ontstaan uit Windows Store-apps informatie over de fout die de uitzondering heeft veroorzaakt, zelfs over taalgrenzen heen. Meer informatie over deze functie vindt u in de sectie 'Windows Store-app-ontwikkeling' van de aankondiging van .NET Framework 4.5.1.

Vanaf Visual Studio 2013 kunt u het hulpprogramma voor begeleide optimalisatie van beheerde profielen (Mpgo.exe) gebruiken om Windows 8.x Store-apps en desktop-apps te optimaliseren.

Zie ASP.NET en webhulpprogramma's voor Visual Studio 2013 voor nieuwe functies in ASP.NET 4.5.1.

Nieuw in .NET Framework 4.5

Basisklassen

  • De mogelijkheid om het opnieuw opstarten van het systeem te verminderen door .NET Framework 4 toepassingen tijdens de implementatie te detecteren en te sluiten. Zie Het verminderen van het opnieuw opstarten van het systeem tijdens .NET Framework 4.5-installaties.

  • Ondersteuning voor matrices die groter zijn dan 2 gigabyte (GB) op 64-bits platforms. Deze functie kan worden ingeschakeld in het configuratiebestand van de toepassing. Zie het <element gcAllowVeryLargeObjects>, waarin ook andere beperkingen voor objectgrootte en matrixgrootte worden vermeld.

  • Betere prestaties via garbagecollection op de achtergrond voor servers. Wanneer u de garbagecollection van de server in .NET Framework 4.5 gebruikt, wordt de garbagecollection op de achtergrond automatisch ingeschakeld. Zie de sectie Garbagecollection van de achtergrondserver van het onderwerp Fundamentals of Garbagecollection .

  • JIT-compilatie (Just-In-Time) op de achtergrond, die optioneel beschikbaar is op multi-core processors om de prestaties van toepassingen te verbeteren. Zie ProfileOptimization.

  • De mogelijkheid om te beperken hoe lang de reguliere expressie-engine probeert een reguliere expressie op te lossen voordat er een time-out optreedt. Zie de Regex.MatchTimeout eigenschap.

  • De mogelijkheid om de standaardcultuur voor een toepassingsdomein te definiëren. Bekijk de CultureInfo klas.

  • Consoleondersteuning voor Unicode-codering (UTF-16). Bekijk de Console klas.

  • Ondersteuning voor versiebeheer van culturele tekenreeksvolgorde en vergelijkingsgegevens. Bekijk de SortVersion klas.

  • Betere prestaties bij het ophalen van resources. Zie Resources verpakken en implementeren.

  • Verbeteringen in zip-compressie om de grootte van een gecomprimeerd bestand te verkleinen. Zie de System.IO.Compression naamruimte.

  • Mogelijkheid om een weerspiegelingscontext aan te passen om het standaardgedrag van weerspiegeling door de CustomReflectionContext klasse te overschrijven.

  • Ondersteuning voor de 2008-versie van de standaard Internationalized Domain Names in Applications (IDNA) wanneer de System.Globalization.IdnMapping klasse wordt gebruikt op Windows 8.

  • Delegering van tekenreeksvergelijking met het besturingssysteem, dat Unicode 6.0 implementeert wanneer de .NET Framework wordt gebruikt op Windows 8. Wanneer de .NET Framework op andere platforms wordt uitgevoerd, bevat de .NET Framework eigen tekenreeksvergelijkingsgegevens, waarmee Unicode 5.x wordt geïmplementeerd. Zie de String klas en de sectie Opmerkingen van de SortVersion klas.

  • De mogelijkheid om de hash-codes voor tekenreeksen per toepassingsdomein te berekenen. Zie <het element UseRandomizedStringHashAlgorithm>.

  • Typereflectie ondersteunt splitsing tussen Type klassen en TypeInfo klassen. Zie Weerspiegeling in de .NET Framework voor Windows Store-apps.

Managed Extensibility Framework (MEF)

In .NET Framework 4.5 biedt de Managed Extensibility Framework (MEF) de volgende nieuwe functies:

  • Ondersteuning voor algemene typen.

  • Programmeermodel op basis van conventies waarmee u onderdelen kunt maken op basis van naamconventies in plaats van kenmerken.

  • Meerdere bereiken.

  • Een subset van MEF die u kunt gebruiken wanneer u Windows 8.x Store-apps maakt. Deze subset is beschikbaar als downloadbaar pakket vanuit de NuGet Gallery. Als u het pakket wilt installeren, opent u uw project in Visual Studio, kiest u NuGet-pakketten beheren in het menu Project en zoekt u online naar het Microsoft.Composition pakket.

Zie Managed Extensibility Framework (MEF) voor meer informatie.

Asynchrone bestandsbewerkingen

In .NET Framework 4.5 zijn nieuwe asynchrone functies toegevoegd aan de C# en Visual Basic talen. Met deze functies wordt een taakmodel toegevoegd voor het uitvoeren van asynchrone bewerkingen. Als u dit nieuwe model wilt gebruiken, gebruikt u de asynchrone methoden in de I/O-klassen. Zie Asynchrone bestands-I/O.

Hulpprogramma's

In .NET Framework 4.5 kunt u met resourcebestandgenerator (Resgen.exe) een RESW-bestand maken voor gebruik in Windows 8.x Store-apps van een .resources-bestand dat is ingesloten in een .NET Framework assembly. Zie Resgen.exe (resourcebestandgenerator) voor meer informatie.

Met Managed Profile Guided Optimization (Mpgo.exe) kunt u de opstarttijd, het geheugengebruik (grootte van de werkset) en doorvoer verbeteren door systeemeigen installatiekopieën te optimaliseren. Het opdrachtregelprogramma genereert profielgegevens voor systeemeigen installatiekopietoepassingsassembly's. Zie Mpgo.exe (Managed Profile Guided Optimization Tool). Vanaf Visual Studio 2013 kunt u Mpgo.exe gebruiken om Windows 8.x Store-apps en desktop-apps te optimaliseren.

Parallelle computing

.NET Framework 4.5 biedt verschillende nieuwe functies en verbeteringen voor parallelle computing. Deze omvatten verbeterde prestaties, verbeterde controle, verbeterde ondersteuning voor asynchrone programmering, een nieuwe gegevensstroombibliotheek en verbeterde ondersteuning voor parallelle foutopsporing en prestatieanalyse. Zie de vermelding What's New for Parallelism in .NET Framework 4.5 in the Parallel Programming with .NET blog.

Web

ASP.NET 4.5 en 4.5.1 voegt modelbinding toe voor Web Forms, WebSocket-ondersteuning, asynchrone handlers, prestatieverbeteringen en vele andere functies. Zie de volgende resources voor meer informatie:

Networking

.NET Framework 4.5 biedt een nieuwe programmeerinterface voor HTTP-toepassingen. Zie de nieuwe System.Net.Http en System.Net.Http.Headers naamruimten voor meer informatie.

Ondersteuning is ook opgenomen voor een nieuwe programmeerinterface voor het accepteren en communiceren met een WebSocket-verbinding met behulp van de bestaande HttpListener en gerelateerde klassen. Zie de nieuwe System.Net.WebSockets naamruimte en de HttpListener klasse voor meer informatie.

Daarnaast bevat .NET Framework 4.5 de volgende netwerkverbeteringen:

  • RFC-compatibele URI-ondersteuning. Zie en verwante klassen voor meer informatie Uri .

  • Ondersteuning voor het parseren van internationalized Domain Name (IDN). Zie en verwante klassen voor meer informatie Uri .

  • Ondersteuning voor e-mailadres internationalisatie (EAI). Zie de System.Net.Mail naamruimte voor meer informatie.

  • Verbeterde IPv6-ondersteuning. Zie de System.Net.NetworkInformation naamruimte voor meer informatie.

  • Ondersteuning voor sockets met dubbele modus. Zie de Socket en TcpListener klassen voor meer informatie.

Windows Presentation Foundation (WPF)

In .NET Framework 4.5 bevat Windows Presentation Foundation (WPF) wijzigingen en verbeteringen op de volgende gebieden:

  • Het nieuwe Ribbon besturingselement waarmee u een gebruikersinterface op het lint kunt implementeren die als host fungeert voor een werkbalk Snelle toegang, toepassingsmenu en tabbladen.

  • De nieuwe INotifyDataErrorInfo interface, die synchrone en asynchrone gegevensvalidatie ondersteunt.

  • Nieuwe functies voor de VirtualizingPanel en Dispatcher klassen.

  • Verbeterde prestaties bij het weergeven van grote sets gegroepeerde gegevens en door toegang te krijgen tot verzamelingen in niet-UI-threads.

  • Gegevensbinding met statische eigenschappen, gegevensbinding naar aangepaste typen die de ICustomTypeProvider interface implementeren en gegevensbindingsgegevens ophalen uit een bindingsexpressie.

  • Het verplaatsen van gegevens naarmate de waarden veranderen (live shaping).

  • Mogelijkheid om te controleren of de gegevenscontext voor een itemcontainer is verbroken.

  • De mogelijkheid om de hoeveelheid tijd in te stellen die moet verlopen tussen wijzigingen in eigenschappen en updates van gegevensbronnen.

  • Verbeterde ondersteuning voor het implementeren van zwakke gebeurtenispatronen. Bovendien kunnen gebeurtenissen nu markeringsextensies accepteren.

Windows Communication Foundation (WCF)

In .NET Framework 4.5 zijn de volgende functies toegevoegd om het schrijven en onderhouden van Windows WCF-toepassingen (Communication Foundation) eenvoudiger te maken:

  • Vereenvoudiging van gegenereerde configuratiebestanden.

  • Ondersteuning voor contract-first ontwikkeling.

  • De mogelijkheid om ASP.NET compatibiliteitsmodus gemakkelijker te configureren.

  • Wijzigingen in standaardwaarden voor transporteigenschappen om de kans te verkleinen dat u ze moet instellen.

  • Updates voor de XmlDictionaryReaderQuotas klasse om de kans te verkleinen dat u handmatig quota moet configureren voor XML-woordenlijstlezers.

  • Validatie van WCF-configuratiebestanden door Visual Studio als onderdeel van het buildproces, zodat u configuratiefouten kunt detecteren voordat u uw toepassing uitvoert.

  • Nieuwe asynchrone streamingondersteuning.

  • Nieuwe HTTPS-protocoltoewijzing om het gemakkelijker te maken om een eindpunt beschikbaar te maken via HTTPS met Internet Information Services (IIS).

  • De mogelijkheid om metagegevens te genereren in één WSDL-document door deze toe te voegen ?singleWSDL aan de service-URL.

  • Websockets ondersteunen het inschakelen van echte bidirectionele communicatie via poorten 80 en 443 met prestatiekenmerken die vergelijkbaar zijn met het TCP-transport.

  • Ondersteuning voor het configureren van services in code.

  • Knopinfo voor XML-editor.

  • ChannelFactory cachingondersteuning.

  • Ondersteuning voor compressie van binaire coderingsprogramma's.

  • Ondersteuning voor een UDP-transport waarmee ontwikkelaars services kunnen schrijven die gebruikmaken van 'fire and forget'-berichten. Een client verzendt een bericht naar een service en verwacht geen reactie van de service.

  • Mogelijkheid om meerdere verificatiemodi op één WCF-eindpunt te ondersteunen bij gebruik van de HTTP-transport- en transportbeveiliging.

  • Ondersteuning voor WCF-services die gebruikmaken van internationale domeinnamen (IDN's).

Zie Wat is er nieuw in Windows Communication Foundation voor meer informatie.

Windows Workflow Foundation (WF)

In .NET Framework 4.5 zijn er verschillende nieuwe functies toegevoegd aan Windows Workflow Foundation (WF), waaronder:

  • Werkstromen voor statuscomputers, die voor het eerst werden geïntroduceerd als onderdeel van .NET Framework 4.0.1 (.NET Framework 4 Platform Update 1). Deze update bevatte verschillende nieuwe klassen en activiteiten waarmee ontwikkelaars werkstromen voor statuscomputers konden maken. Deze klassen en activiteiten zijn bijgewerkt voor .NET Framework 4.5, waaronder:

    • De mogelijkheid om onderbrekingspunten in te stellen op statussen.

    • De mogelijkheid om overgangen te kopiëren en plakken in de werkstroomontwerper.

    • Ontwerpfunctieondersteuning voor het maken van gedeelde triggerovergangen.

    • Activiteiten voor het maken van werkstromen voor statuscomputers, waaronder: StateMachine, Stateen Transition.

  • Verbeterde functies van Workflow Designer, zoals de volgende:

    • Verbeterde zoekmogelijkheden voor werkstromen in Visual Studio, waaronder Snel zoeken en zoeken in bestanden.

    • De mogelijkheid om automatisch een reeksactiviteit te maken wanneer een tweede onderliggende activiteit wordt toegevoegd aan een containeractiviteit en om beide activiteiten in de reeksactiviteit op te nemen.

    • Ondersteuning voor pannen, waardoor het zichtbare gedeelte van een werkstroom kan worden gewijzigd zonder de schuifbalken te gebruiken.

    • Een nieuwe documentoverzichtsweergave met de onderdelen van een werkstroom in een overzichtsweergave in structuurstijl en u kunt een onderdeel selecteren in de documentoverzichtsweergave .

    • Mogelijkheid om aantekeningen toe te voegen aan activiteiten.

    • Mogelijkheid om gedelegeerden voor activiteiten te definiëren en te gebruiken met behulp van de werkstroomontwerper.

    • Automatisch verbinding maken en automatisch invoegen voor activiteiten en overgangen in werkstromen voor statuscomputers en stroomdiagrammen.

  • Storage van de weergavestatusgegevens voor een werkstroom in één element in het XAML-bestand, zodat u de statusgegevens van de weergave eenvoudig kunt vinden en bewerken.

  • Een NoPersistScope-containeractiviteit om te voorkomen dat onderliggende activiteiten worden behouden.

  • Ondersteuning voor C#-expressies:

    • Werkstroomprojecten die gebruikmaken van Visual Basic gebruiken Visual Basic expressies en C#-werkstroomprojecten gebruiken C#-expressies.

    • C#-werkstroomprojecten die zijn gemaakt in Visual Studio 2010 en die Visual Basic expressies hebben, zijn compatibel met C#-werkstroomprojecten die gebruikmaken van C#-expressies.

  • Versiebeheerverbeteringen:

    • De nieuwe WorkflowIdentity klasse, die een toewijzing biedt tussen een persistent werkstroomexemplaren en de bijbehorende werkstroomdefinitie.

    • Gelijktijdige uitvoering van meerdere werkstroomversies in dezelfde host, waaronder WorkflowServiceHost.

    • In Dynamische update kunt u de definitie van een persistent werkstroomexemplaren wijzigen.

  • Contract-first werkstroomserviceontwikkeling, die ondersteuning biedt voor het automatisch genereren van activiteiten die overeenkomen met een bestaand servicecontract.

Zie Wat is er nieuw in Windows Workflow Foundation voor meer informatie.

.NET voor Windows 8.x Store-apps

Windows 8.x Store-apps zijn ontworpen voor specifieke formulierfactoren en maken gebruik van de kracht van het Windows besturingssysteem. Een subset van .NET Framework 4.5 of 4.5.1 is beschikbaar voor het bouwen van Windows 8.x Store-apps voor Windows met behulp van C# of Visual Basic. Deze subset wordt .NET genoemd voor Windows 8.x Store-apps en wordt besproken in een overzicht.

Portable Class Libraries

Met het project Portable Class Library in Visual Studio 2012 (en latere versies) kunt u beheerde assembly's schrijven en bouwen die op meerdere .NET Framework platforms werken. Met behulp van een Portable Class Library-project kiest u de platformen (zoals Windows Phone en .NET voor Windows 8.x Store-apps) waarop u zich wilt richten. De beschikbare typen en leden in uw project worden automatisch beperkt tot de algemene typen en leden op deze platforms. Zie Portable Class Library voor meer informatie.

Zie ook