Co nowego w programie .NET Framework

Uwaga

.NET Framework 4.8 to ostatnia wersja .NET Framework. .NET Framework jest comiesięczne z poprawkami błędów zabezpieczeń i niezawodności. .NET Framework będą nadal dołączone do Windows, bez planów jego usunięcia. Nie trzeba migrować aplikacji .NET Framework, ale w przypadku nowych aplikacji należy użyć oprogramowania .NET 5 lub nowszego.

Ten artykuł zawiera podsumowanie najważniejszych nowych funkcji i ulepszeń w następujących wersjach .NET Framework:

Ten artykuł nie zawiera kompleksowych informacji o każdej nowej funkcji i może ulec zmianie. Aby uzyskać ogólne informacje .NET Framework, zobacz Wprowadzenie. Aby uzyskać informacje o obsługiwanych platformach, zobacz Wymagania systemowe. Aby uzyskać linki do pobierania i instrukcje instalacji, zobacz Przewodnik instalacji.

Uwaga

Zespół .NET Framework wprowadza również funkcje poza pasmem przy użyciu programu NuGet, aby rozszerzyć obsługę platformy i wprowadzić nowe funkcje, takie jak kolekcje niezmienne i typy wektorów z obsługą SIMD. Aby uzyskać więcej informacji, zobacz Dodatkowe biblioteki klas i interfejsy API oraz .NET Framework i wydania poza pasmem. Zobacz pełną listę pakietów NuGet dla .NET Framework.

Wprowadzenie .NET Framework 4.8

.NET Framework 4.8 opiera się na poprzednich wersjach programu .NET Framework 4.x przez dodanie wielu nowych poprawek i kilku nowych funkcji przy zachowaniu bardzo stabilnego produktu.

Pobierz i zainstaluj .NET Framework 4.8

Wersję 4.8 .NET Framework pobrać z następujących lokalizacji:

.NET Framework 4.8 można zainstalować na platformach Windows 10, Windows 8.1, Windows 7 SP1 i odpowiednich platformach serwerów, począwszy od programu Windows Server 2008 R2 z dodatkiem SP1. Możesz zainstalować program .NET Framework 4.8 za pomocą instalatora sieci Web lub instalatora offline. Zalecanym sposobem dla większości użytkowników jest użycie instalatora internetowego.

W programie .NET Framework 4.8 w programie Visual Studio 2012 lub nowszym można zainstalować pakiet deweloperski .NET Framework 4.8.

Co nowego w programie .NET Framework 4.8

.NET Framework 4.8 wprowadza nowe funkcje w następujących obszarach:

Ulepszona dostępność, która umożliwia aplikacji zapewnienie odpowiedniego doświadczenia dla użytkowników technologii ułatwień dostępu, nadal koncentruje się głównie na .NET Framework 4.8. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w .NET Framework 4.8, zobacz Co nowego w ułatwieniach dostępu w .NET Framework.

Klas podstawowych

Zmniejszenie wpływu fips na kryptografię. W poprzednich wersjach programu .NET Framework klasy zarządzanych dostawców kryptograficznych, SHA256ManagedCryptographicException takie jak , zgłaszały wyjątek , gdy systemowe biblioteki kryptograficzne są skonfigurowane w trybie FIPS. Te wyjątki są zgłaszane, ponieważ zarządzane wersje klas dostawców kryptograficznych, w przeciwieństwie do bibliotek kryptograficznych systemu, nie zostały poddane certyfikacji FIPS (Federal Information Processing Standards) 140-2. Ponieważ niewiele deweloperów ma swoje maszyny deweloperskich w trybie FIPS, wyjątki są często zgłaszane w systemach produkcyjnych.

Domyślnie w aplikacjach docelowych .NET Framework 4.8 następujące klasy kryptografii zarządzanej nie będą już CryptographicException zgłaszać w tym przypadku zgłoszenia:

Zamiast tego te klasy przekierowują operacje kryptograficzne do biblioteki kryptografii systemu. Ta zmiana skutecznie usuwa potencjalnie mylące różnice między środowiskami programistycznymi i produkcyjnymi oraz sprawia, że składniki natywne i zarządzane działają w ramach tych samych zasad kryptograficznych. Aplikacje, które zależą od tych wyjątków, mogą przywrócić poprzednie zachowanie, ustawiając przełącznik AppContext na Switch.System.Security.Cryptography.UseLegacyFipsThrow .true Aby uzyskać więcej informacji, zobacz Managed cryptography classes do not throw a CryptographyException in FIPS mode (Klasy kryptografii zarządzanej nie zrzucają wyjątek CryptographyException w trybie FIPS).

Korzystanie ze zaktualizowanej wersji pakietu ZLib

Począwszy od .NET Framework 4.5, zestaw clrcompression.dll używa ZLib, natywnej biblioteki zewnętrznej do kompresji danych, aby zapewnić implementację algorytmu deflate. Wersja .NET Framework 4.8 programu clrcompression.dll została zaktualizowana do używania ZLib w wersji 1.2.11, co obejmuje kilka kluczowych ulepszeń i poprawek.

Windows Communication Foundation (WCF)

Wprowadzenie do servicehealthbehavior

Punkty końcowe kondycji są powszechnie używane przez narzędzia orkiestracji do zarządzania usługami na podstawie ich stanu kondycji. Kontrole kondycji mogą być również używane przez narzędzia do monitorowania do śledzenia i zapewnienia powiadomień o dostępności i wydajności usługi.

ServiceHealthBehavior to zachowanie usługi WCF, które rozszerza .IServiceBehavior Po dodaniu do ServiceDescription.Behaviors kolekcji zachowanie usługi powoduje następujące działanie:

  • Zwraca stan kondycji usługi z kodami odpowiedzi HTTP. W ciągu zapytania można określić kod stanu HTTP dla żądania sondy kondycji HTTP/GET.

  • Publikuje informacje o kondycji usługi. Szczegóły specyficzne dla usługi, w tym stan usługi, liczniki ograniczenia przepustowości i pojemność, mogą być wyświetlane przy użyciu żądania HTTP/GET z ciągiem ?health zapytania. Łatwość dostępu do tych informacji jest ważna w przypadku rozwiązywania problemów z błędnie zachowującą się usługą WCF.

Istnieją dwa sposoby uwidocznić punkt końcowy kondycji i opublikować informacje o kondycji usługi WCF:

  • Za pomocą kodu. Na przykład:

    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)
    
  • Za pomocą pliku konfiguracji. Na przykład:

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

Stan kondycji usługi można OnServiceFailurezbadać przy użyciu parametrów zapytania, takich jak , OnDispatcherFailure, OnListenerFailureOnThrottlePercentExceededi można określić kod odpowiedzi HTTP dla każdego parametru zapytania. Jeśli kod odpowiedzi HTTP zostanie pominięty dla parametru zapytania, domyślnie używany jest kod odpowiedzi HTTP 503. Na przykład:

Parametry zapytania i przykłady:

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

    Kod stanu odpowiedzi HTTP 455 jest zwracany, gdy stan dowolnego dyspozytora kanału jest większy niż CommunicationState.Opened.

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

    Kod stanu odpowiedzi HTTP 465 jest zwracany, gdy stan dowolnego odbiornika kanału jest większy niż CommunicationState.Opened.

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

    Określa wartość procentową {1–100}, która wyzwala odpowiedź i jej kod odpowiedzi HTTP {200–599}. W tym przykładzie:

    • Jeśli wartość procentowa jest większa niż 95, zwracany jest kod odpowiedzi HTTP 500.

    • Jeśli wartość procentowa wynosi od 70 do 95, zwracana jest wartość 350.

    • W przeciwnym razie zwracana jest 200.

Stan kondycji usługi można wyświetlić w języku HTML https://contoso:81/Service1?health , określając ciąg zapytania, taki jak , lub w formacie XML, określając ciąg zapytania, taki jak https://contoso:81/Service1?health&Xml. Ciąg zapytania, taki jak , https://contoso:81/Service1?health&NoContent zwraca pustą stronę HTML.

Windows Presentation Foundation (WPF)

Ulepszenia wysokiej rozdzielczości DPI

W .NET Framework wersji 4.8 WPF dodaje obsługę Per-Monitor DPI w wersji 2 i Mixed-Mode skalowania DPI. Aby uzyskać dodatkowe informacje na temat tworzenia wysokiej rozdzielczości, zobacz High DPI Desktop Application Development on Windows (Tworzenie aplikacji klasycznych o wysokiej rozdzielczości na komputerze).

.NET Framework 4.8 ulepsza obsługę hostowanych identyfikatorów HWND i współdziałania Windows Forms w aplikacjach WPF o wysokiej rozdzielczości na platformach, które obsługują skalowanie DPI Windows 10 z Mixed-Mode (począwszy od aktualizacji z kwietnia 2018 r.). Hostowane kontrolki HWND lub Windows Forms Mixed-Mode są tworzone jako okna skalowane w dpi przez wywoływanie wywołań SetThreadDpiHostingBehavior i SetThreadDpiAwarenessContext, mogą być hostowane w aplikacji WPF w wersji Per-Monitor V2 oraz mają odpowiednie rozmiary i skalowanie. Taka hostowana zawartość nie jest renderowana w natywnej rozdzielczości DPI; Zamiast tego system operacyjny skaluje hostowaną zawartość do odpowiedniego rozmiaru. Obsługa trybu Per-Monitor dpi w wersji 2 umożliwia również hostowania kontrolek WPF (czyli nadrzędnych) w oknie natywnym w aplikacji o wysokiej rozdzielczości DPI.

Aby włączyć obsługę Mixed-Mode skalowania o wysokiej rozdzielczości DPI, można ustawić następujące przełączniki AppContext pliku konfiguracji aplikacji:

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

Środowisko uruchomieniowe języka wspólnego

Środowisko uruchomieniowe w .NET Framework 4.8 zawiera następujące zmiany i ulepszenia:

Ulepszenia kompilatora JIT. Kompilator JUST-in-time (JIT) w programie .NET Framework 4.8 jest oparty na kompilatorze JIT w programie .NET Core 2.1. Wiele optymalizacji i wszystkie poprawki błędów wprowadzone w kompilatorze JIT .NET Core 2.1 są zawarte w kompilatorze JIT programu .NET Framework 4.8.

Ulepszenia NGEN. Środowisko uruchomieniowe ulepszyło zarządzanie pamięcią obrazów natywnych generatora obrazów (NGEN), dzięki czemu dane mapowane z obrazów NGEN nie znajdują się w pamięci. Zmniejsza to obszar powierzchni dostępny dla ataków, które próbują wykonać dowolny kod, modyfikując pamięć, która zostanie wykonana.

Skanowanie w celu ochrony przed złośliwym kodem dla wszystkich zestawów. W poprzednich wersjach programu .NET Framework środowisko uruchomieniowe skanuje wszystkie zestawy załadowane z dysku przy użyciu Windows Defender lub oprogramowania do ochrony przed złośliwym kodem innej firmy. Jednak zestawy ładowane z innych źródeł, Assembly.Load(Byte[]) takich jak metoda , nie są skanowane i mogą potencjalnie zawierać niewykrywone złośliwe oprogramowanie. Począwszy od wersji .NET Framework 4.8 działającej na platformie Windows 10, środowisko uruchomieniowe wyzwala skanowanie przez rozwiązania do ochrony przed złośliwym kodem, które implementują interfejs AMSI (Antimalware Scan Interface).

Co nowego w programie .NET Framework 4.7.2

.NET Framework 4.7.2 zawiera nowe funkcje w następujących obszarach:

Ciągłe skupianie się na .NET Framework 4.7.2 to ulepszona dostępność, dzięki której aplikacja może zapewnić odpowiednie środowisko dla użytkowników technologii ułatwień dostępu. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w .NET Framework 4.7.2, zobacz Co nowego w ułatwieniach dostępu w .NET Framework.

Klas podstawowych

.NET Framework 4.7.2 zawiera wiele ulepszeń kryptograficznych, lepszą obsługę dekompresji dla archiwów ZIP i dodatkowe interfejsy API kolekcji.

Nowe przeciążenia RSA. Tworzenie i dsa. Utworzyć

Metody DSA.Create(DSAParameters) i RSA.Create(RSAParameters) umożliwiają dostarczanie kluczowych parametrów podczas wystąpienia nowego klucza DSA lub RSA . Umożliwiają one zastąpienie kodu w następujący sposób:

// 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

za pomocą kodu podobnego do tego:

// 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

Metody DSA.Create(Int32) i RSA.Create(Int32) umożliwiają generowanie nowych kluczy DSA lub RSA o określonym rozmiarze klucza. Na przykład:

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

Konstruktory Rfc2898DeriveBytes akceptują nazwę algorytmu wyznaczania wartości skrótu

Klasa Rfc2898DeriveBytes ma trzy nowe konstruktory z parametrem HashAlgorithmName , który identyfikuje algorytm HMAC, który ma być używany podczas wyprowadzania kluczy. Zamiast używać sha-1, deweloperzy powinni używać HMAC opartych na sha-2, takich jak SHA-256, jak pokazano w poniższym przykładzie:

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

Obsługa kluczy efemeralnych

Importowanie PFX może opcjonalnie ładować klucze prywatne bezpośrednio z pamięci, pomijając dysk twardy. Gdy nowa X509KeyStorageFlags.EphemeralKeySet flaga jest określona w konstruktorze X509Certificate2 lub jednym X509Certificate2.Import z przeciążeń metody, klucze prywatne zostaną załadowane jako klucze efemeracyjne. Dzięki temu klucze nie będą widoczne na dysku. Jednak:

  • Ponieważ klucze nie są utrwalane na dysku, certyfikaty załadowane z tą flagą nie są dobrymi kandydatami do dodania do X509Store.

  • Klucze ładowane w ten sposób są prawie zawsze ładowane za pośrednictwem Windows CNG. W związku z tym wywołujący muszą uzyskać dostęp do klucza prywatnego, wywołując metody rozszerzenia, takie jak cert. GetRSAPrivateKey(). Właściwość X509Certificate2.PrivateKey nie działa.

  • Ponieważ starsza właściwość X509Certificate2.PrivateKey nie działa z certyfikatami, deweloperzy powinni wykonać rygorystyczne testy przed przełączeniem na klucze efemeracyjne.

Programowe tworzenie żądań podpisania certyfikatów PKCS#10 i certyfikatów kluczy publicznych X.509

Począwszy od wersji .NET Framework 4.7.2, obciążenia mogą generować żądania podpisania certyfikatu (CPR), co umożliwia etap generowania żądań certyfikatów w istniejące narzędzia. Jest to często przydatne w scenariuszach testowych.

Aby uzyskać więcej informacji i przykładów kodu, zobacz "Programmatic creation of PKCS#10 certification signing requests and X.509 public key certificates" (Programowe tworzenie żądań podpisania certyfikatów PKCS#10 i certyfikatów kluczy publicznych X.509) w blogu programu .NET.

Nowi członkowie SignerInfo

Począwszy od .NET Framework 4.7.2, SignerInfo klasa uwidacznia więcej informacji o podpisie. Możesz pobrać wartość właściwości , System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm aby określić algorytm podpisu używany przez podpiszcę. SignerInfo.GetSignature Można go wywołać, aby uzyskać kopię podpisu kryptograficznego dla tego podpisatora.

Pozostawienie opakowanego strumienia otwartego po likwidowania cryptostream

Począwszy od .NET Framework 4.7.2, CryptoStreamDispose klasa ma dodatkowy konstruktor, który pozwala nie zamykać opakowanego strumienia. Aby pozostawić opakowany strumień otwarty po zlikwidowaniu CryptoStream wystąpienia, wywołaj nowy konstruktor CryptoStream w następujący sposób:

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

Zmiany dekompresji w programie DeflateStream

Począwszy od .NET Framework 4.7.2, implementacja operacji dekompresji DeflateStream w klasie została zmieniona w celu domyślnego używania natywnych interfejsów API Windows API. Zwykle skutkuje to znaczną poprawę wydajności.

Obsługa dekompresji przy użyciu Windows API jest domyślnie włączona dla aplikacji docelowych .NET Framework 4.7.2. Aplikacje, które są kierowane do wcześniejszych wersji programu .NET Framework, ale działają w wersji .NET Framework 4.7.2, mogą zdecydować się na to zachowanie, dodając następujący przełącznik AppContext do pliku konfiguracji aplikacji:

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

Dodatkowe interfejsy API kolekcji

.NET Framework 4.7.2 dodaje wiele nowych interfejsów API do typów SortedSet<T> i HashSet<T> . Są one następujące:

Klasa ConcurrentDictionary<TKey,TValue> zawiera AddOrUpdate nowe przeciążenia metod i GetOrAdd w celu pobrania wartości ze słownika lub dodania jej, jeśli nie zostanie znaleziona, oraz dodania wartości do słownika lub zaktualizowania jej, jeśli już istnieje.

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

Obsługa wstrzykiwania zależności w Web Forms

Wstrzykiwanie zależności (DI) oddzieli obiekty i ich zależności, dzięki czemu nie trzeba już zmieniać kodu obiektu tylko dlatego, że zależność uległa zmianie. Podczas tworzenia ASP.NET aplikacji docelowych .NET Framework 4.7.2 można:

  • Używaj iniekcji opartej na programie ustawiaczym, interfejsie i konstruktorze w procedurach obsługi i modułach, wystąpieniach stron i kontrolkach użytkownika ASP.NET projektów aplikacji internetowych.

  • Iniekcji opartej na programie i interfejsie należy używać w procedurach obsługi i modułach, wystąpieniach stron i kontrolkach użytkownika ASP.NET projektów witryn internetowych.

  • Podłącz różne struktury wstrzykiwania zależności.

Obsługa plików cookie z tej samej witryny

SameSite uniemożliwia przeglądarce wysyłanie pliku cookie wraz z żądaniem między witrynami. .NET Framework 4.7.2 dodaje właściwość, której HttpCookie.SameSite wartość jest członkiem System.Web.SameSiteMode wyliczenia. Jeśli jego wartość to SameSiteMode.Strict lub SameSiteMode.Lax, ASP.NET dodaje atrybut SameSite do nagłówka set-cookie. Obsługa sameSite dotyczy obiektów HttpCookie , a także plików FormsAuthentication cookie i System.Web.SessionState .

Obiekt SameSite można ustawić w HttpCookie następujący sposób:

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

Pliki cookie SameSite można również skonfigurować na poziomie aplikacji, modyfikując web.config plików:

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

Możesz dodać sameSite dla plików FormsAuthentication cookie System.Web.SessionState i , modyfikując plik konfiguracji sieci Web:

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

Sieć

Implementacja właściwości HttpClientHandler

.NET Framework 4.7.1 dodano osiem właściwości do System.Net.Http.HttpClientHandler klasy . Jednak dwa zrzuciły .PlatformNotSupportedException .NET Framework 4.7.2 zawiera teraz implementację tych właściwości. Właściwości są następujące:

SQLClient

Obsługa uwierzytelniania Azure Active Directory uniwersalnego i uwierzytelniania wieloskładnikowego

Rosnące wymagania dotyczące zgodności i zabezpieczeń wymagają, aby wielu klientów korzystało z uwierzytelniania wieloskładnikowego (MFA). Ponadto, zgodnie z bieżącymi najlepszymi rozwiązaniami, nie należy w tym hasła użytkowników bezpośrednio w parametry połączenia. Aby obsługiwać te zmiany, program .NET Framework 4.7.2 rozszerza parametry połączenia SQLClient, dodając nową wartość "Active Directory Interactive" dla istniejącego słowa kluczowego "Uwierzytelnianie" w celu obsługi uwierzytelniania MFA i usługi Azure AD. Nowa metoda interaktywna obsługuje natywnych i federowanych użytkowników usługi Azure AD, a także użytkowników-gości usługi Azure AD. W przypadku tej metody uwierzytelnianie MFA nałożone przez usługę Azure AD jest obsługiwane w przypadku SQL danych. Ponadto proces uwierzytelniania żąda hasła użytkownika w celu przestrzegania najlepszych rozwiązań w zakresie zabezpieczeń.

W poprzednich wersjach programu .NET Framework łączność SQL obsługiwana tylko opcje SqlAuthenticationMethod.ActiveDirectoryPassword i SqlAuthenticationMethod.ActiveDirectoryIntegrated . Oba te elementy są częścią nieinterakcyjnego protokołu ADAL, który nie obsługuje uwierzytelniania wieloskładnikowego. SqlAuthenticationMethod.ActiveDirectoryInteractive Dzięki nowej opcji łączność usługi SQL obsługuje uwierzytelnianie wieloskładnikowe oraz istniejące metody uwierzytelniania (hasło i uwierzytelnianie zintegrowane), dzięki którym użytkownicy mogą interaktywnie wprowadzać hasła użytkowników bez utrwalania haseł w ramach parametrów połączenia.

Aby uzyskać więcej informacji i przykład, zobacz "SQL - Azure AD Universal and Multifactor Authentication Support" (Usługa Azure AD — obsługa uwierzytelniania uniwersalnego i wieloskładnikowego) w blogu platformy .NET.

Obsługa Always Encrypted wersji 2

W programie NET Framework 4.7.2 dodano obsługę Always Encrypted. Oryginalna wersja usługi Always Encrypted to technologia szyfrowania po stronie klienta, w której klucze szyfrowania nigdy nie opuszczają klienta. W środowisku opartym na enklawie Always Encrypted klient może opcjonalnie wysłać klucze szyfrowania do bezpiecznej enklawy, która jest bezpieczną jednostką obliczeniową, którą można uznać za część SQL Server, ale która nie może zostać naruszona przez kod SQL Server. Aby obsługiwać oparte na enklawie Always Encrypted, .NET Framework 4.7.2 dodaje następujące typy i elementy członkowskie do przestrzeni System.Data.SqlClient nazw:

Następnie plik konfiguracji aplikacji określa konkretną implementację klasy abstrakcyjnej System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider , która zapewnia funkcjonalność dostawcy enklawy. Na przykład:

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

Podstawowy przepływ danych opartych na enklawie jest Always Encrypted jest:

  1. Użytkownik tworzy połączenie AlwaysEncrypted z SQL Server, który obsługuje Always Encrypted. Sterownik kontaktuje się z usługą zaświadczenia, aby upewnić się, że łączy się z odpowiednią enklawą.

  2. Po poświadczania enklawy sterownik ustanawia bezpieczny kanał z bezpieczną enklawą hostowaną na SQL Server.

  3. Sterownik udostępnia klucze szyfrowania autoryzowane przez klienta w bezpiecznej enklawie na czas trwania SQL danych.

Windows Presentation Foundation

Znajdowanie danych ResourceDictionaries według źródła

Począwszy od .NET Framework 4.7.2, ResourceDictionaries asystent diagnostyczny może zlokalizować plik , który został utworzony na podstawie danego źródłowego URI. (Ta funkcja jest do użytku przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Asystent diagnostyczny, taki jak Visual Studio funkcji "Edytuj i kontynuuj", umożliwia użytkownikowi edytowanie zasobu ResourceDictionary z zamiarem zastosowania zmian do uruchomionej aplikacji. Jednym z kroków osiągnięcia tego celu jest znalezienie wszystkich plików ResourceDictionaries utworzonych przez uruchamianą aplikację na podstawie edytowanego słownika. Na przykład aplikacja może zadeklarować element ResourceDictionary, którego zawartość jest kopiowana z danego źródłowego URI:

<ResourceDictionary Source="MyRD.xaml" />

Asystent diagnostyczny, który edytuje oryginalne znaczniki w pliku MyRD.xaml , może użyć nowej funkcji do zlokalizowania słownika. Funkcja jest implementowany przez nową metodę statyczną, ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. Asystent diagnostyczny wywołuje nową metodę przy użyciu bezwzględnego identyfikator URI, który identyfikuje oryginalne oznaczenie, jak pokazano w poniższym kodzie:

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

Metoda zwraca pustą wartość wyliczoną, chyba VisualDiagnostics że jest włączona i zmienna ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO środowiskowa jest ustawiona.

Znajdowanie właścicieli ResourceDictionary

Począwszy od .NET Framework 4.7.2, asystent diagnostyczny może zlokalizować właścicieli danego obiektu ResourceDictionary. (Ta funkcja jest do użytku przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Za każdym razem, gdy zmiana zostanie w wywłaszczynie ResourceDictionaryobiektu , WPF automatycznie znajdzie wszystkie odwołania DynamicResource , na które może mieć wpływ ta zmiana.

Asystent diagnostyczny, taki Visual Studio funkcji "Edytuj i kontynuuj", może chcieć rozszerzyć tę opcję w celu obsługi odwołań StaticResource. Pierwszym krokiem w tym procesie jest znalezienie właścicieli słownika. oznacza to znalezienie wszystkich obiektów, których Resources właściwość odwołuje się do słownika (bezpośrednio lub pośrednio za pośrednictwem właściwości ResourceDictionary.MergedDictionaries ). Trzy nowe metody statyczne zaimplementowane w klasie System.Windows.Diagnostics.ResourceDictionaryDiagnostics , po jednej dla każdego Resources z typów podstawowych, które mają właściwość, obsługują ten krok:

Te metody zwracają pustą wartość wyliczoną, chyba VisualDiagnostics że jest włączona i zmienna ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO środowiskowa jest ustawiona.

Znajdowanie odwołań StaticResource

Asystent diagnostyczny może teraz otrzymywać powiadomienia za każdym razem, gdy zostanie rozpoznane odwołanie StaticResource . (Ta funkcja jest do użycia przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Asystent diagnostyczny, taki Visual Studio funkcji "Edytuj i kontynuuj", może chcieć zaktualizować wszystkie zastosowania zasobu, gdy jego wartość zmieni ResourceDictionary się. WPF robi to automatycznie dla odwołań DynamicResource , ale celowo nie robi tego w przypadku odwołań StaticResource . Począwszy od .NET Framework 4.7.2, asystent diagnostyczny może używać tych powiadomień do lokalizowania tych zastosowań zasobu statycznego.

Powiadomienie jest implementowane przez nowe ResourceDictionaryDiagnostics.StaticResourceResolved zdarzenie:

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

To zdarzenie jest wywoływane za każdym razem, gdy środowisko uruchomieniowe rozpozna odwołanie StaticResource . Argumenty StaticResourceResolvedEventArgs opisują rozwiązanie i wskazują obiekt i właściwość, które hostują odwołanie StaticResourceResourceDictionary, oraz klucz i używany do rozwiązania:

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

Zdarzenie nie jest wywoływane (a jego obiekt add dostępu jest ignorowany), chyba VisualDiagnostics że jest włączona i ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO zmienna środowiskowa jest ustawiona.

ClickOnce

Aplikacje oparte na standardach HDPI Windows Forms, Windows Presentation Foundation (WPF) i Visual Studio Tools dla pakietu Office (VSTO) można wdrażać przy użyciu ClickOnce. Jeśli w manifeście aplikacji znajduje się następujący wpis, wdrożenie zakończy się powodzeniem w .NET Framework 4.7.2:

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

W Windows Forms aplikacji poprzednie obejście ustawienia świadomości DPI w pliku konfiguracji aplikacji, a nie w manifeście aplikacji, nie jest już konieczne do ClickOnce wdrożenia.

Co nowego w programie .NET Framework 4.7.1

.NET Framework 4.7.1 zawiera nowe funkcje w następujących obszarach:

Ponadto głównym elementem usługi .NET Framework 4.7.1 jest ulepszona dostępność, dzięki której aplikacja może zapewnić odpowiednie środowisko dla użytkowników technologii ułatwień dostępu. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w .NET Framework 4.7.1, zobacz Co nowego w ułatwieniach dostępu w .NET Framework.

Klas podstawowych

Obsługa .NET Standard 2.0

.NET Standard definiuje zestaw interfejsów API, które muszą być dostępne w każdej implementacji .NET, która obsługuje tę wersję standardu. .NET Framework 4.7.1 w pełni obsługuje program .NET Standard 2.0 i dodaje około 200 interfejsów API zdefiniowanych w programie .NET Standard 2.0, których brakuje w programie .NET Framework 4.6.1, 4.6.2 i 4.7. (Należy pamiętać, że te wersje .NET Framework obsługują .NET Standard 2.0 tylko wtedy, gdy dodatkowe pliki .NET Standard pomocy technicznej są również wdrożone w systemie docelowym). Aby uzyskać więcej informacji, zobacz "BCL - .NET Standard 2.0 Support" (Obsługa BCL 2.0) we wpisie w blogu .NET Framework 4.7.1 Runtime and Compiler Features (Środowisko uruchomieniowe i funkcje kompilatora w wersji .NET Framework 4.7.1).

Obsługa konstruktorów konfiguracji

Konstruktorzy konfiguracji umożliwiają deweloperom dynamiczne wstrzykiwanie i kompilowanie ustawień konfiguracji dla aplikacji w czasie uruchamiania. Niestandardowe konstruktory konfiguracji mogą służyć do modyfikowania istniejących danych w sekcji konfiguracji lub do kompilowania sekcji konfiguracji całkowicie od podstaw. Bez konstruktorów konfiguracji .config są statyczne, a ich ustawienia są definiowane przez pewien czas przed rozpoczęciem aplikacji.

Aby utworzyć niestandardowego konstruktora konfiguracji, należy utworzyć konstruktora z klasy abstrakcyjnej ConfigurationBuilder i zastąpić jego i ConfigurationBuilder.ProcessConfigurationSectionConfigurationBuilder.ProcessRawXml. Konstruktorów definiuje się również w pliku .config pliku. Aby uzyskać więcej informacji, zobacz sekcję "Konstruktorzy konfiguracji" we wpisie w blogu .NET Framework 4.7.1 ASP.NET and Configuration Features (Funkcje konfiguracji i konfiguracji w programie .NET Framework 4.7.1).

Wykrywanie funkcji w czasie rzeczywistym

Klasa System.Runtime.CompilerServices.RuntimeFeature udostępnia mechanizm określania, czy wstępnie zdefiniowana funkcja jest obsługiwana w danej implementacji .NET w czasie kompilacji, czy w czasie wykonywania. W czasie kompilacji kompilator może sprawdzić, czy istnieje określone pole, aby określić, czy funkcja jest obsługiwana; Jeśli tak, może emitować kod, który wykorzystuje tę funkcję. W czasie działania aplikacja może wywołać metodę RuntimeFeature.IsSupported przed emitem kodu w czasie działania. Aby uzyskać więcej informacji, zobacz Dodawanie metody pomocnika w celu opisania funkcji obsługiwanych przez środowisko uruchomieniowe.

Typy krotek wartości można serializuje

Począwszy od .NET Framework 4.7.1, System.ValueTuple a skojarzone z nim typy ogólne są oznaczone jako serializowalne, co umożliwia serializację binarną. Powinno to ułatwić migrowanie typów krotek, takich jak Tuple<T1,T2,T3> i Tuple<T1,T2,T3,T4>, w celu ułatwienia wartości typów krotek. Aby uzyskać więcej informacji, zobacz "Compiler -- ValueTuple is Serializable" (Kompilator — funkcja ValueTuple jest serializowalna) we wpisie w blogu .NET Framework 4.7.1 Runtime and Compiler Features (Funkcje środowiska uruchomieniowego i kompilatora w wersji 4.7.1).

Obsługa odwołań tylko do odczytu

.NET Framework 4.7.1 dodaje .System.Runtime.CompilerServices.IsReadOnlyAttribute Ten atrybut jest używany przez kompilatory języka do oznaczania elementów członkowskich, które mają zwracane typy lub parametry tylko do odczytu. Aby uzyskać więcej informacji, zobacz wpis w blogu "Compiler -- Support for ReadOnlyReferences" (Kompilator — obsługa readOnlyReferences) .NET Framework 4.7.1 Runtime and Compiler Features (Funkcje środowiska uruchomieniowego i kompilatora w wersji 4.7.1). Aby uzyskać informacje na temat wartości zwracanych ref, zobacz Ref return values and ref locals (Przewodnik języka C#) i Ref return values (Visual Basic).

Środowisko uruchomieniowe języka wspólnego (CLR)

Ulepszenia wydajności wyrzucania elementów bezużytecznych

Zmiany w wyrzucaniu elementów bezużytecznych (GC) w programie .NET Framework 4.7.1 poprawiają ogólną wydajność, szczególnie w przypadku alokacji dużych stosów obiektów (LOH). W .NET Framework 4.7.1 oddzielne blokady są używane dla alokacji małych obiektów (SOH) i LOH, co umożliwia alokacje LOH występuje, gdy GC w tle jest czyszczenie SOH. W związku z tym aplikacje, które dzielą dużą liczbę alokacji funkcji LOH, powinny zauważyć zmniejszenie poziomu zdań o blokadę alokacji i lepszą wydajność. Aby uzyskać więcej informacji, zobacz sekcję "Środowisko uruchomieniowe — ulepszenia wydajności gc" we wpisie w blogu .NET Framework 4.7.1 Runtime and Compiler Features (Środowisko uruchomieniowe i funkcje kompilatora).

Sieć

Obsługa algorytmu SHA-2 dla funkcji Message.HashAlgorithm

W .NET Framework 4.7 i wcześniejszych wersjach właściwość Message.HashAlgorithm obsługuje tylko wartości HashAlgorithm.Md5HashAlgorithm.Sha i . Począwszy od .NET Framework 4.7.1, HashAlgorithm.Sha256, HashAlgorithm.Sha384i HashAlgorithm.Sha512 są również obsługiwane. To, czy ta wartość jest faktycznie używana, zależy od usługi MSMQ, ponieważ samo wystąpienie nie ma funkcji wyznaczania wartości skrótu, Message ale po prostu przekazuje wartości do usługi MSMQ. Aby uzyskać więcej informacji, zobacz sekcję "Obsługa algorytmu SHA-2 dla funkcji Message.HashAlgorithm" we wpisie w blogu .NET Framework 4.7.1 ASP.NET and Configuration features (Obsługa algorytmu SHA-2 dla funkcji Message.HashAlgorithm).

ASP.NET

Kroki wykonywania w ASP.NET aplikacji

ASP.NET przetwarza żądania we wstępnie zdefiniowanym potoku, który zawiera 23 zdarzenia. ASP.NET wykonuje każdy program obsługi zdarzeń jako krok wykonywania. W wersjach ASP.NET do .NET Framework 4.7 ASP.NET nie może przepływać kontekstu wykonywania z powodu przełączania między natywnymi i zarządzanymi wątkami. Zamiast tego ASP.NET przepływy tylko .HttpContext Począwszy od .NET Framework 4.7.1, HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) metoda umożliwia również modułom przywracanie danych otoczenia. Ta funkcja jest ukierunkowana na biblioteki dotyczące śledzenia, profilowania, diagnostyki lub transakcji, na przykład, które dbają o przepływ wykonywania aplikacji. Aby uzyskać więcej informacji, zobacz wpis w blogu "ASP.NET Execution Step Feature" .NET Framework 4.7.1 (Funkcje ASP.NET i konfiguracji).

ASP.NET analizowania HttpCookie

.NET Framework 4.7.1 zawiera nową metodę , która HttpCookie zapewnia standardowy sposób tworzenia obiektu z ciągu i dokładnego przypisywania wartości plików cookie, HttpCookie.TryParsetakich jak data wygaśnięcia i ścieżka. Aby uzyskać więcej informacji, zobacz wpis "ASP.NET HttpCookie parsing" (Analizowanie httpcookie) w blogu .NET Framework 4.7.1 ASP.NET and Configuration Features (Funkcje ASP.NET i konfiguracji).

Opcje skrótu SHA-2 dla poświadczeń uwierzytelniania ASP.NET formularzy

W .NET Framework wersji 4.7 i starszych program ASP.NET deweloperom przechowywanie poświadczeń użytkownika z skrótami haseł w plikach konfiguracji przy użyciu algorytmu MD5 lub SHA1. Począwszy od .NET Framework 4.7.1, program ASP.NET obsługuje również nowe opcje bezpiecznego skrótu SHA-2, takie jak SHA256, SHA384 i SHA512. Sha1 pozostaje wartością domyślną, a w pliku konfiguracji sieci Web można zdefiniować algorytm wyznaczania wartości skrótu, który nie jest domyślny. Na przykład:

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

Co nowego w programie .NET Framework 4.7

.NET Framework 4.7 zawiera nowe funkcje w następujących obszarach:

Aby uzyskać listę nowych interfejsów API dodanych do .NET Framework 4.7, zobacz .NET Framework 4.7 API Changes on GitHub (Zmiany interfejsu API w wersji 4.7 na platformie GitHub). Aby uzyskać listę ulepszeń funkcji i poprawek błędów w programie .NET Framework 4.7, zobacz .NET Framework 4.7 List of Changes on GitHub (Lista zmian w programie .NET Framework 4.7). Aby uzyskać więcej informacji, zobacz Announcing .NET Framework 4.7 (Announcing .NET Framework 4.7 ) na blogu .NET.

Klas podstawowych

.NET Framework 4.7 poprawia serializacji przez DataContractJsonSerializer:

Rozszerzona funkcjonalność dzięki kryptografii krzywej eliptycznej (ECC)*

W .NET Framework 4.7 do klas i ECDiffieHellman dodano metody umożliwiające ImportParameters(ECParameters)ECDsa obiektowi reprezentowanie już ustanowionego klucza. Dodano ExportParameters(Boolean) również metodę eksportowania klucza przy użyciu jawnych parametrów krzywej.

.NET Framework 4.7 dodaje również obsługę dodatkowych krzywych (w tym zestawu krzywych Brainpool) CreateCreate i dodano wstępnie zdefiniowane definicje ułatwiające tworzenie za pomocą nowych metod i metod fabrycznych.

Możesz zobaczyć przykład ulepszeń kryptografii .NET Framework 4.7 na GitHub.

Lepsza obsługa znaków kontrolnych przez kontrolkę DataContractJsonSerializer

W .NET Framework 4.7 klasa DataContractJsonSerializer serializuje znaki kontrolne w sposób nieumiejętny za pomocą standardu ECMAScript 6. To zachowanie jest domyślnie włączone w przypadku aplikacji docelowych .NET Framework 4.7 i jest funkcją do wyboru dla aplikacji, które są uruchomione w programie .NET Framework 4.7, ale mają na celu poprzednią wersję .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję Zgodność aplikacji.

Sieć

.NET Framework 4.7 dodaje następującą funkcję związaną z siecią:

Domyślna obsługa systemu operacyjnego dla protokołów TLS*

Stos TLS, który System.Net.Security.SslStream jest używany przez składniki stosu up-stack, takie jak HTTP, FTP i SMTP, umożliwia deweloperom korzystanie z domyślnych protokołów TLS obsługiwanych przez system operacyjny. Deweloperzy nie potrzebują już zakodować wersji TLS.

ASP.NET

W .NET Framework 4.7 ASP.NET następujące nowe funkcje:

Rozszerzalność pamięci podręcznej obiektów

Począwszy od .NET Framework 4.7, program ASP.NET dodaje nowy zestaw interfejsów API, które umożliwiają deweloperom zastępowanie domyślnych implementacji usługi ASP.NET dla buforowania obiektów w pamięci i monitorowania pamięci. Deweloperzy mogą teraz zastąpić dowolny z następujących trzech składników, jeśli ASP.NET implementacja nie jest odpowiednia:

  • Magazyn pamięci podręcznej obiektów. Korzystając z nowej sekcji konfiguracji dostawców pamięci podręcznej, deweloperzy mogą podłączyć nowe implementacje pamięci podręcznej obiektów dla aplikacji ASP.NET przy użyciu nowego interfejsu ICacheStoreProvider.

  • Monitorowanie pamięci. Domyślny monitor pamięci w programie ASP.NET powiadamia aplikacje, gdy są one uruchomione w pobliżu skonfigurowanego limitu bajtów prywatnych dla procesu lub gdy maszyna ma małą łączną ilość dostępnej fizycznej pamięci RAM. Gdy te limity są bliskie, powiadomienia są wyzjemnione. W przypadku niektórych aplikacji powiadomienia są wyzjemniane zbyt blisko skonfigurowanych limitów, aby umożliwić przydatne reakcje. Deweloperzy mogą teraz zapisywać własne monitory pamięci, aby zastąpić wartość domyślną przy użyciu ApplicationMonitors.MemoryMonitor właściwości .

  • Reakcje związane z limitem pamięci. Domyślnie program ASP.NET próbuje przyciąć GC.Collect pamięć podręczną obiektów i okresowo wywołać wywołanie, gdy limit procesów bajtów prywatnych zbliża się do wartości . W przypadku niektórych aplikacji częstotliwość wywołań GC.Collect lub przycinana pamięć podręczna są nieefektywne. Deweloperzy mogą teraz zastąpić lub uzupełnić domyślne zachowanie, subskrybując implementacje IObserver do monitora pamięci aplikacji.

Windows Communication Foundation (WCF)

Windows Communication Foundation (WCF) dodaje następujące funkcje i zmiany:

Możliwość skonfigurowania domyślnych ustawień zabezpieczeń komunikatów na TLS 1.1 lub TLS 1.2

Począwszy od programu .NET Framework 4.7, program WCF umożliwia skonfigurowanie protokołu TLS 1.1 lub TLS 1.2 oprócz protokołu SSL 3.0 i TLS 1.0 jako domyślnego protokołu zabezpieczeń komunikatów. Jest to ustawienie zgody; Aby ją włączyć, należy dodać następujący wpis do pliku konfiguracji aplikacji:

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

Zwiększona niezawodność aplikacji WCF i serializacji WCF

Program WCF zawiera wiele zmian kodu, które eliminują warunki wyścigu, co zwiększa wydajność i niezawodność opcji serializacji. Są one następujące:

  • Lepsza obsługa mieszania kodu asynchronicznego i synchronicznego w wywołaniach metod SocketConnection.BeginRead i SocketConnection.Read.
  • Zwiększona niezawodność podczas przerywania połączenia za pomocą sharedConnectionListeneri DuplexChannelBinder.
  • Zwiększona niezawodność operacji serializacji podczas wywoływania FormatterServices.GetSerializableMembers(Type) metody .
  • Zwiększona niezawodność podczas usuwania kelnera przez wywołanie metody ChannelSynchronizer.RemoveWaiter .

Windows Forms

W .NET Framework 4.7 Windows Forms ulepsza obsługę monitorów o wysokiej rozdzielczości DPI.

Obsługa wysokiej rozdzielczości DPI

Począwszy od aplikacji, które są .NET Framework 4.7, .NET Framework wysoką rozdzielczość DPI i dynamiczną obsługę DPI Windows Forms aplikacji. Obsługa wysokiej rozdzielczości DPI poprawia układ i wygląd formularzy oraz kontrolek na monitorach o wysokiej rozdzielczości. Dynamiczna dpi zmienia układ i wygląd formularzy oraz kontrolek, gdy użytkownik zmienia wartość DPI lub współczynnik skalowania wyświetlania uruchomionej aplikacji.

Obsługa wysokiej rozdzielczości DPI to funkcja, która jest konfigurowany przez zdefiniowanie elementu< System.Windows. Sekcja Forms.ConfigurationSection> w pliku konfiguracji aplikacji. Aby uzyskać więcej informacji na temat dodawania obsługi wysokiej rozdzielczości DPI i dynamicznej obsługi DPI do aplikacji Windows Forms, zobacz High DPI Support in Windows Forms (Obsługa wysokiej rozdzielczości DPI w Windows Forms).

Windows Presentation Foundation (WPF)

W .NET Framework 4.7 WPF zawiera następujące ulepszenia:

Obsługa stosu dotykowego/pisaka na podstawie Windows WM_POINTER wiadomości

Teraz masz możliwość użycia stosu dotykowego/pisaka opartego na komunikatach WM_POINTER zamiast Windows Ink Services Platform (WISP). Jest to funkcja do wyboru w .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję Zgodność aplikacji.

Nowa implementacja interfejsów API drukowania WPF

Interfejsy API drukowania System.Printing.PrintQueue WPF w klasie wywołują interfejs API Windows Print Document Package zamiast przestarzałego interfejsu API drukowania XPS. Aby uzyskać informacje o wpływie tej zmiany na zgodność aplikacji, zobacz sekcję Zgodność aplikacji.

Co nowego w programie .NET Framework 4.6.2

.NET Framework 4.6.2 zawiera nowe funkcje w następujących obszarach:

Aby uzyskać listę nowych interfejsów API dodanych do wersji .NET Framework 4.6.2, zobacz .NET Framework 4.6.2 API Changes on GitHub (Zmiany interfejsu API w wersji 4.6.2 w wersji GitHub). Aby uzyskać listę ulepszeń funkcji i poprawek błędów w programie .NET Framework 4.6.2, zobacz .NET Framework 4.6.2 Lista zmian w GitHub. Aby uzyskać więcej informacji, zobacz Announcing .NET Framework 4.6.2 (Announcing .NET Framework 4.6.2 w blogu .NET).

ASP.NET

W .NET Framework 4.6.2 ASP.NET następujące ulepszenia:

Ulepszona obsługa zlokalizowanych komunikatów o błędach w narzędziach do sprawdzania adnotacji danych

Weryfikacje adnotacji danych umożliwiają przeprowadzenie walidacji przez dodanie co najmniej jednego atrybutu do właściwości klasy. Element atrybutu definiuje ValidationAttribute.ErrorMessage tekst komunikatu o błędzie w przypadku niepowodzenia walidacji. Począwszy od .NET Framework 4.6.2, ASP.NET ułatwia lokalizacji komunikatów o błędach. Komunikaty o błędach będą zlokalizowane, jeśli:

  1. Wartość ValidationAttribute.ErrorMessage jest dostarczana w atlicie walidacji.

  2. Plik zasobu jest przechowywany w App_LocalResources folderze.

  3. Nazwa zlokalizowanego pliku DataAnnotation.Localization.{}.resxzasobów ma nazwę formularza, gdzienazwa jest nazwą kultury w formacie languageCodecountry-/regionCode lub languageCode.

  4. Nazwa klucza zasobu jest ciągiem przypisanym do atrybutu ValidationAttribute.ErrorMessage , a jego wartością jest zlokalizowany komunikat o błędzie.

Na przykład następujący atrybut adnotacji danych definiuje komunikat o błędzie kultury domyślnej dla nieprawidłowej klasyfikacji.

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

Następnie możesz utworzyć plik zasobu DataAnnotation.Localization.fr.resx, którego kluczem jest ciąg komunikatu o błędzie, a którego wartość jest zlokalizowanym komunikatem o błędzie. Plik musi znajdować się w App.LocalResources folderze . Na przykład poniżej znajduje się klucz i jego wartość w zlokalizowanym komunikacie o błędzie języka francuskiego (fr):

Nazwa Wartość
Ocena musi mieć wartości od 1 do 10. La note doit être comprisetare 1 et 10.

Ponadto lokalizacja adnotacji danych jest rozszerzalna. Deweloperzy mogą podłączyć własnego dostawcę lokalizacji ciągów, implementując IStringLocalizerProvider interfejs do przechowywania ciągów lokalizacji w innym miejscu niż w pliku zasobów.

Asynchroniczna obsługa dostawców magazynu stanu sesji

ASP.NET umożliwia teraz korzystanie z metod zwracających zadania z dostawcami magazynu stanu sesji, dzięki czemu aplikacje ASP.NET mogą korzystać z zalet skalowalności asynchronicznych. Aby obsługiwać operacje asynchroniczne z dostawcami magazynu stanu sesji, ASP.NET zawiera nowy interfejs , System.Web.SessionState.ISessionStateModule, IHttpModule który dziedziczy z i umożliwia deweloperom implementowanie własnych modułów stanu sesji i dostawców asynchronicznego magazynu sesji. Interfejs jest zdefiniowany w następujący sposób:

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

Ponadto klasa zawiera SessionStateUtility dwie nowe metody i IsSessionStateReadOnlyIsSessionStateRequired, które mogą być używane do obsługi operacji asynchronicznych.

Asynchroniczna obsługa dostawców wyjściowej pamięci podręcznej

Począwszy od .NET Framework 4.6.2, metody zwracania zadań mogą być używane z dostawcami wyjściowej pamięci podręcznej w celu zapewnienia korzyści skalowalności asynchronicznych. Dostawcy, którzy implementują te metody, zmniejszają blokowanie wątków na serwerze internetowym i poprawiają skalowalność usługi ASP.NET sieci Web.

Dodano następujące interfejsy API w celu obsługi asynchronicznych dostawców pamięci podręcznej danych wyjściowych:

Kategorie znaków

Znaki w .NET Framework 4.6.2 są klasyfikowane na podstawie standardu Unicode w wersji 8.0.0. W .NET Framework 4.6 i .NET Framework 4.6.1 znaki zostały sklasyfikowane na podstawie kategorii znaków Unicode 6.3.

Obsługa standardu Unicode 8.0 CharUnicodeInfo jest ograniczona do klasyfikacji znaków przez klasę oraz do typów i metod, które na nim polegają. Obejmują one klasęStringInfo, metodę przeciążoną Char.GetUnicodeCategory i klasy znaków rozpoznawane przez aparat .NET Framework wyrażenia regularnego. Ta zmiana nie ma wpływu na porównanie i sortowanie znaków i ciągów i nadal polega na bazowym systemie operacyjnym lub, w systemach Windows 7, na danych znakowych dostarczanych przez .NET Framework.

Aby uzyskać informacje o zmianach kategorii znaków od Unicode 6.0 do Unicode 7.0, zobacz Standard Unicode w wersji 7.0.0 w witrynie internetowej Konsorcjum Unicode. Aby uzyskać informacje o zmianach ze standardu Unicode 7.0 na Unicode 8.0, zobacz Standard Unicode w wersji 8.0.0 w witrynie internetowej konsorcjum Unicode.

Kryptografia

Obsługa certyfikatów X509 zawierających certyfikat FIPS 186-3 DSA

.NET Framework wersji 4.6.2 dodano obsługę certyfikatów DSA (Digital Signature Algorithm) X509, których klucze przekraczają limit 1024-bitowy FIPS 186-2.

Oprócz obsługi większych rozmiarów kluczy fips 186-3, program .NET Framework 4.6.2 umożliwia przetwarzanie podpisów z rodziną algorytmów wyznaczania wartości skrótu SHA-2 (SHA256, SHA384 i SHA512). Obsługa fips 186-3 jest zapewniana przez nową klasę System.Security.Cryptography.DSACng .

RSA Zgodnie z najnowszymi zmianami w klasie w programie .NET Framework 4.6 ECDsa i klasie w programie .NET Framework 4.6.1 DSA abstrakcyjna klasa bazowa w programie .NET Framework 4.6.2 ma dodatkowe metody umożliwiające wywołującym korzystanie z tej funkcji bez rzutowania. Możesz wywołać metodę rozszerzenia DSACertificateExtensions.GetDSAPrivateKey , aby podpisać dane, jak pokazano w poniższym przykładzie.

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

Możesz też wywołać metodę rozszerzenia DSACertificateExtensions.GetDSAPublicKey w celu zweryfikowania podpisanych danych, jak pokazano w poniższym przykładzie.

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

Większa przejrzystość danych wejściowych procedur pochodnych kluczy ECDiffieHellman

.NET Framework 3.5 dodano obsługę umowy z kluczem krzywej eliptycznej Diffie-Hellman z trzema różnymi procedurami funkcji key derivation function (KDF). Dane wejściowe procedur i same procedury zostały skonfigurowane za pośrednictwem właściwości obiektu ECDiffieHellmanCng . Jednak ponieważ nie każda rutyna odczytuje każdą właściwość wejściową, było wiele miejsca na pomylenie z przeszłością dewelopera.

Aby rozwiązać ten problem w .NET Framework 4.6.2, ECDiffieHellman do klasy bazowej dodano następujące trzy metody, aby bardziej wyraźnie reprezentować te procedury KDF i ich dane wejściowe:

ECDiffieHellman, metoda Opis
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) Wyprowadza kluczowy materiał przy użyciu formuły

HASH(secretPrepend || x || secretAppend)

HASH(secretPrepend OrElse x OrElse secretAppend)

gdzie x to obliczony wynik algorytmu Diffie-Hellman EC.
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) Wyprowadza kluczowy materiał przy użyciu formuły

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

HMAC(hmacKey, secretPrepend OrElse x OrElse secretAppend)

gdzie x to obliczony wynik algorytmu Diffie-Hellman EC.
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) Wyprowadza materiał klucza przy użyciu algorytmu pochodnej funkcji pseudolosowej (PRF) TLS.

Obsługa szyfrowania symetrycznego klucza utrwalonego

Biblioteka kryptograficzna Windows (CNG) dodała obsługę przechowywania utrwalonych kluczy symetrycznych i używania sprzętowych kluczy symetrycznych, a program .NET Framework 4.6.2 umożliwiał deweloperom korzystanie z tej funkcji. Ponieważ nazwa klucza i dostawcy kluczy są specyficzne dla implementacji, użycie tej funkcji wymaga użycia konstruktora konkretnych typów implementacji zamiast preferowanego podejścia fabrycznego (takiego jak wywołanie Aes.Createmetody ).

W przypadku algorytmów AES (AesCng) i 3DES (TripleDESCng) istnieje obsługa szyfrowania symetrycznego utrwalonego klucza. Na przykład:

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

Obsługa skrótów SHA-2 w formancie SignedXml

.NET Framework 4.6.2 SignedXml dodaje obsługę do klasy dla metod podpisu RSA-SHA256, RSA-SHA384 i RSA-SHA512 PKCS#1 oraz algorytmów szyfrowania referencyjnego SHA256, SHA384 i SHA512.

Stałe URI są widoczne na stronie SignedXml:

Pole SignedXml Stała
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"

Wszystkie programy SignatureDescriptionCryptoConfig , które zarejestrowała program obsługi niestandardowej w programie w celu dodania obsługi tych algorytmów, będą nadal działać tak jak w przeszłości, ale ze względu na to, że istnieją teraz wartości domyślne platformy, CryptoConfig rejestracja nie jest już konieczna.

Sqlclient

.NET Framework Dostawca danych for SQL Server (System.Data.SqlClient) zawiera następujące nowe funkcje w .NET Framework 4.6.2:

Pule połączeń i limity czasu z Azure SQL bazami danych

Gdy buforowanie połączeń jest włączone i występuje limit czasu lub występuje inny błąd logowania, jest buforowany wyjątek, a wyjątek w pamięci podręcznej jest zgłaszany przy każdej kolejnej próbie połączenia przez następne 5 sekund do 1 minuty. Aby uzyskać więcej informacji, zobacz SQL Server Puli połączeń (ADO.NET).

To zachowanie nie jest pożądane podczas nawiązywania połączenia z bazami danych Azure SQL, ponieważ próby połączenia mogą się nie powieść z błędami przejściowymi, które są zwykle szybko odzyskiwane. Aby lepiej zoptymalizować środowisko ponawiania połączeń, zachowanie okresu blokowania puli połączeń jest usuwane, gdy połączenia z bazami danych Azure SQL się nie powiodły.

Dodanie nowego słowa kluczowego PoolBlockingPeriod umożliwia wybranie okresu blokowania najlepiej dopasowanego do aplikacji. Wartości są następujące:

Auto

Okres blokowania puli połączeń dla aplikacji łączącej się z wystąpieniem Azure SQL Database jest wyłączony, a okres blokowania puli połączeń dla aplikacji, która łączy się z dowolnym innym wystąpieniem SQL Server jest włączony. Jest to wartość domyślna. Jeśli nazwa punktu końcowego serwera kończy się dowolną z następujących nazw, są one traktowane Azure SQL baz danych:

  • .database.windows.net

  • .database.chinacloudapi.cn

  • .database.usgovcloudapi.net

  • .database.cloudapi.de

AlwaysBlock

Okres blokowania puli połączeń jest zawsze włączony.

NeverBlock

Okres blokowania puli połączeń jest zawsze wyłączony.

Ulepszenia Always Encrypted

SqlClient wprowadza dwa ulepszenia dla Always Encrypted:

  • Aby poprawić wydajność zapytań sparametryzowane względem zaszyfrowanych kolumn bazy danych, metadane szyfrowania dla parametrów zapytania są teraz buforowane. Jeśli właściwość SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled jest ustawiona true na (która jest wartością domyślną), jeśli to samo zapytanie jest wywoływane wiele razy, klient pobiera metadane parametrów z serwera tylko raz.

  • Wpisy klucza szyfrowania kolumn w pamięci podręcznej kluczy są teraz eksmitowane po konfigurowalnym przedziale czasu ustawionym przy użyciu SqlConnection.ColumnEncryptionKeyCacheTtl właściwości .

Windows Communication Foundation

W .NET Framework 4.6.2 Windows Communication Foundation została rozszerzona w następujących obszarach:

Obsługa zabezpieczeń transportu WCF dla certyfikatów przechowywanych przy użyciu CNG

Zabezpieczenia transportu WCF obsługują certyfikaty przechowywane przy użyciu Windows kryptografii (CNG). W .NET Framework 4.6.2 ta obsługa jest ograniczona do używania certyfikatów z kluczem publicznym, który ma wykładnik o długości nie większej niż 32 bity. Gdy aplikacja jest .NET Framework 4.6.2, ta funkcja jest domyślnie włączona.

W przypadku aplikacji, które są docelowe .NET Framework w wersji 4.6.1 lub starszej, ale działają w wersji .NET Framework 4.6.2, <> tę funkcję można włączyć, dodając następujący wiersz do sekcji środowiska uruchomieniowego pliku app.config lub web.config.

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

Można to również zrobić programowo przy użyciu kodu podobnego do następującego:

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

Lepsza obsługa wielu reguł korekty czasu letniego przez klasę DataContractJsonSerializer

Klienci mogą użyć ustawienia konfiguracji aplikacji, aby określić, DataContractJsonSerializer czy klasa obsługuje wiele reguł korekty dla jednej strefy czasowej. Jest to funkcja z rezygnacją. Aby ją włączyć, dodaj następujące ustawienie do app.config plików:

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

Gdy ta funkcja jest włączona, obiekt DataContractJsonSerializerTimeZoneInfoTimeZone używa typu zamiast typu do deserializować dane daty i czasu. TimeZoneInfo obsługuje wiele reguł korekt, co umożliwia pracę z historycznymi danymi strefy czasowej; TimeZone Nie.

Aby uzyskać więcej informacji na temat TimeZoneInfo struktury i korekt strefy czasowej, zobacz Time Zone Overview (Omówienie strefy czasowej).

Najlepsze dopasowanie netNamedPipeBinding

Usługa WCF ma nowe ustawienie aplikacji, które można ustawić w aplikacjach klienckich, aby zapewnić, że zawsze nasłuchują one z usługą nasłuchując na podstawie tego, który najlepiej pasuje do tego, który żądają. Po ustawieniu tej false aplikacji na wartość ( NetNamedPipeBinding ustawienie domyślne) klienci mogą próbować połączyć się z usługą nasłuchując na podstawie wartości URI, która jest podciągiem żądanego URI.

Na przykład klient próbuje nawiązać net.pipe://localhost/Service1połączenie z usługą nasłuchując w usłudze , ale inna usługa na tej maszynie z uprawnieniami administratora nasłuchuje w usłudze net.pipe://localhost. Jeśli to ustawienie aplikacji ma wartość false, klient podejmie próbę nawiązania połączenia z nieprawidłową usługą. Po ustawieniu ustawienia aplikacji na true, klient będzie zawsze łączyć się z najlepiej pasującą usługą.

Uwaga

Klienci korzystający NetNamedPipeBinding z usług znajdź na podstawie adresu podstawowego usługi (jeśli istnieje), a nie pełnego adresu punktu końcowego. Aby to ustawienie zawsze działało, usługa powinna używać unikatowego adresu podstawowego.

Aby włączyć tę zmianę, dodaj następujące ustawienie aplikacji do pliku aplikacji App.config lub Web.config aplikacji klienckiej:

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

Protokół SSL 3.0 nie jest protokołem domyślnym

W przypadku korzystania z narzędzia NetTcp z zabezpieczeniami transportu i typem poświadczeń certyfikatu protokół SSL 3.0 nie jest już protokołem domyślnym używanym do negocjowania bezpiecznego połączenia. W większości przypadków nie powinno to mieć wpływu na istniejące aplikacje, ponieważ protokół TLS 1.0 znajduje się na liście protokołów dla protokołu NetTcp. Wszyscy istniejący klienci powinni mieć możliwość negocjowania połączenia przy użyciu co najmniej TLS 1.0. Jeśli protokół Ssl3 jest wymagany, użyj jednego z następujących mechanizmów konfiguracji, aby dodać go do listy negocjowanych protokołów.

Windows Presentation Foundation (WPF)

W .NET Framework 4.6.2 Windows Presentation Foundation zostały rozszerzone w następujących obszarach:

Sortowanie grup

Aplikacja, która używa obiektu do CollectionView grupowania danych, może teraz jawnie zadeklarować sposób sortowania grup. Jawne sortowanie rozwiązuje problem nie intuicyjnego porządkowania, który występuje, gdy aplikacja dynamicznie dodaje lub usuwa grupy albo zmienia wartość właściwości elementów uczestniczących w grupowaniu. Może również poprawić wydajność procesu tworzenia grupy, przenosząc porównania właściwości grupowania z rodzaju pełnej kolekcji do rodzaju grup.

Aby obsługiwać sortowanie grup, nowe właściwości GroupDescription.SortDescriptions i GroupDescription.CustomSort opisują sposób sortowania kolekcji grup wytwarzanych przez GroupDescription obiekt . Jest to analogiczne do sposobu, w jaki identycznie nazwane właściwości ListCollectionView opisują sposób sortowania elementów danych.

W najbardziej typowych przypadkach PropertyGroupDescription można użyć CompareNameAscendingCompareNameDescendingdwóch nowych właściwości statycznych klasy i .

Na przykład poniższy kod XAML grupuje dane według wieku, sortuje grupy wiekowe w kolejności rosnącej i grupuje elementy w każdej grupie wiekowej według nazwiska.

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

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

Obsługa klawiatury dotykowej

Obsługa klawiatury dotykowej umożliwia śledzenie fokusu w aplikacjach WPF przez automatyczne wywołania i odrzucenie klawiatury dotykowej w programie Windows 10 po otrzymaniu danych wejściowych dotykowych przez kontrolkę, która może przyjmować tekstowe dane wejściowe.

W poprzednich wersjach .NET Framework WPF nie mogą korzystać ze śledzenia fokusu bez wyłączania obsługi gestów piórem/dotknięciem WPF. W związku z tym aplikacje WPF muszą wybierać między pełną obsługą dotykową WPF lub polegać na Windows myszy.

Dpi dla monitora

W celu obsługi ostatniej rozprzestrzeniania środowisk o wysokiej rozdzielczości DPI i hybrydowej rozdzielczości DPI dla aplikacji WPF, WPF w wersji .NET Framework 4.6.2 zapewnia świadomość monitora. Zobacz przykłady i przewodnik dewelopera na GitHub, aby uzyskać więcej informacji o tym, jak umożliwić aplikacji WPF obsługę dpi dla monitora.

W poprzednich wersjach .NET Framework WPF zachłannia do systemu. Innymi słowy, interfejs użytkownika aplikacji jest odpowiednio skalowany przez system operacyjny w zależności od rozdzielczości monitora, na którym aplikacja jest renderowana.

W przypadku aplikacji działających w wersji .NET Framework 4.6.2 można wyłączyć zmiany DPI dla monitora w aplikacjach WPF<>, dodając instrukcje konfiguracji do sekcji środowiska uruchomieniowego pliku konfiguracji aplikacji w następujący sposób:

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

Program Windows Workflow Foundation (WF)

W .NET Framework 4.6.2 Windows Workflow Foundation została rozszerzona w następującym obszarze:

Obsługa wyrażeń języka C# i funkcji IntelliSense w rehostowanych narzędziach WF Designer

Począwszy od .NET Framework 4.5, język WF obsługuje wyrażenia języka C# zarówno w programie Visual Studio Designer, jak i w przepływach pracy kodu. Rehosted Projektant przepływu pracy to kluczowa funkcja funkcji WF, która umożliwia Projektant przepływu pracy, aby Projektant przepływu pracy w aplikacji poza Visual Studio (na przykład w WPF). Windows Workflow Foundation zapewnia możliwość obsługi wyrażeń języka C# i funkcji IntelliSense w rehostowanych Projektant przepływu pracy. Aby uzyskać więcej informacji, zobacz blog Windows Workflow Foundation.

Availability of IntelliSense when a customer rebuilds a workflow project from Visual StudioW wersjach programu .NET Framework wcześniejszych niż 4.6.2 funkcja IntelliSense projektanta WF jest uszkodzona, gdy klient ponownie skompilował projekt przepływu pracy z Visual Studio. Gdy kompilacja projektu powiedzie się, typy przepływów pracy nie zostaną znalezione w projektancie, a ostrzeżenia funkcji IntelliSense dotyczące brakujących typów przepływów pracy są wyświetlane w oknie Lista błędów. .NET Framework 4.6.2 rozwiązuje ten problem i udostępnia intelliSense.

Aplikacje przepływu pracy w wersji 1 ze śledzeniem przepływu pracy są teraz uruchamiane w trybie FIPS

Maszyny z włączonym trybem zgodności ze standardem FIPS mogą teraz pomyślnie uruchamiać aplikację w stylu wersji 1 przepływu pracy z włączonym śledzeniem przepływu pracy. Aby włączyć ten scenariusz, należy wprowadzić następującą zmianę w app.config plików:

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

Jeśli ten scenariusz nie jest włączony, uruchomienie aplikacji w dalszym ciągu generuje wyjątek z komunikatem "Ta implementacja nie jest częścią algorytmów kryptograficznych zweryfikowanych przez fips platformy Windows Platform".

Ulepszenia przepływu pracy podczas używania aktualizacji dynamicznej z Visual Studio Projektant przepływu pracy

Program Projektant przepływu pracy, Projektant działań FlowChart i inni projektanci działań przepływu pracy pomyślnie załadują i wyświetlają przepływy pracy zapisane po wywołaniu DynamicUpdateServices.PrepareForUpdate metody . W wersjach programu .NET Framework starszych niż .NET Framework 4.6.2 załadowanie pliku XAML w programie Visual Studio DynamicUpdateServices.PrepareForUpdate dla przepływu pracy zapisanego po wywołaniu może spowodować następujące problemy:

  • W Projektant przepływu pracy nie można poprawnie załadować pliku XAML (gdy ViewStateData.Id plik znajduje się na końcu wiersza).

  • Projektant działań schematów blokowych lub inni projektanci działań przepływu pracy mogą wyświetlać wszystkie obiekty w ich domyślnych lokalizacjach, w przeciwieństwie do dołączonych wartości właściwości.

ClickOnce

ClickOnce do obsługi protokołów TLS 1.1 i TLS 1.2 oprócz protokołu 1.0, który już obsługuje. ClickOnce automatycznie wykrywa wymagany protokół. Do włączenia obsługi protokołów TLS 1.1 i 1.2 nie są wymagane żadne dodatkowe kroki w aplikacji ClickOnce.

Konwertowanie aplikacji Windows Forms i WPF na aplikacje platformy UWP

Windows teraz oferuje możliwości doprowadzenia istniejących Windows klasycznych, w tym WPF i Windows Forms, do platforma uniwersalna systemu Windows (UWP). Ta technologia działa jako most, umożliwiając stopniowe migrowanie istniejącej bazy kodu do platformy UWP, a tym samym przeniesienie aplikacji na wszystkie Windows 10 urządzeń.

Przekonwertowane aplikacje klasyczne uzyskują tożsamość aplikacji podobną do tożsamości aplikacji platformy UWP, dzięki czemu interfejsy API platformy UWP są dostępne w celu włączenia funkcji, takich jak kafelki na żywo i powiadomienia. Aplikacja nadal zachowuje się jak wcześniej i działa jako aplikacja o pełnym zaufaniu. Po przekonwertowaniu aplikacji można dodać proces kontenera aplikacji do istniejącego procesu pełnego zaufania, aby dodać adaptacyjny interfejs użytkownika. Gdy wszystkie funkcje zostaną przeniesione do procesu kontenera aplikacji, można usunąć proces pełnego zaufania, a nowa aplikacja platformy UWP będzie dostępna dla wszystkich Windows 10 urządzeń.

Ulepszenia debugowania

W wersji .NET Framework 4.6.2 NullReferenceExceptionnullinterfejs API debugowania nieza zarządzaniem został rozszerzony w celu wykonania dodatkowej analizy, gdy zostanie zgłoszony element , dzięki czemu można określić, która zmienna w jednym wierszu kodu źródłowego to . Aby obsługiwać ten scenariusz, do nieza zarządzaniem interfejsem API debugowania zostały dodane następujące interfejsy API.

Co nowego w programie .NET Framework 4.6.1

.NET Framework 4.6.1 zawiera nowe funkcje w następujących obszarach:

Aby uzyskać więcej informacji na .NET Framework 4.6.1, zobacz następujące tematy:

Kryptografia: obsługa certyfikatów X509 zawierających ecdsa

.NET Framework 4.6 dodano obsługę RSACng dla certyfikatów X509. .NET Framework 4.6.1 dodaje obsługę certyfikatów X509 ECDSA (Elliptic Curve Digital Signature Algorithm).

EcDSA oferuje lepszą wydajność i jest bezpieczniejszym algorytmem kryptografii niż RSA, zapewniając doskonały wybór, w którym wydajność i skalowalność systemu Transport Layer Security (TLS) stanowi problem. Implementacja .NET Framework opakowywuje wywołania do istniejącej Windows funkcji.

Poniższy przykładowy kod pokazuje, jak łatwo jest wygenerować podpis dla strumienia bajtów przy użyciu nowej obsługi certyfikatów ECDSA X509 dostępnych w programie .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

Zapewnia to wyraźny kontrast z kodem wymaganym do wygenerowania podpisu w .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

Dodano następujące elementy do ADO.NET:

Always Encrypted dla kluczy chronionych sprzętowo

ADO.NET obsługuje teraz przechowywanie kluczy Always Encrypted kolumny głównej natywnie w sprzętowych modułach zabezpieczeń (HSM). Dzięki tej pomocy klienci mogą korzystać z kluczy asymetrycznych przechowywanych w modułach HSM bez konieczności pisania niestandardowych dostawców magazynu kluczy głównych kolumn i rejestrowania ich w aplikacjach.

Klienci muszą zainstalować dostawcę CSP lub dostawców magazynu kluczy CNG dostarczonego przez moduł HSM na serwerach aplikacji lub komputerach klienckich w celu uzyskania dostępu do danych usługi Always Encrypted chronionych za pomocą kluczy głównych kolumn przechowywanych w modułach HSM.

Ulepszone MultiSubnetFailover zachowanie połączenia dla funkcji AlwaysOn

SqlClient teraz automatycznie zapewnia szybsze połączenia z zawsze won grupy dostępności (AG). W sposób przezroczysty wykrywa, czy aplikacja łączy się z grupą dostępności AlwaysOn w innej podsieci, i szybko odnajduje bieżący aktywny serwer i zapewnia połączenie z serwerem. Przed wydaniem tej wersji aplikacja musiała ustawić "MultisubnetFailover=true" dołączane ciągi połączenia, aby wskazać, że łączyła się z zawsze won grupą dostępności. Bez ustawienia słowa kluczowego połączenia na true, aplikacja może doświadczyć limitu czasu podczas nawiązywania połączenia z grupą dostępności AlwaysOn. W tej wersji aplikacja nie musi już być ustawiona na MultiSubnetFailover wartość true . Aby uzyskać więcej informacji na temat obsługi programu SqlClient dla zawsze wł. grup dostępności, zobacz SqlClient Support for High Availability, Disaster Recovery (Obsługa klienta SqlClient w zakresie wysokiej dostępności i odzyskiwania po awarii).

Windows Presentation Foundation (WPF)

Windows Presentation Foundation zawiera wiele ulepszeń i zmian.

Zwiększona wydajność

Opóźnienie wyzwalania zdarzeń dotykowych zostało naprawione w .NET Framework 4.6.1. Ponadto wpisywanie w kontrolce RichTextBox nie powoduje już powiązania wątku renderowania podczas szybkiego wprowadzania danych.

Ulepszenia sprawdzania pisowni

Moduł sprawdzania pisowni w WPF został zaktualizowany w Windows 8.1 i nowszych wersjach, aby wykorzystać obsługę systemu operacyjnego do sprawdzania pisowni w dodatkowych językach. W wersjach starszych niż Windows nie ma żadnych zmian Windows 8.1.

Podobnie jak w poprzednich .NET Framework, TextBoxRichTextBox język kontrolki lub bloku jest wykrywany przez szukanie informacji w następującej kolejności:

  • xml:lang, jeśli jest obecny.

  • Bieżący język danych wejściowych.

  • Bieżąca kultura.

Aby uzyskać więcej informacji na temat obsługi języków w WPF, zobacz wpis w blogu WPF na temat .NET Framework 4.6.1.

Dodatkowa obsługa słowników niestandardowych na użytkownika

W .NET Framework 4.6.1 WPF rozpoznaje słowniki niestandardowe, które są rejestrowane globalnie. Ta możliwość jest dostępna oprócz możliwości rejestrowania ich dla per-control.

W poprzednich wersjach platformy WPF słowniki niestandardowe nie rozpoznawały list wykluczonych wyrazów i autokorektu. Są one obsługiwane Windows 8.1 i Windows 10 przez użycie plików, które można umieścić w katalogu%AppData%\Microsoft\Spelling\<language tag>. Następujące reguły mają zastosowanie do tych plików:

  • Pliki powinny mieć rozszerzenia dic (dla dodanych wyrazów), exc (dla wykluczonych wyrazów) lub acl (dla autokorekta).

  • Pliki powinny być zwykłego tekstu UTF-16 LE, który rozpoczyna się od znacznika kolejności bajtów (BOM).

  • Każdy wiersz powinien zawierać wyraz (na listach dodanych i wykluczonych wyrazów) lub parę autokorektu ze słowami oddzielonych pionowym paskiem ("|") (na liście wyrazów Autocorrect).

  • Te pliki są uznawane za pliki tylko do odczytu i nie są modyfikowane przez system.

Uwaga

Te nowe formaty plików nie są bezpośrednio obsługiwane przez interfejsy API sprawdzania pisowni WPF, a słowniki niestandardowe dostarczane do WPF w aplikacjach powinny nadal używać plików .lex.

Samples

Istnieje wiele przykładów WPF w repozytorium Microsoft/WPF-Samples GitHub WPF. Pomóż nam ulepszyć nasze przykłady, wysyłając do nas żądanie ściągnięć lub otwierając GitHub problem.

Rozszerzenia DirectX

WPF zawiera pakiet NuGetD3DImage, który udostępnia nowe implementacje, które ułatwiają współdziałanie z zawartością DX10 i Dx11. Kod dla tego pakietu został typu open source i jest dostępny na GitHub.

Windows Workflow Foundation: Transakcje

Metoda Transaction.EnlistPromotableSinglePhase może teraz używać menedżera transakcji rozproszonych innych niż MSDTC do promowania transakcji. W tym celu należy określić identyfikator identyfikator identyfikatora GUID transakcji identyfikator do nowego przeciążenia Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) . Jeśli ta operacja powiedzie się, istnieją ograniczenia dotyczące możliwości transakcji. Po uwierzytelniania transakcji innych niż MSDTC jest enlisted, następujące metody zgłosić, TransactionPromotionException ponieważ te metody wymagają promocji do MSDTC:

Po dojrzałości do transakcji innych niż MSDTC jest enlisted, musi być używany do przyszłych trwałych enlistments przy użyciu protokołów, które definiuje. Wartość Guid transakcji można uzyskać przy użyciu PromoterType właściwości . Gdy transakcja podniesie, transakcji uwierzytelniania udostępnia tablicę Byte , która reprezentuje tokenu promowane. Aplikacja może uzyskać tokenu promowane dla transakcji bez MSDTC promowane za pomocą GetPromotedToken metody.

Użytkownicy nowego przeciążenia Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) muszą postępować zgodnie z określoną sekwencją wywołań, aby operacja podwodowania została zakończona pomyślnie. Te reguły są udokumentowane w dokumentacji metody.

Profilowanie

Interfejs API profilowania nieza zarządzaniem został rozszerzony w następujący sposób:

  • Lepsza obsługa uzyskiwania dostępu do plików PDB w interfejsie ICorProfilerInfo7 .

    W ASP.NET Core roslyn coraz częściej zestawy są kompilowane w pamięci. W przypadku deweloperów, którzy robią narzędzia profilowania, oznacza to, że pliki PDB, które w przeszłości były serializowane na dysku, mogą już nie być obecne. Narzędzia profilera często używają plików PDB do mapowania kodu z powrotem na wiersze źródłowe dla zadań, takich jak pokrycie kodu lub analiza wydajności wiersz po wierszu. Interfejs ICorProfilerInfo7 zawiera teraz dwie nowe metody: ICorProfilerInfo7::GetInMemorySymbolsLengthi ICorProfilerInfo7::ReadInMemorySymbols, aby zapewnić tym narzędziom profilera dostęp do danych podstawowego pliku PDB w pamięci, przy użyciu nowych interfejsów API profiler może uzyskać zawartość pliku PDB w pamięci jako tablicę bajtów, a następnie przetworzyć je lub serializować na dysku.

  • Lepsza instrumentacja za pomocą interfejsu ICorProfiler.

    Profilerzy korzystający z funkcji ICorProfiler ReJit interfejsów API na potrzeby instrumentacji dynamicznej mogą teraz modyfikować niektóre metadane. Wcześniej takie narzędzia mogły instrumentowania IL w dowolnym momencie, ale metadane można było modyfikować tylko w czasie ładowania modułu. Ponieważ IL odnosi się do metadanych, ogranicza to rodzaje instrumentacji, które można wykonać. Niektóre z tych limitów zostały podniesione przez dodanie metody ICorProfilerInfo7::ApplyMetaData w celu obsługi podzestawu edycji metadanych po ładowaniu modułu, AssemblyRefw szczególności przez dodanie nowych rekordów , TypeRef, TypeSpec, MemberRef, MemberSpeci UserString . Ta zmiana umożliwia znacznie szerszy zakres instrumentacji na bieżąco.

Pliki PDB generatora obrazów natywnych (NGEN)

Śledzenie zdarzeń między maszynami umożliwia klientom profilowanie programu na maszynie A i przyjrzenie się danych profilowania z mapowaniem wiersza źródłowego na maszynie B. Korzystając z poprzednich wersji programu .NET Framework, użytkownik kopiuje wszystkie moduły i obrazy natywne z profilowane maszyny na maszynę analizy, która zawiera plik PDB IL, aby utworzyć mapowanie typu źródło-natywne. Chociaż ten proces może działać dobrze, gdy pliki są stosunkowo małe, na przykład w przypadku aplikacji na telefon, pliki mogą być bardzo duże w systemach komputerowych i wymagać znacznego czasu na skopiowanie.

W przypadku plików PDB Ngen program NGen może utworzyć plik PDB zawierający mapowanie il-natywne bez zależności od podstawowego pliku PDB języka IL. W naszym scenariuszu śledzenia zdarzeń między maszynami wystarczy skopiować plik PDB obrazu natywnego, który jest generowany przez maszynę A na maszynę B, i użyć interfejsów API dostępu do interfejsu debugowania do odczytywania mapowania źródłowych plików PDB IL i mapowania il-natywnego pliku PDB obrazu natywnego. Połączenie obu mapowań zapewnia mapowanie typu źródło-natywne. Ponieważ plik PDB obrazu natywnego jest znacznie mniejszy niż wszystkie moduły i obrazy natywne, proces kopiowania z komputera A na maszynę B jest znacznie szybszy.

Co nowego w programie .NET 2015

W programie .NET 2015 wprowadzono .NET Framework 4.6 i .NET Core. Niektóre nowe funkcje dotyczą obu tych funkcji, a inne są specyficzne dla .NET Framework 4.6 lub .NET Core.

  • ASP.NET Core

    Program .NET 2015 ASP.NET Core, który jest implementacją platformy .NET do tworzenia nowoczesnych aplikacji opartych na chmurze. ASP.NET Core jest modularne, więc można uwzględnić tylko te funkcje, które są potrzebne w aplikacji. Może być hostowana w usługach IIS lub samodzielnie w procesie niestandardowym, a aplikacje z różnymi wersjami interfejsu .NET Framework na tym samym serwerze. Obejmuje nowy system konfiguracji środowiska, który jest przeznaczony do wdrażania w chmurze.

    Wzorce MVC, Web API i Web Pages są ujednolicone w jednej platformie o nazwie MVC 6. Aplikacje do ASP.NET Core są kompilowane za pomocą narzędzi Visual Studio 2015 lub nowszym. Istniejące aplikacje będą działać na nowym .NET Framework. Jednak w celu skompilowania aplikacji, która korzysta ze wzorca MVC 6 lub SignalR 3, należy użyć systemu projektu w programie Visual Studio 2015 lub nowszym.

    Aby uzyskać więcej informacji, zobacz ASP.NET Core.

  • ASP.NET aktualizacji

    • Interfejs API oparty na zadaniach do asynchronicznego opróżniania odpowiedzi

      ASP.NET udostępnia teraz prosty interfejs API oparty na zadaniach do asynchronicznego opróżniania odpowiedzi, HttpResponse.FlushAsync, async/await który umożliwia asynchroniczne opróżnianie odpowiedzi przy użyciu obsługi języka.

    • Powiązanie modelu obsługuje metody zwracające zadania

      W .NET Framework 4.5 ASP.NET dodano funkcję powiązania modelu, która umożliwia rozszerzalne, skoncentrowane na kodzie podejście do operacji na danych opartych na operacji CRUD na stronach Web Forms i kontrolkach użytkownika. System powiązania modelu obsługuje teraz Task-zwracające metody powiązania modelu. Ta funkcja Web Forms deweloperom uzyskiwanie korzyści ze skalowalności asynchronicznej z łatwością systemu powiązania danych podczas korzystania z nowszej wersji systemów ORM, w tym Entity Framework.

      Powiązanie modelu asynchronicznego jest kontrolowane przez ustawienie aspnet:EnableAsyncModelBinding konfiguracji.

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

      W przypadku aplikacji docelowy .NET Framework 4.6 domyślnie jest to true. W przypadku aplikacji działających w .NET Framework 4.6, które są kierowane do starszej wersji .NET Framework, false jest to domyślnie. Można ją włączyć, ustawiając ustawienie konfiguracji na .true

    • Obsługa protokołu HTTP/2 (Windows 10)

      HTTP/2 to nowa wersja protokołu HTTP, która zapewnia znacznie lepsze wykorzystanie połączeń (mniej rund między klientem a serwerem), co zapewnia mniejsze opóźnienia ładowania stron internetowych dla użytkowników. Strony internetowe (w przeciwieństwie do usług) korzystają najbardziej z protokołu HTTP/2, ponieważ protokół jest optymalizowany pod kątem wielu artefaktów żądanych w ramach jednego interfejsu. Obsługa protokołu HTTP/2 została dodana do ASP.NET w .NET Framework 4.6. Ponieważ funkcje sieciowe istnieją w wielu warstwach, nowe funkcje były wymagane w usługach Windows, w usługach IIS i ASP.NET w celu włączenia protokołu HTTP/2. Aby można było używać protokołu HTTP/2 z ASP.NET, na Windows 10 musi być uruchomiona ASP.NET.

      Protokół HTTP/2 jest również domyślnie obsługiwany i włączona dla Windows 10 platforma uniwersalna systemu Windows (UWP), które korzystają z interfejsu System.Net.Http.HttpClient API.

      Aby umożliwić korzystanie z funkcji PUSH_PROMISE w aplikacjach ASP.NET, PushPromise(String)PushPromise(String, String, NameValueCollection)HttpResponse do klasy dodano nową metodę z dwoma przeciążeniami i .

      Uwaga

      Chociaż ASP.NET Core obsługuje protokół HTTP/2, obsługa funkcji PUSH PROMISE nie została jeszcze dodana.

      Przeglądarka i serwer internetowy (usługi IIS Windows) wykonają całą pracę. Użytkownicy nie muszą nic robić.

      Większość popularnych przeglądarek obsługuje protokół HTTP/2, dlatego prawdopodobnie użytkownicy będą korzystać z obsługi protokołu HTTP/2, jeśli serwer ją obsługuje.

    • Obsługa protokołu powiązania tokenu

      Firma Microsoft i Google współpracują nad nowym podejściem do uwierzytelniania, nazywanym protokołem powiązania tokenu. Lokalnie tokeny uwierzytelniania (w pamięci podręcznej przeglądarki) mogą zostać skradzione i wykorzystane przez przestępców do uzyskania dostępu do zabezpieczonych w inny sposób zasobów (na przykład konta bankowego) bez konieczności użycia hasła lub innej uprzywilejowanej wiedzy. Nowy protokół ma na celu rozwiązanie tego problemu.

      Protokół powiązania tokenu zostanie zaimplementowany w Windows 10 jako funkcja przeglądarki. ASP.NET uczestniczyć w protokole, dzięki czemu tokeny uwierzytelniania są weryfikowane jako wiarygodne. Implementacje klienta i serwera ustanawiają ochronę end-to-end określoną przez protokół.

    • Algorytmy losowego wyznaczania wartości skrótu ciągu

      .NET Framework 4.5 wprowadzono algorytm losowego wyznaczania wartości skrótu ciągu. Jednak nie było to obsługiwane przez program ASP.NET ze względu na ASP.NET funkcji zależnych od stabilnego kodu skrótu. W .NET Framework 4.6 obsługiwane są algorytmy losowego wyznaczania wartości skrótu ciągu. Aby włączyć tę funkcję, użyj ustawienia aspnet:UseRandomizedStringHashAlgorithm konfiguracji.

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

    ADO .NET obsługuje teraz funkcję Always Encrypted dostępną w SQL Server 2016 r. Dzięki Always Encrypted SQL Server wykonywać operacje na zaszyfrowanych danych, a najlepszy klucz szyfrowania znajduje się w aplikacji w zaufanym środowisku klienta, a nie na serwerze. Always Encrypted zabezpiecza dane klienta, dzięki czemu dbas nie mają dostępu do danych w postaci zwykłego tekstu. Szyfrowanie i odszyfrowywanie danych odbywa się w sposób niewidoczny na poziomie sterownika, minimalizując zmiany, które należy wprowadzić w istniejących aplikacjach. Aby uzyskać szczegółowe informacje, Always Encrypted (aparat bazy danych)i Always Encrypted (opracowywanie aplikacji dla klientów).

  • 64-bitowy kompilator JIT dla kodu zarządzanego

    .NET Framework 4.6 zawiera nową wersję 64-bitowego kompilatora JIT (pierwotnie o nazwie RyuJIT o nazwie kodowej). Nowy 64-bitowy kompilator zapewnia znaczną poprawę wydajności w powyżej starszego 64-bitowego kompilatora JIT. Nowy kompilator 64-bitowy jest włączony dla 64-bitowych procesów uruchomionych w .NET Framework 4.6. Aplikacja zostanie uruchomiona w procesie 64-bitowym, jeśli zostanie skompilowana jako 64-bitowa lub AnyCPU i działa w 64-bitowym systemie operacyjnym. Chociaż zadbano o to, aby przejście do nowego kompilatora było tak przejrzyste, jak to możliwe, możliwe są zmiany w zachowaniu.

    Nowy 64-bitowy kompilator JIT zawiera również sprzętowe funkcje przyspieszania SIMD w połączeniu z typami z obsługą SIMD System.Numerics w przestrzeni nazw, co może zapewniać dobrą wydajność.

  • Ulepszenia modułu ładującego zestawu

    Modułu ładującego zestawu używa teraz pamięci wydajniej przez zwolnienie zestawów IL po załadowaniu odpowiedniego obrazu NGEN. Ta zmiana zmniejsza ilość pamięci wirtualnej, co jest szczególnie korzystne w przypadku dużych aplikacji 32-bitowych (takich jak Visual Studio), a także oszczędza pamięć fizyczną.

  • Zmiany biblioteki klas bazowych

    Dodano wiele nowych interfejsów API do .NET Framework 4.6, aby umożliwić obsługę kluczowych scenariuszy. Obejmują one następujące zmiany i dodatki:

    • Implementacje IReadOnlyCollectionT<>

      Dodatkowe kolekcje implementują IReadOnlyCollection<T> takie jak Queue<T> i Stack<T>.

    • CultureInfo.CurrentCulture i CultureInfo.CurrentUICulture

      Właściwości CultureInfo.CurrentCulture i CultureInfo.CurrentUICulture są teraz do odczytu i zapisu, a nie tylko do odczytu. W przypadku przypisania nowego obiektu CultureInfoThread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture do tych właściwości zmienia się również bieżąca kultura wątku zdefiniowana przez właściwość i bieżąca kultura wątku interfejsu użytkownika zdefiniowana przez właściwości.

    • Ulepszenia dotyczące wyrzucania elementów bezużytecznych (GC)

      Klasa GC zawiera teraz metody TryStartNoGCRegion i EndNoGCRegion , które umożliwiają nie zezwalanie na wyrzucanie elementów bezużytecznych podczas wykonywania ścieżki krytycznej.

      Nowe przeciążenie GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) metody umożliwia kontrolowanie, czy sterta małych obiektów i sterta obiektów dużych są zagęszczane i kompaktowane, czy tylko zwarte.

    • Typy obsługujące technikę SIMD

      Przestrzeń System.Numerics nazw zawiera teraz wiele typów z włączoną obsługą simd, takich jak Matrix3x2, Matrix4x4, Plane, Quaternion, Vector2, Vector3i Vector4.

      Ponieważ nowy 64-bitowy kompilator JIT zawiera również sprzętowe funkcje przyspieszania SIMD, w przypadku korzystania z typów z obsługą simd w nowym 64-bitowym kompilatorze JIT wprowadzono szczególnie znaczące ulepszenia wydajności.

    • Aktualizacje kryptografii

      Interfejs System.Security.Cryptography API jest aktualizowany w celu obsługi Windows interfejsów API kryptografii CNG. Poprzednie wersje interfejsu .NET Framework bazowały całkowicie na starszej wersji interfejsów API kryptografii Windows jako podstawy implementacjiSystem.Security.Cryptography. Mieliśmy żądania obsługi interfejsu API CNG, ponieważ obsługuje on nowoczesne algorytmy kryptografii , które są ważne w przypadku niektórych kategorii aplikacji.

      .NET Framework 4.6 zawiera następujące nowe ulepszenia do obsługi interfejsów API Windows kryptografii CNG:

      • Zestaw metod rozszerzeń dla certyfikatów X509 System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2)System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2)i , które zwracają implementację opartą na CNG, a nie implementację opartą na capi, gdy jest to możliwe. (Niektóre karty inteligentne itp. nadal wymagają capi, a interfejsy API obsługują rezerwowe).

      • Klasa System.Security.Cryptography.RSACng , która zapewnia implementację algorytmu RSA w języku CNG.

      • Ulepszenia interfejsu API RSA, dzięki czemu typowe akcje nie wymagają już rzutowania. Na przykład szyfrowanie danych przy użyciu obiektu X509Certificate2 wymaga kodu podobnego do poniższego w poprzednich wersjach .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)
        

        Kod, który używa nowych interfejsów API kryptografii w programie .NET Framework 4.6, można zapisać ponownie w następujący sposób, aby uniknąć rzutowania.

        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)
        
    • Obsługa konwertowania dat i godzin na czas systemu Unix lub z tego czasu

      Dodano następujące nowe metody do DateTimeOffset struktury w celu obsługi konwertowania wartości daty i czasu na lub z czasu systemu Unix:

    • Przełączniki zgodności

      Klasa AppContext dodaje nową funkcję zgodności, która umożliwia autorom biblioteki zapewnienie jednolitego mechanizmu rezygnacji dla nowych funkcji dla użytkowników. Ustanawia luźno powiązany kontrakt między składnikami w celu przekazywania żądania rezygnacji. Ta funkcja jest zwykle ważna, gdy w istniejącej funkcji zostanie w nim w wejdą zmiany. Z drugiej strony istnieje już niejawna klauzula zgody na nowe funkcje.

      W AppContextprogramie biblioteki definiują i uwidoczniają przełączniki zgodności, natomiast kod, który od nich zależy, może ustawić te przełączniki tak, aby wpływały na zachowanie biblioteki. Domyślnie biblioteki zapewniają nowe funkcje i tylko je zmieniają (czyli zapewniają poprzednią funkcjonalność), jeśli przełącznik jest ustawiony.

      Aplikacja (lub biblioteka) może zadeklarować wartość przełącznika ( Boolean która zawsze jest wartością) zdefiniowaną przez bibliotekę zależną. Przełącznik jest zawsze niejawnie false. Włączenie przełącznika true . Jawne ustawienie przełącznika na false zapewnia nowe zachowanie.

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

      Biblioteka musi sprawdzić, czy konsument zadeklarował wartość przełącznika, a następnie odpowiednio na nim działać.

      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
      

      Korzystne jest używanie spójnego formatu przełączników, ponieważ są one formalnym kontraktem ujawnionym przez bibliotekę. Poniżej przedstawiono dwa oczywiste formaty.

      • Przełącz.przestrzeń nazw. nazwa przełącznika

      • Przełącz.w bibliotece programu . nazwa przełącznika

    • Zmiany wzorca asynchronicznego opartego na zadaniach (TAP)

      W przypadku aplikacji, .NET Framework do 4.6, TaskTask<TResult> a obiekty dziedziczą kulturę i kulturę interfejsu użytkownika wątku wywołującego. Nie ma to wpływu na działanie aplikacji, które są .NET Framework poprzednich wersjach programu lub które nie są ukierunkowane na określoną .NET Framework programu . Aby uzyskać więcej informacji, zobacz sekcję "Culture and task-based asynchronous operations" (Kultura i operacje asynchroniczne oparte na zadaniach) w temacie CultureInfo class (Klasa).

      Klasa System.Threading.AsyncLocal<T> umożliwia reprezentowanie danych otoczenia, które są lokalne dla danego asynchronicznego przepływu sterowania, takiego jak async metoda. Może służyć do utrwalania danych między wątkami. Można również zdefiniować metodę wywołania AsyncLocal<T>.Value zwrotnego, która jest powiadamiana za każdym razem, gdy dane otoczenia zmienią się, ponieważ właściwość została jawnie zmieniona lub wątek napotkał przejście kontekstu.

      Do wzorca Task.CompletedTaskTask.FromCanceledasynchronicznego opartego na zadaniach (TAP) dodano trzy wygodne metody, , Task.FromExceptioni , aby zwracać ukończone zadania w określonym stanie.

      Klasa NamedPipeClientStream obsługuje teraz komunikację asynchroniczną z nowym .ConnectAsync Metoda.

    • Usługa EventSource obsługuje teraz zapisywanie w dzienniku zdarzeń

      Teraz można użyć klasy EventSource do dziennika komunikatów administracyjnych lub operacyjnych w dzienniku zdarzeń, oprócz wszystkich istniejących sesji ETW utworzonych na maszynie. W przeszłości do obsługi tej funkcji trzeba było używać pakietu NuGet Microsoft.Diagnostics.Tracing.EventSource. Ta funkcja jest teraz wbudowana w .NET Framework 4.6.

      Zarówno pakiet NuGet, jak i .NET Framework 4.6 zostały zaktualizowane o następujące funkcje:

      • Zdarzenia dynamiczne

        Zezwala na zdarzenia zdefiniowane "na bieżąco" bez tworzenia metod zdarzeń.

      • Rozbudowane ładunki

        Umożliwia przekazywane jako ładunek klasy i tablice ze specjalnymi wartościami, a także typy pierwotne

      • Śledzenie działań

        Powoduje, że zdarzenia uruchamiania i zatrzymania tagują zdarzenia między nimi za pomocą identyfikatora, który reprezentuje wszystkie aktualnie aktywne działania.

      Aby obsługiwać te funkcje, przeciążona metoda Write została dodana do EventSource klasy .

  • Windows Presentation Foundation (WPF)

    • Ulepszenia interfejsu HDPI

      Obsługa hdPI w WPF jest teraz lepsza w .NET Framework 4.6. W dokonano zmian zaokrąglania układu w celu zmniejszenia liczby wystąpień przycinania w kontrolkach z obramowaniami. Domyślnie ta funkcja jest włączona tylko wtedy, gdy ustawiono TargetFrameworkAttribute wartość .NET Framework 4.6. Aplikacje, które są kierowane do wcześniejszych wersji struktury, ale działają w wersji .NET Framework 4.6<>, mogą zdecydować się na nowe zachowanie, dodając następujący wiersz do sekcji środowiska uruchomieniowego app.config uruchomieniowego:

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

      Okna WPF z wieloma monitorami z różnymi ustawieniami DPI (konfiguracja z wieloma rozdzielczościami DPI) są teraz całkowicie renderowane bez zaciemnianych regionów. Możesz zrezygnować z tego zachowania, dodając <appSettings> następujący wiersz do sekcji pliku app.config, aby wyłączyć to nowe zachowanie:

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

      Dodano obsługę automatycznego ładowania kursora w prawo na podstawie ustawienia DPI System.Windows.Input.Cursor.

    • Dotyk jest lepszy

      Raporty klientów dotyczące Połączenie, że dotyk powoduje nieprzewidywalne zachowanie, zostały rozwiązane w .NET Framework 4.6. Próg dwukrotnego naciśnięcia dla Windows Store i aplikacji WPF jest teraz taki sam w Windows 8.1 i powyżej.

    • Obsługa przezroczystego okna podrzędnego

      WPF w .NET Framework 4.6 obsługuje przezroczyste okna podrzędne w Windows 8.1 i powyżej. Dzięki temu można tworzyć nie prostokątne i przezroczyste okna podrzędne w oknach najwyższego poziomu. Tę funkcję można włączyć, ustawiając właściwość HwndSourceParameters.UsesPerPixelTransparency na wartość true.

  • Windows Communication Foundation (WCF)

    • Obsługa protokołu SSL

      Program WCF obsługuje teraz protokoły SSL w wersji 1.1 i TLS 1.2, oprócz protokołów SSL 3.0 i TLS 1.0, podczas korzystania z protokołu NetTcp z zabezpieczeniami transportu i uwierzytelnianiem klienta. Teraz można wybrać protokół do użycia lub wyłączyć stare mniej bezpieczne protokoły. Można to zrobić, ustawiając właściwość SslProtocols lub dodając następujący kod do pliku konfiguracji.

      <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>
      
    • Wysyłanie komunikatów przy użyciu różnych połączeń HTTP

      Usługa WCF umożliwia teraz użytkownikom zapewnienie, że niektóre komunikaty są wysyłane przy użyciu różnych podstawowych połączeń HTTP. Istnieją dwa sposoby wykonania tej czynności:

      • Używanie prefiksu nazwy grupy połączeń

        Użytkownicy mogą określić ciąg, który będzie przez usługę WCF jako prefiks nazwy grupy połączeń. Dwa komunikaty z różnymi prefiksami są wysyłane przy użyciu różnych podstawowych połączeń HTTP. Aby ustawić prefiks, dodaj parę klucz/wartość do właściwości Message.Properties komunikatu. Klucz to "HttpTransportConnectionGroupNamePrefix"; Wartość jest żądanym prefiksem.

      • Korzystanie z różnych fabryk kanałów

        Użytkownicy mogą również włączyć funkcję, która zapewnia, że komunikaty wysyłane przy użyciu kanałów utworzonych przez różne fabryki kanałów będą używać różnych podstawowych połączeń HTTP. Aby włączyć tę funkcję, użytkownicy muszą ustawić następujące appSetting ustawienia na wartość true:

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

    Teraz możesz określić liczbę sekund, przez które usługa przepływu pracy będzie wstrzymywać żądanie operacji poza kolejnością, gdy istnieje zaległa zakładka "bez protokołu" przed przechwytąc limit czasu żądania. Zakładka "poza protokołem" jest zakładką, która nie jest powiązana z zaległymi działaniami odbierania. Niektóre działania tworzą zakładki inne niż protokołu w ramach implementacji, więc może nie być oczywiste, że istnieje zakładka bez protokołu. Należą do nich State (Stan) i Pick (Wybór). Dlatego jeśli masz usługę przepływu pracy zaimplementowaną z maszyną stanu lub zawierającą działanie Pick, najprawdopodobniej będziesz mieć zakładki inne niż protokołu. Interwał można określić, dodając wiersz podobny do poniższego do appSettings sekcji app.config pliku:

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

    Wartość domyślna to 60 sekund. Jeśli value ustawiono wartość 0, żądania poza kolejnością są natychmiast odrzucane z błędem z tekstem, który wygląda następująco:

    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.
    

    Jest to ten sam komunikat, który jest wyświetlany w przypadku otrzymania komunikatu operacji poza kolejnością i nie ma żadnych zakładek innych niż protokołu.

    Jeśli wartość elementu jest FilterResumeTimeoutInSeconds niezerowa, istnieją zakładki inne niż protokół, a interwał limitu czasu wygasa, operacja kończy się niepowodzeniem z komunikatem o przeoczaniach.

  • Transakcje

    Teraz można dołączyć identyfikator transakcji rozproszonej dla transakcji, który spowodował wyjątek TransactionException pochodzący z ma być zgłaszany. W tym celu należy dodać następujący klucz do appSettings sekcji app.config pliku:

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

    Wartość domyślna to false.

  • Sieć

    • Ponowne użycie gniazda

      Windows 10 nowy algorytm sieci o wysokiej skalowalności, który umożliwia lepsze wykorzystanie zasobów maszyny przez ponowne użycie portów lokalnych dla wychodzących połączeń TCP. .NET Framework 4.6 obsługuje nowy algorytm, dzięki czemu aplikacje .NET mogą korzystać z nowego zachowania. W poprzednich wersjach programu Windows był używany sztuczny limit połączeń współbieżnych (zazwyczaj 16 384, domyślny rozmiar zakresu portów dynamicznych), co może ograniczyć skalowalność usługi, powodując wyczerpanie portów w warunkach obciążenia.

      W .NET Framework 4.6 dodano dwa interfejsy API umożliwiające ponowne używanie portów, co skutecznie usuwa limit 64 KB dla połączeń współbieżnych:

      Domyślnie właściwość jest ServicePointManager.ReusePort , false chyba że HWRPortReuseOnSocketBind wartość HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 klucza rejestru jest ustawiona na 0x1. Aby włączyć ponowne użycie portu lokalnego dla połączeń HTTP, ustaw właściwość ServicePointManager.ReusePort na wartość true. Powoduje to, że wszystkie wychodzące połączenia gniazd HttpClientHttpWebRequest TCP z i używają nowej Windows 10 gniazda sieciowego, SO_REUSE_UNICASTPORT, która umożliwia ponowne użycie portu lokalnego.

      Deweloperzy piszący aplikację System.Net.Sockets.SocketOptionNameSocket.SetSocketOption korzystającą tylko z gniazd mogą określić opcję podczas wywoływania metody takiej jak , aby gniazda wychodzące ponownie używać portów lokalnych podczas wiązania.

    • Obsługa międzynarodowych nazw domen i kodu PunyCode

      Do klasy dodano IdnHostnową właściwość , Uri aby lepiej obsługiwać międzynarodowe nazwy domen i program PunyCode.

  • Zmiana rozmiaru w Windows Forms kontrolek.

    Ta funkcja została rozszerzona w .NET Framework 4.6 DomainUpDownw celu dołączyć typy , NumericUpDown, DataGridViewComboBoxColumni BoundsDataGridViewColumnToolStripSplitButton oraz prostokąt określony przez właściwość używaną podczas rysowania obiektu .UITypeEditor

    Jest to funkcja z rezygnacją. Aby ją włączyć, ustaw EnableWindowsFormsHighDpiAutoResizing element na w true pliku konfiguracji aplikacji (app.config):

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Obsługa kodowania stron kodowych

    .NET Core obsługuje przede wszystkim kodowanie Unicode i domyślnie zapewnia ograniczoną obsługę kodowania stron kodowych. Możesz dodać obsługę kodowania stron kodowych dostępnych w programie .NET Framework ale nieobsługiwanych na platformie .NET Core, rejestrując kodowanie stron kodowych za pomocą Encoding.RegisterProvider metody . Aby uzyskać więcej informacji, zobacz System.Text.CodePagesEncodingProvider.

  • .NET Native

platforma uniwersalna systemu Windows (UWP) napisane w języku C# lub Visual Basic mogą korzystać z nowej technologii, która kompiluje aplikacje do kodu natywnego, a nie IL. Ta technologia tworzy aplikacje, które mają krótszy czas uruchamiania i wykonywania. Aby uzyskać więcej informacji, zobacz Kompilowanie aplikacji za pomocą .NET Native. Aby uzyskać omówienie .NET Native, która sprawdza, czym różni się ona od kompilacji JIT i NGEN oraz co to oznacza dla kodu, zobacz .NET Native i Kompilacja.

Aplikacje są domyślnie kompilowane do kodu natywnego podczas kompilowania ich Visual Studio 2015 lub nowszym. Aby uzyskać więcej informacji, zobacz Wprowadzenie z .NET Native.

Aby obsługiwać debugowanie .NET Native aplikacji, do nieza zarządzania interfejsem API debugowania dodano wiele nowych interfejsów i wyliczeń. Aby uzyskać więcej informacji, zobacz debugowanie (nieza zarządzanie odwołanie do interfejsu API).

  • Pakiety .NET Framework open source

    Pakiety .NET Core, takie jak kolekcje niezmienne, interfejsy API SIMD i interfejsy API sieci, System.Net.Http takie jak te, które znajdują się w przestrzeni nazw, są teraz dostępne jako pakiety typu open source w GitHub. Aby uzyskać dostęp do kodu, zobacz .NET na GitHub. Aby uzyskać więcej informacji i dowiedzieć się, jak współtwomentować te pakiety, zobacz Introduction to .NET, .NET Home Page on GitHub (Wprowadzenie do programu .NET i strony głównej .NET na platformie GitHub).

Co nowego w programie .NET Framework 4.5.2

  • Nowe interfejsy API dla ASP.NET mobilnych. Nowe metody HttpResponse.AddOnSendingHeaders i HttpResponseBase.AddOnSendingHeaders umożliwiają sprawdzanie i modyfikowanie nagłówków odpowiedzi oraz kodu stanu, gdy odpowiedź jest opróżniona do aplikacji klienckiej. Rozważ użycie tych metod zamiast zdarzeń PreSendRequestHeaders i PreSendRequestContent . Są one bardziej wydajne i niezawodne.

    Metoda HostingEnvironment.QueueBackgroundWorkItem umożliwia zaplanowanie małych elementów roboczych w tle. ASP.NET śledzi te elementy i uniemożliwia usługom IIS nagłe zakończenie procesu roboczego do momentu ukończenia wszystkich elementów roboczych w tle. Tej metody nie można nazwać poza ASP.NET zarządzaną aplikacją.

    Nowe właściwości HttpResponse.HeadersWritten i HttpResponseBase.HeadersWritten zwracają wartości logiczne, które wskazują, czy nagłówki odpowiedzi zostały zapisane. Możesz użyć tych właściwości, aby upewnić się, że wywołania interfejsów API HttpResponse.StatusCode , takie jak (które zrzucą wyjątki, jeśli nagłówki zostały zapisane), zostaną pomyślnie wywołane.

  • Zmiana rozmiaru w Windows Forms kontrolek. Ta funkcja została rozszerzona. Teraz można użyć ustawienia DPI systemu, aby zmienić rozmiar składników następujących dodatkowych kontrolek (na przykład strzałki listy rozwijanej w polach kombi):

    Jest to funkcja z rezygnacją. Aby ją włączyć, ustaw EnableWindowsFormsHighDpiAutoResizing element na w true pliku konfiguracji aplikacji (app.config):

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Nowa funkcja przepływu pracy. Menedżer zasobów, który korzysta z EnlistPromotableSinglePhase metody (i dlatego implementuje IPromotableSinglePhaseNotification interfejs), Transaction.PromoteAndEnlistDurable może użyć nowej metody w celu zażądania następujących czynności:

    Można to zrobić w tej samej domenie aplikacji i nie wymaga dodatkowego kodu nieza pomocą konta MSDTC w celu przeprowadzenia promocji. Nową metodę można wywołać tylko wtedy System.TransactionsIPromotableSinglePhaseNotificationPromote , gdy istnieje zaległe wywołanie metody z metody zaimplementowanej przez podówień.

  • Ulepszenia profilowania. Następujące nowe nieza niezamaniowane interfejsy API profilowania zapewniają bardziej niezawodne profilowanie:

    Poprzednie ICorProfiler implementacje obsługiwane ładowały z opóźnieniem zależne zestawy. Nowe interfejsy API profilowania wymagają natychmiastowego ładowania zestawów zależnych, które są wstrzykiwane przez profilera, zamiast ładowania po pełnym zainicjowaniu aplikacji. Ta zmiana nie ma wpływu na użytkowników istniejących interfejsów ICorProfiler API.

  • Ulepszenia debugowania. Następujące nowe nieza nieza przykładowe interfejsy API debugowania zapewniają lepszą integrację z profilerem. Podczas debugowania zrzutu można teraz uzyskać dostęp do metadanych wstawionych przez profilera, a także zmiennych lokalnych i kodu generowanych przez żądania ReJIT kompilatora.

  • Zmiany śledzenia zdarzeń. .NET Framework 4.5.2 umożliwia poza procesem śledzenie zdarzeń na podstawie Windows (ETW) dla większego obszaru powierzchni. Dzięki temu dostawcy zaawansowanego zarządzania energią (APM, Advanced Power Management) mogą dostarczać lekkie narzędzia, które dokładnie śledzą koszty poszczególnych żądań i działań, które przecinają wątki. Te zdarzenia są wywoływane tylko wtedy, gdy kontrolery ETW je włączyć; w związku z tym zmiany nie mają wpływu na wcześniej napisany kod ETW lub kod, który jest uruchamiany z etw wyłączone.

  • Podciąganie transakcji i konwertowanie jej na trwałą enlistment

    Transaction.PromoteAndEnlistDurableto nowy interfejs API dodany do .NET Framework 4.5.2 i 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
    

    Metoda może być używana przez element enlistment, który został wcześniej utworzony przez Transaction.EnlistPromotableSinglePhase metodę w odpowiedzi na ITransactionPromoter.Promote metodę . Prosi o System.Transactions podniesieć transakcji do transakcji MSDTC i "konwersji" promowany enlistment do trwałej enlistment. Po pomyślnym zakończeniu tej metody interfejs IPromotableSinglePhaseNotificationSystem.Transactionsnie będzie już przywołyny przez usługę , a wszystkie przyszłe powiadomienia będą wysyłane do dostarczonego interfejsu ISinglePhaseNotification . Rejestracja, których dotyczy, musi działać jako trwałe rejestracji, obsługi rejestrowania transakcji i odzyskiwania. Aby uzyskać szczegółowe informacje, Transaction.EnlistDurable zapoznaj się z tematem . Ponadto lista musi obsługiwać ISinglePhaseNotification. Tę metodę można wywołać tylko podczas przetwarzania wywołania ITransactionPromoter.Promote . Jeśli tak nie jest, jest zgłaszany TransactionException wyjątek.

Co nowego w programie .NET Framework 4.5.1

Aktualizacje z kwietnia 2014 r.:

  • Visual Studio 2013 Update 2 zawiera aktualizacje szablonów biblioteki klas przenośnych w celu obsługi tych scenariuszy:

    • Interfejsów API środowisko wykonawcze systemu Windows można używać w bibliotekach przenośnych, które są Windows 8.1, Windows Phone 8.1 i Windows Phone Silverlight 8.1.

    • Można dołączyć język XAML (Windows. INTERFEJSU UŻYTKOWNIKA. typy XAML) w bibliotekach przenośnych, gdy obiektem docelowym Windows 8.1 lub Windows Phone 8.1. Obsługiwane są następujące szablony XAML: pusta strona, słownik zasobów, kontrolka z szablonami i kontrolka użytkownika.

    • Można utworzyć przenośny składnik środowisko wykonawcze systemu Windows (plik winmd) do użycia w aplikacjach ze Sklepu, które są Windows 8.1 i Windows Phone 8.1.

    • Można zmienić sposób przekierowania biblioteki klas magazynu Windows Store lub Windows Phone Store, na przykład przenośną bibliotekę klas.

    Aby uzyskać więcej informacji na temat tych zmian, zobacz Portable Class Library (Biblioteka klas przenośnych).

  • Zestaw .NET Framework zawiera teraz dokumentację usługi .NET Native, która jest technologią prekompilowania do tworzenia i wdrażania Windows aplikacji. .NET Native kompiluje aplikacje bezpośrednio do kodu natywnego, a nie do języka pośredniego (IL), aby uzyskać lepszą wydajność. Aby uzyskać szczegółowe informacje, zobacz Compiling Apps with .NET Native (Kompilowanie aplikacji za pomocą .NET Native).

  • Źródło .NET Framework udostępnia nowe środowisko przeglądania i ulepszone funkcje. Teraz możesz przeglądać kod źródłowy usługi .NET Framework online, pobierać odwołanie do wyświetlania w trybie offline i przechodzić przez źródła (w tym poprawki i aktualizacje) podczas debugowania. Aby uzyskać więcej informacji, zobacz wpis w blogu A new look for .NET Reference Source (Nowy wygląd źródła referencyjnego .NET).

Nowe funkcje i ulepszenia w klasach bazowych w .NET Framework 4.5.1 obejmują:

Ulepszenia Windows Forms obejmują:

  • Zmiana rozmiaru w Windows Forms kontrolek. Można użyć ustawienia DPI systemu, aby zmienić rozmiar składników kontrolek (na przykład ikon wyświetlanych w siatce właściwości), klikając wpis w pliku konfiguracji aplikacji (app.config) dla aplikacji. Ta funkcja jest obecnie obsługiwana w następujących kontrolkach Windows Forms kontroli:

    Aby włączyć tę funkcję, dodaj nowy element <appSettings> do pliku konfiguracji (app.config) i ustaw EnableWindowsFormsHighDpiAutoResizing element na true:

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

Ulepszenia debugowania aplikacji .NET Framework w Visual Studio 2013 obejmują:

  • Zwraca wartości w Visual Studio debugowania. Podczas debugowania aplikacji zarządzanej w programie Visual Studio 2013 w oknie Automatyczne wyświetlane są zwracane typy i wartości metod. Te informacje są dostępne dla aplikacji klasycznych, Windows Store i Windows Phone aplikacji. Aby uzyskać więcej informacji, zobacz Badanie wartości zwracanych wywołań metod.

  • Edytuj i kontynuuj dla aplikacji 64-bitowych. Visual Studio 2013 obsługuje funkcję Edytuj i kontynuuj dla 64-bitowych zarządzanych aplikacji klasycznych, aplikacji Windows Store i Windows Phone. Istniejące ograniczenia obowiązują w przypadku aplikacji 32-bitowych i 64-bitowych (zobacz ostatnią sekcję artykułu Obsługiwane zmiany kodu (C# ).

  • Debugowanie z synchronizacją. Aby ułatwić debugowanie aplikacji asynchronicznych w programie Visual Studio 2013, stos wywołań ukrywa kod infrastruktury dostarczany przez kompilatory w celu obsługi programowania asynchronicznego, a także łańcuchy w logicznych ramkach nadrzędnych, dzięki czemu można łatwiej śledzić wykonywanie programu logicznego. Okno Zadania zastępuje okno Zadania równoległe i wyświetla zadania związane z określonym punktem przerwania, a także wyświetla wszystkie inne zadania, które są aktualnie aktywne lub zaplanowane w aplikacji. Informacje o tej funkcji można znaleźć w sekcji "Debugowanie z informacjami asynchronicznym" w .NET Framework 4.5.1.

  • Lepsza obsługa wyjątków środowisko wykonawcze systemu Windows składników. W Windows 8.1 wyjątki, które wynikają z Windows Store, zachowują informacje o błędzie, który spowodował wyjątek, nawet w granicach języka. Informacje o tej funkcji można znaleźć w sekcji "Tworzenie aplikacji ze sklepu Windows Store" w anonsie .NET Framework 4.5.1.

Począwszy od Visual Studio 2013, możesz użyć zarządzanego narzędzia do optymalizacji z przewodnikiem profilu (Mpgo.exe), aby zoptymalizować aplikacje ze sklepu Windows 8.x oraz aplikacje klasyczne.

Aby uzyskać informacje o nowych funkcjach ASP.NET wersji 4.5.1, zobacz ASP.NET and Web Tools, aby Visual Studio 2013 informacje o wersji.

Co nowego w programie .NET Framework 4.5

Klas podstawowych

Managed Extensibility Framework (MEF)

W .NET Framework 4.5 Managed Extensibility Framework (MEF) oferuje następujące nowe funkcje:

  • Obsługa typów ogólnych.

  • Model programowania oparty na konwencji, który umożliwia tworzenie części na podstawie konwencji nazewnictwa, a nie atrybutów.

  • Wiele zakresów.

  • Podzbiór plików MEF, których można używać podczas tworzenia aplikacji ze sklepu Windows 8.x. Ten podzestaw jest dostępny jako pakiet do pobrania z NuGet Galerii. Aby zainstalować pakiet, otwórz projekt w programie Visual Studio, wybierz pozycję Zarządzaj pakietami NuGet z menu Project i wyszukaj pakiet w trybie Microsoft.Composition online.

Aby uzyskać więcej informacji, zobacz Managed Extensibility Framework (MEF).

Asynchroniczne operacje na plikach

W .NET Framework 4.5 dodano nowe funkcje asynchroniczne do języka C# i Visual Basic języków. Te funkcje dodają model oparty na zadaniach do wykonywania operacji asynchronicznych. Aby użyć tego nowego modelu, należy użyć metod asynchronicznych w klasach We/Wy. Zobacz Asynchroniczne operacje we/wy pliku.

narzędzia

W wersji .NET Framework 4.5 generator plików zasobów (Resgen.exe) umożliwia utworzenie pliku resw do użycia w aplikacjach ze sklepu Windows 8.x z pliku resources osadzonego w zestawie .NET Framework. Aby uzyskać więcej informacji, zobaczResgen.exe (Generator plików zasobów).

Optymalizacja zarządzana z przewodnikiem profilów (Mpgo.exe) umożliwia zwiększenie czasu uruchamiania aplikacji, wykorzystania pamięci (rozmiar zestawu roboczego) i przepływności przez optymalizację zestawów obrazów natywnych. Narzędzie wiersza polecenia generuje dane profilu dla zestawów aplikacji obrazów natywnych. Zobacz Mpgo.exe (Narzędzie optymalizacji z przewodnikiem po profilu zarządzanym). Począwszy od Visual Studio 2013, można używać usługi Mpgo.exe do optymalizowania aplikacji ze sklepu Windows 8.x, a także aplikacji klasycznych.

Przetwarzanie równoległe

.NET Framework 4.5 zawiera kilka nowych funkcji i ulepszeń przetwarzania równoległego. Obejmują one lepszą wydajność, zwiększoną kontrolę, ulepszoną obsługę programowania asynchronicznego, nową bibliotekę przepływów danych oraz ulepszoną obsługę debugowania równoległego i analizy wydajności. Zobacz wpis Co nowego w równoległości w programie .NET Framework 4.5 w blogu Parallel Programming with .NET (Programowanie równoległe przy użyciu programu .NET).

Internet

ASP.NET 4.5 i 4.5.1 dodają powiązanie modelu na Web Forms, obsługę protokołu WebSocket, asynchroniczne procedury obsługi, ulepszenia wydajności i wiele innych funkcji. Więcej informacji można znaleźć w następujących zasobach:

Sieci

.NET Framework 4.5 udostępnia nowy interfejs programowania dla aplikacji HTTP. Aby uzyskać więcej informacji, zobacz nowe przestrzenie System.Net.HttpSystem.Net.Http.Headers nazw i .

Obsługa nowego interfejsu programowania jest również dołączona do akceptowania połączenia WebSocket i interakcji z nim przy użyciu istniejących HttpListener i powiązanych klas. Aby uzyskać więcej informacji, zobacz nową przestrzeń System.Net.WebSockets nazw i klasę HttpListener .

Ponadto program .NET Framework 4.5 zawiera następujące ulepszenia sieci:

  • Obsługa zgodnego ze standardem RFC URI. Aby uzyskać więcej informacji, zobacz Uri i powiązane klasy.

  • Obsługa analizowania międzynarodowych nazw domen (IDN). Aby uzyskać więcej informacji, zobacz Uri i powiązane klasy.

  • Obsługa międzynarodowych adresów e-mail (EAI). Aby uzyskać więcej informacji, zobacz przestrzeń System.Net.Mail nazw .

  • Ulepszona obsługa protokołu IPv6. Aby uzyskać więcej informacji, zobacz przestrzeń System.Net.NetworkInformation nazw .

  • Obsługa gniazd w trybie podwójnym. Aby uzyskać więcej informacji, zobacz Socket klasy i TcpListener .

Windows Presentation Foundation (WPF)

W .NET Framework 4.5 Windows Presentation Foundation (WPF) zawiera zmiany i ulepszenia w następujących obszarach:

  • Nowa kontrolka Ribbon , która umożliwia zaimplementowanie interfejsu użytkownika wstążki, który hostuje pasek narzędzi Szybki dostęp, menu aplikacji i karty.

  • Nowy interfejs INotifyDataErrorInfo , który obsługuje synchroniczną i asynchroniczną weryfikację danych.

  • Nowe funkcje dla klas VirtualizingPanel i Dispatcher .

  • Zwiększona wydajność podczas wyświetlania dużych zestawów pogrupowanych danych i uzyskiwania dostępu do kolekcji w wątkach innych niż interfejsu użytkownika.

  • Powiązanie danych z właściwościami statycznych, powiązanie danych z typami niestandardowymi, które implementują ICustomTypeProvider interfejs, oraz pobieranie informacji o powiązaniu danych z wyrażenia powiązania.

  • Zmienianie położenia danych w przypadku zmiany wartości (kształtowanie na żywo).

  • Możliwość sprawdzenia, czy kontekst danych kontenera elementów jest rozłączony.

  • Możliwość ustawienia czasu, który powinien upłynąć między zmianami właściwości a aktualizacjami źródła danych.

  • Ulepszono obsługę implementowania słabych wzorców zdarzeń. Ponadto zdarzenia mogą teraz akceptować rozszerzenia znaczników.

Windows Communication Foundation (WCF)

W .NET Framework 4.5 dodano następujące funkcje, aby ułatwić pisanie i konserwację aplikacji Windows Communication Foundation (WCF):

  • Uproszczenie wygenerowanych plików konfiguracji.

  • Obsługa developmentu typu "najpierw kontrakt".

  • Łatwiejsza konfiguracja ASP.NET zgodności.

  • Zmiany domyślnych wartości właściwości transportu w celu zmniejszenia prawdopodobieństwa ich ustawienia.

  • Aktualizacje klasy w XmlDictionaryReaderQuotas celu zmniejszenia prawdopodobieństwa, że trzeba będzie ręcznie skonfigurować limity przydziału dla czytników słownika XML.

  • Walidacja plików konfiguracji programu WCF według Visual Studio w ramach procesu kompilacji, dzięki czemu można wykryć błędy konfiguracji przed uruchomieniem aplikacji.

  • Nowa obsługa asynchronicznego przesyłania strumieniowego.

  • Nowe mapowanie protokołu HTTPS, aby ułatwić uwidocznić punkt końcowy za pośrednictwem protokołu HTTPS Internet Information Services (IIS).

  • Możliwość generowania metadanych w pojedynczym dokumencie WSDL przez dołączenie do ?singleWSDL adresu URL usługi.

  • Obsługa protokołów WebSocket w celu umożliwienia prawdziwej komunikacji dwukierunkowej przez porty 80 i 443 o charakterystyce wydajności podobnej do transportu TCP.

  • Obsługa konfigurowania usług w kodzie.

  • Etykietki narzędzi edytora XML.

  • ChannelFactory Obsługa buforowania.

  • Obsługa kompresji kodera binarnego.

  • Obsługa transportu UDP, który umożliwia deweloperom pisanie usług, które używają komunikatów "fire and forget". Klient wysyła komunikat do usługi i nie oczekuje odpowiedzi z usługi.

  • Możliwość obsługi wielu trybów uwierzytelniania w jednym punkcie końcowym programu WCF w przypadku korzystania z zabezpieczeń transportu i transportu HTTP.

  • Obsługa usług WCF, które używają międzynarodowych nazw domen (IDN).

Aby uzyskać więcej informacji, zobacz Co nowego w Windows Communication Foundation.

Program Windows Workflow Foundation (WF)

W .NET Framework 4.5 dodano kilka nowych funkcji do programu Windows Workflow Foundation (WF), w tym:

  • Przepływy pracy maszyny stanowej, które zostały wprowadzone po raz pierwszy w .NET Framework 4.0.1 (.NET Framework 4 Platform Update 1). Ta aktualizacja obejmowała kilka nowych klas i działań, które umożliwiły deweloperom tworzenie przepływów pracy maszyn stanu. Te klasy i działania zostały zaktualizowane na .NET Framework 4.5 w celu:

    • Możliwość ustawienia punktów przerwania dla stanów.

    • Możliwość kopiowania i wklejania przejść w projektancie przepływu pracy.

    • Obsługa projektanta do tworzenia udostępnionego przejścia wyzwalacza.

    • Działania związane z tworzeniem przepływów pracy maszyn stanu, w tym: StateMachine, Statei Transition.

  • Ulepszone Projektant przepływu pracy, takie jak następujące:

    • Rozszerzone możliwości wyszukiwania przepływu pracy w Visual Studio, w tym szybkie wyszukiwaniei znajdowanie w plikach.

    • Możliwość automatycznego tworzenia działania Sequence po dodaniu drugiego działania podrzędnego do działania kontenera i do dołączania obu działań do działania Sequence.

    • Obsługa przesuwania, która umożliwia zmiany widocznej części przepływu pracy bez używania pasków przewijania.

    • Nowy widok Konspekt dokumentu, który pokazuje składniki przepływu pracy w widoku konspektu w stylu drzewa i umożliwia wybranie składnika w widoku Konspekt dokumentu.

    • Możliwość dodawania adnotacji do działań.

    • Możliwość definiowania i używania delegatów działania przy użyciu projektanta przepływu pracy.

    • Automatyczne łączenie i automatyczne wstawianie dla działań i przejść w przepływach pracy maszyny stanu i schematów blokowych.

  • Storage informacji o stanie widoku dla przepływu pracy w jednym elemencie w pliku XAML, dzięki czemu można łatwo lokalizować i edytować informacje o stanie widoku.

  • Działanie kontenera NoPersistScope, aby zapobiec utrwalaniu działań podrzędnych.

  • Obsługa wyrażeń języka C#:

    • Projekty przepływu pracy, które używają Visual Basic będą używać Visual Basic, a projekty przepływu pracy języka C# będą używać wyrażeń języka C#.

    • Projekty przepływu pracy języka C#, które zostały utworzone w programie Visual Studio 2010 i które mają wyrażenia Visual Basic, są zgodne z projektami przepływu pracy języka C#, które używają wyrażeń języka C#.

  • Ulepszenia wersji:

    • Nowa klasa WorkflowIdentity , która zapewnia mapowanie między utrwalonym wystąpieniem przepływu pracy i jego definicją przepływu pracy.

    • Wykonywanie równocześnie wielu wersji przepływu pracy na tym samym hoście, w tym .WorkflowServiceHost

    • W aktualizacji dynamicznej możliwość modyfikowania definicji utrwalonego wystąpienia przepływu pracy.

  • Tworzenie usługi przepływu pracy typu contract-first, która zapewnia obsługę automatycznego generowania działań w celu dopasowania do istniejącego kontraktu usługi.

Aby uzyskać więcej informacji, zobacz Co nowego w programie Windows Workflow Foundation.

Platforma .NET dla aplikacji do Sklepu Windows 8.x

Windows 8.x ze sklepu zostały zaprojektowane z myślą o konkretnych kształtach i wykorzystują możliwości Windows operacyjnego. Podzestaw wersji .NET Framework 4.5 lub 4.5.1 jest dostępny do tworzenia aplikacji ze sklepu Windows 8.x dla usługi Windows przy użyciu języka C# lub Visual Basic. Ten podzestaw nosi nazwę .NET dla Windows 8.x Store i został omówiony w omówiniu.

Biblioteki klas przenośnych

Projekt Portable Class Library w wersji Visual Studio 2012 (i nowszych) umożliwia pisanie i tworzenie zarządzanych zestawów, które działają na .NET Framework platformach. Przy użyciu projektu biblioteki klas przenośnych wybierasz platformy (takie jak Windows Phone i .NET dla aplikacji ze sklepu Windows 8.x) do użycia. Dostępne typy i elementy członkowskie w projekcie są automatycznie ograniczone do typowych typów i elementów członkowskich na tych platformach. Aby uzyskać więcej informacji, zobacz Przenośna biblioteka klas.

Zobacz też