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 musisz migrować aplikacji do .NET Framework, ale w przypadku nowych aplikacji użyj 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 o .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 włączoną 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 do .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.

Pobieranie i instalowanie .NET Framework 4.8

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

.NET Framework 4.8 można zainstalować w systemach 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 przy użyciu instalatora internetowego lub instalatora offline. Zalecanym sposobem dla większości użytkowników jest użycie instalatora internetowego.

Docelową .NET Framework 4.8 można uzyskać w programie Visual Studio 2012 lub nowszym, instalując 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 skupia 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, takie jak , zgłaszały wyjątek , gdy systemowe biblioteki kryptograficzne są skonfigurowane w SHA256Managed CryptographicException 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 zarządzane klasy kryptografii nie będą już zgłaszać w CryptographicException tym przypadku zgłoszenia:

Zamiast tego te klasy przekierowują operacje kryptograficzne do systemowej biblioteki kryptografii. Ta zmiana skutecznie usuwa potencjalnie mylące różnice między środowiskami deweloperów i środowiskami produkcyjnymi oraz sprawia, że składniki natywne i zarządzane działają w ramach tych samych zasad kryptograficznych. Aplikacje, które są zależne od tych wyjątków, mogą przywrócić poprzednie zachowanie, ustawiając przełącznik AppContext Switch.System.Security.Cryptography.UseLegacyFipsThrow na true . Aby uzyskać więcej informacji, zobacz Managed cryptography classes do not throw a CryptographyException in FIPS mode (Klasyzarządzanej kryptografii 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 biblioteki 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 usługi 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 w celu śledzenia i zapewnienia powiadomień o dostępności i wydajności usługi.

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

  • 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 ?health ciągiem zapytania. Łatwość dostępu do takich informacji jest ważna w przypadku rozwiązywania problemów z nieprawidłowo 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)
    
  • Przy użyciu pliku konfiguracji. Na przykład:

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

Stan kondycji usługi można odpytać przy użyciu parametrów zapytania, takich jak , , i można określić kod odpowiedzi HTTP dla OnServiceFailure OnDispatcherFailure każdego OnListenerFailure OnThrottlePercentExceeded 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 jest zwracana 200.

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

Windows Presentation Foundation (WPF)

Ulepszenia wysokiej rozdzielczości DPI

W .NET Framework 4.8 WPF dodaje obsługę Per-Monitor DPI w wersji 2 i Mixed-Mode DPI. Zobacz High DPI Desktop Application Development on Windows for additional information about high DPI development (Tworzenie aplikacji klasycznych o wysokiej rozdzielczości DPI na Windows, aby uzyskać dodatkowe informacje o programie o wysokiej rozdzielczości DPI.

.NET Framework 4.8 ulepsza obsługę hostowanych aplikacji HWND i Windows Forms w aplikacjach WPF o wysokiej rozdzielczości dpi na platformach, które obsługują skalowanie DPI Windows 10 Mixed-Mode (począwszy od aktualizacji z kwietnia 2018 r.). Gdy hostowane kontrolki HWND lub Windows Mixed-Mode Forms są tworzone jako okna skalowane w rozdzielczości DPI za pomocą 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 wszystkich poprawek błędów w kompilatorze JIT programu .NET Core 2.1 znajduje się 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 są rezydowane 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ł, takich jak metoda , nie są skanowane i mogą potencjalnie zawierać Assembly.Load(Byte[]) niewykrywanego złośliwego oprogramowania. Począwszy od wersji .NET Framework 4.8 działającej w programie 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ę w .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 programie .NET Framework.

Klas podstawowych

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

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

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

// 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 umożliwiają generowanie nowych kluczy lub o określonym RSA.Create(Int32) DSA RSA 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 ma trzy nowe konstruktory z parametrem, który identyfikuje algorytm HMAC, który ma Rfc2898DeriveBytes HashAlgorithmName 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 pliku PFX może opcjonalnie ładować klucze prywatne bezpośrednio z pamięci, pomijając dysk twardy. Gdy nowa flaga jest określona w konstruktorze lub jednym z przeciążeń metody, klucze prywatne zostaną załadowane jako klucze X509KeyStorageFlags.EphemeralKeySet X509Certificate2 X509Certificate2.Import efemeracyjne. Dzięki temu klucze nie będą widoczne na dysku. Jednak:

  • Ponieważ klucze nie są utrwalane na dysku, certyfikaty załadowane za pomocą tej flagi 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 rozszerzeń, takie jak cert. GetRSAPrivateKey(). Właściwość X509Certificate2.PrivateKey nie działa.

  • Ponieważ starsza właściwość nie działa z certyfikatami, deweloperzy powinni wykonać rygorystyczne testy przed przełączeniem się na X509Certificate2.PrivateKey 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ących narzędziach. Jest to często przydatne w scenariuszach testowych.

Aby uzyskać więcej informacji i przykładów kodu, zobacz "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, klasa SignerInfo 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 zawiniętego strumienia otwartego po likwidować CryptoStream

Począwszy od .NET Framework 4.7.2, klasa ma dodatkowy konstruktor, który pozwala nie zamykać CryptoStream Dispose opakowanego strumienia. Aby pozostawić otwarty opakowany strumień po zlikwidowaniu CryptoStream wystąpienia, wywołaj nowy CryptoStream konstruktor 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 deflatestream

Począwszy od .NET Framework 4.7.2, implementacja operacji dekompresji w klasie została zmieniona tak, aby domyślnie używać natywnych Windows DeflateStream API. Zwykle skutkuje to znaczną poprawę wydajności.

Obsługa dekompresji przy użyciu interfejsów API Windows 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> HashSet<T> i . Są one następujące:

Klasa zawiera nowe przeciążenia metod i 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ż ConcurrentDictionary<TKey,TValue> AddOrUpdate GetOrAdd 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 ustawiawczym, opartym na interfejsie i konstruktorze w procedurach obsługi i modułach, wystąpieniach strony i kontrolkach użytkownika ASP.NET projektów aplikacji internetowych.

  • Użyj iniekcji opartej na programie ustawiaczym i interfejsie w procedurach obsługi i modułach, wystąpieniach strony 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 System.Web.SameSiteMode członkiem wyliczenia. Jeśli jej wartość to SameSiteMode.Strict lub , ASP.NET dodaje atrybut do SameSiteMode.Lax SameSite nagłówka set-cookie. Obsługa SameSite dotyczy obiektów, a także plików HttpCookie FormsAuthentication cookie i System.Web.SessionState .

Obiekt SameSite można ustawić HttpCookie w 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 FormsAuthentication plików cookie i , System.Web.SessionState 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 dodało 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 "Authentication" (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. Gdy ta metoda jest używana, 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 SqlAuthenticationMethod.ActiveDirectoryPassword opcje SqlAuthenticationMethod.ActiveDirectoryIntegrated i . Oba te elementy są częścią nieinterakcyjnego protokołu ADAL,który nie obsługuje uwierzytelniania wieloskładnikowego. Dzięki nowej opcji łączność usługi SQL obsługuje uwierzytelnianie wieloskładnikowe oraz istniejące metody uwierzytelniania (hasła i uwierzytelnianie zintegrowane), dzięki którym użytkownicy mogą interaktywnie wprowadzać hasła użytkowników bez utrwalania haseł w ramach parametrów SqlAuthenticationMethod.ActiveDirectoryInteractive 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ć Always Encrypted enklawy, .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, która zapewnia funkcjonalność dostawcy System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider 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 przepływu danych opartych na Always Encrypted jest:

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

  2. Po atestowanej enklawie 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 szyfrowania.

Windows Presentation Foundation

Znajdowanie zasobów ResourceDictionaries według źródła

Począwszy od .NET Framework 4.7.2, asystent diagnostyczny może zlokalizować plik utworzony na podstawie danego ResourceDictionaries źródłowego kodu URI. (Ta funkcja jest do użycia 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 znaczniki, 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 że jest VisualDiagnostics włączona i ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO zmienna ś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życia przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Za każdym razem, gdy zmiana zostanie w wywłaszczynie obiektu , WPF automatycznie znajdzie wszystkie odwołania ResourceDictionary DynamicResource, na które może mieć wpływ 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, aby znaleźć wszystkie obiekty, których właściwość odwołuje się do słownika (bezpośrednio lub pośrednio Resources za pośrednictwem ResourceDictionary.MergedDictionaries właściwości ). Trzy nowe metody statyczne zaimplementowane w klasie , po jednej dla każdego typu podstawowego, który ma System.Windows.Diagnostics.ResourceDictionaryDiagnostics Resources właściwość, obsługują ten krok:

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

Znajdowanie odwołań StaticResource

Asystent diagnostyczny może teraz otrzymywać powiadomienia za każdym razem, gdy odwołanie StaticResource zostanie rozwiązane. (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 opisują rozwiązanie i wskazują obiekt i właściwość, które hostują odwołanie StaticResourceResolvedEventArgs StaticResource oraz klucz ResourceDictionary 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 dostępu jest ignorowany), chyba że jest add VisualDiagnostics włączona i ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO zmienna środowiskowa jest ustawiona.

ClickOnce

Wszystkie 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 zostanie znaleziony 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 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 obszarem zainteresowania .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 programie .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 systemach .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 są również wdrożone w systemie docelowym). Aby uzyskać więcej informacji, zobacz "Obsługa BCL .NET Standard 2.0" we wpisie w blogu .NET Framework 4.7.1 Runtime and Compiler Features (Obsługa biblioteki BCL 2.0 środowiska uruchomieniowego i funkcji kompilatora).

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 tworzenia sekcji konfiguracji całkowicie od podstaw. Bez konstruktorów konfiguracji .config są statyczne, a ich ustawienia są definiowane jakiś czas przed jej rozpoczęciem.

Aby utworzyć niestandardowego konstruktora konfiguracji, należy utworzyć konstruktora z klasy abstrakcyjnej i ConfigurationBuilder zastąpić jego i ConfigurationBuilder.ProcessConfigurationSection ConfigurationBuilder.ProcessRawXml . Konstruktory można również definiować w .config pliku. Aby uzyskać więcej informacji, zobacz sekcję "Konstruktorzy konfiguracji" we wpisie w blogu .NET Framework 4.7.1 ASP.NET i Configuration Features.

Wykrywanie funkcji w czasie rzeczywistym

Klasa udostępnia mechanizm określania, czy wstępnie zdefiniowana funkcja jest obsługiwana w danej implementacji .NET w czasie kompilacji System.Runtime.CompilerServices.RuntimeFeature lub 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 wykonywania aplikacja może wywołać metodę RuntimeFeature.IsSupported przed emitem kodu w czasie wykonywania. 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, a skojarzone z nim typy ogólne są oznaczone jako System.ValueTuple serializowalne, co umożliwia serializację binarną. Powinno to ułatwić migrowanie typów krotek, takich jak i , w celu ułatwienia Tuple<T1,T2,T3> Tuple<T1,T2,T3,T4> 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 System.Runtime.CompilerServices.IsReadOnlyAttribute dodaje . Ten atrybut jest używany przez kompilatory języka do oznaczania elementów członkowskich, które mają zwracane typy lub parametry typu ref tylko do odczytu. Aby uzyskać więcej informacji, zobacz wpis w blogu "Compiler -- Support for ReadOnlyReferences" (Kompilator — obsługa elementów ReadOnlyReferences) w .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 .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 tła jest czyszczenie SOH. W związku z tym aplikacje, które dzielą dużą liczbę alokacji loH, powinny zauważyć zmniejszenie liczby kłódek blokady alokacji i lepszą wydajność. Aby uzyskać więcej informacji, zobacz sekcję "Runtime -- GC Performance Improvements" (Środowisko uruchomieniowe — ulepszenia wydajności gc) we wpisie w blogu .NET Framework 4.7.1 Runtime and Compiler Features (Funkcje środowiska uruchomieniowego i kompilatora w wersji 4.7.1).

Sieć

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

W .NET Framework 4.7 i starszych wersjach właściwość obsługuje Message.HashAlgorithm tylko wartości HashAlgorithm.Md5 i HashAlgorithm.Sha . Począwszy od .NET Framework 4.7.1, HashAlgorithm.Sha256 , i są również HashAlgorithm.Sha384 HashAlgorithm.Sha512 obsługiwane. To, czy ta wartość jest faktycznie używana, zależy od usługi MSMQ, ponieważ samo wystąpienie nie używa skrótów, ale po prostu przekazuje wartości Message 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 selektywnie przepływa tylko HttpContext . Począwszy od .NET Framework 4.7.1, metoda umożliwia również modułom HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) 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 "Funkcja kroku wykonywania ASP.NET" w blogu .NET Framework 4.7.1 ASP.NET and Configuration Features (Funkcje ASP.NET i konfiguracji).

ASP.NET Analizowanie httpCookie

.NET Framework 4.7.1 zawiera nową metodę , która zapewnia standardowy sposób tworzenia obiektu z ciągu i dokładnego przypisywania wartości plików cookie, takich jak data wygaśnięcia HttpCookie.TryParse HttpCookie 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 konfiguracji i konfiguracji w programie .NET Framework 4.7.1).

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 wersji .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 dodano metody do klas i , aby umożliwić obiektowi reprezentowanie ImportParameters(ECParameters) ECDsa już ECDiffieHellman ustanowionego klucza. Dodano ExportParameters(Boolean) również metodę eksportowania klucza przy użyciu jawnych parametrów krzywej.

.NET Framework 4.7 dodano również obsługę dodatkowych krzywych (w tym zestawu krzywych Brainpool) i dodano wstępnie zdefiniowane definicje ułatwiające tworzenie za pomocą nowych metod i metod Create Create 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 serializuje znaki kontrolne w sposób nieuczciwości ze DataContractJsonSerializer standardem ECMAScript 6. To zachowanie jest domyślnie włączone dla aplikacji docelowych .NET Framework 4.7 i jest funkcją zgody dla aplikacji, które są uruchomione w programie .NET Framework 4.7, ale są celem poprzedniej wersji .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 jest używany przez składniki i 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.Net.Security.SslStream 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łą ilość dostępnej całkowitej fizycznej pamięci RAM. Gdy te limity są bliskie, powiadomienia są wysyłane. W przypadku niektórych aplikacji powiadomienia są wysyłane 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 "Limit pamięci". Domyślnie program ASP.NET przycinanie pamięci podręcznej obiektów i okresowe wywołanie, gdy limit procesów bajtów prywatnych GC.Collect jest bliski. W przypadku niektórych aplikacji częstotliwość wywołań lub przycinana pamięć podręczna GC.Collect 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 W programie Communication Foundation (WCF) dodano 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, usługa 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 na rezygnację. 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, zwiększając w ten sposób 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ą sharedConnectionListener i DuplexChannelBinder.
  • Zwiększona niezawodność operacji serializacji podczas wywoływania FormatterServices.GetSerializableMembers(Type) metody .
  • Zwiększona niezawodność podczas usuwania waitera 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 wysokiej rozdzielczości DPI i dynamicznej obsługi DPI dla aplikacji Windows Forms. 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 konfigurowana przez zdefiniowanie <System.Windows.Forms.ConfigurationSection> sekcji 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 w formularzach Windows DPI).

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 możesz użyć stosu dotykowego/pisaka opartego na komunikatach WM_POINTER zamiast Windows Ink Services Platform (WISP). Ta funkcja jest dostępna w .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję Zgodność aplikacji.

Nowa implementacja interfejsów API drukowania WPF

Interfejsy API drukowania WPF w klasie wywołują interfejs API Windows Print Document Package zamiast przestarzałego System.Printing.PrintQueue 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 na platformie 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) na 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 tekst komunikatu o błędzie w przypadku niepowodzenia ValidationAttribute.ErrorMessage 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 zasobów ma nazwę formularza , gdzie nazwa jest nazwą kultury w formacie DataAnnotation.Localization.{ }.resx languageCode - country/regionCode lub languageCode.

  4. Nazwa klucza zasobu jest ciągiem przypisanym do atrybutu, a jego wartością ValidationAttribute.ErrorMessage 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 interfejs do przechowywania ciągów lokalizacji w innym miejscu IStringLocalizerProvider 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 , , który dziedziczy z i umożliwia deweloperom implementowanie własnych modułów stanu sesji i dostawców asynchronicznego System.Web.SessionState.ISessionStateModule IHttpModule 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 , które mogą być używane do obsługi operacji IsSessionStateReadOnly IsSessionStateRequired 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 dostawców asynchronicznej 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 jest ograniczona do klasyfikacji znaków przez klasę oraz do typów i metod, które CharUnicodeInfo na nim polegają. Obejmują one klasę, metodę przeciążoną i klasy znaków rozpoznawane przez aparat StringInfo Char.GetUnicodeCategory .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 4.6.2 dodaje 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ą System.Security.Cryptography.DSACng klasę.

Zgodnie z najnowszymi zmianami w klasie w programie .NET Framework 4.6 i klasie w programie .NET Framework 4.6.1 abstrakcyjna klasa bazowa w programie RSA ECDsa .NET Framework 4.6.2 ma dodatkowe metody umożliwiające wywołującym korzystanie z tej funkcji bez DSA rzutowania. Możesz wywołać metodę DSACertificateExtensions.GetDSAPrivateKey rozszerzenia, 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ę DSACertificateExtensions.GetDSAPublicKey rozszerzenia 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 dotyczącej krzywej eliptycznej Diffie-Hellman Key Agreement 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 ECDiffieHellmanCng obiektu. 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, do klasy bazowej dodano następujące trzy metody, aby bardziej wyraźnie reprezentować te procedury KDF i ich ECDiffieHellman 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 utrwalonego klucza

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ływanie Aes.Create ).

Obsługa szyfrowania symetrycznego utrwalonego klucza istnieje dla algorytmów AES ( ) i AesCng 3DES TripleDESCng (). 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 dodaje obsługę do klasy dla metod SignedXml podpisu RSA-SHA256, RSA-SHA384 i RSA-SHA512 PKCS#1 oraz algorytmów szyfrowania referencyjnego SHA256, SHA384 i SHA512.

Wszystkie stałe URI są widoczne na SignedXml stronie :

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, 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, rejestracja nie jest SignatureDescription CryptoConfig już CryptoConfig konieczna.

Sqlclient

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

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

Gdy buforowanie połączeń jest włączone, a wystąpi limit czasu lub wystąpi inny błąd logowania, wyjątek jest buforowany, 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 usługą Azure SQL Databases, 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 usługą Azure SQL Databases nie powiodą się.

Dodanie nowego słowa kluczowego umożliwia wybranie okresu blokowania najlepiej PoolBlockingPeriod 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 uznawane za bazy danych usługi Azure SQL Databases:

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

W programie SQLClient wprowadzono dwa ulepszenia 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ść jest ustawiona na (która jest wartością domyślną), jeśli to samo zapytanie jest wywoływane wiele razy, klient pobiera metadane parametrów z SqlConnection.ColumnEncryptionQueryMetadataCacheEnabled true serwera tylko raz.

  • Wpisy klucza szyfrowania kolumn w pamięci podręcznej kluczy są teraz eksmisje 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ą .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 pliku <runtime> 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ć, czy klasa obsługuje wiele reguł korekty DataContractJsonSerializer dla jednej strefy czasowej. Jest to funkcja do wyboru. 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 używa typu zamiast typu do DataContractJsonSerializer TimeZoneInfo TimeZone deserializować dane daty i czasu. TimeZoneInfo obsługuje wiele reguł korekt, co umożliwia pracę z danymi historycznymi 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).

NetNamedPipeBinding best match

Program 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 wartości URI, która najlepiej pasuje do tego, który żądają. Jeśli to ustawienie aplikacji jest ustawione na wartość (wartość domyślna), klienci mogą próbować nawiązać połączenie z usługą nasłuchując na podstawie wartości URI, która jest podciągiem false NetNamedPipeBinding żądanego URI.

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

Uwaga

Klienci korzystający z usług find na podstawie adresu NetNamedPipeBinding 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 App.config lub Web.config klienta:

<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 wymagany jest protokół Ssl3, 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 ulepszone w następujących obszarach:

Sortowanie grup

Aplikacja, która używa obiektu do grupowania danych, może teraz jawnie CollectionView 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 lub zmienia wartość właściwości elementu biorących udział 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 i opisują sposób sortowania kolekcji GroupDescription.SortDescriptions GroupDescription.CustomSort grup wytwarzanych przez obiekt GroupDescription . Jest to analogiczne do sposobu, w jaki właściwości o identycznych nazwach opisują ListCollectionView sposób sortowania elementów danych.

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

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 koncentracji uwagi 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 platformy .NET Framework aplikacje 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ą WPF touch lub polegać na pod Windows myszy.

Dpi dla monitora

W celu obsługi ostatniej rozprzestrzeniania środowisk o wysokiej rozdzielczości DPI i hybrydowej dpi dla aplikacji WPF, WPF w wersji .NET Framework 4.6.2 zapewnia świadomość monitora. Zapoznaj się z przykładami i przewodnikiem dewelopera GitHub, aby uzyskać więcej informacji na temat sposobu włączania obsługi DPI przez aplikację WPF dla monitora.

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

W przypadku aplikacji działających w programie .NET Framework 4.6.2 można wyłączyć zmiany DPI dla monitora w aplikacjach WPF, dodając instrukcje konfiguracji do sekcji pliku konfiguracji aplikacji <runtime> 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 WF, która umożliwia 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 przypadku ponownego hostowania 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 starszych niż 4.6.2 funkcja IntelliSense projektanta WF jest uszkodzona, gdy klient ponownie skompilował projekt przepływu pracy z Visual Studio. Gdy kompilacja projektu przebiegnie pomyślnie, typy przepływów pracy nie znajdują się 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

Na maszynach z włączonym trybem zgodności ze standardem FIPS można teraz pomyślnie uruchomić 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 w trybie FIPS 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świetlą przepływy pracy, które zostały 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 dla przepływu pracy zapisanego po wywołaniu może spowodować DynamicUpdateServices.PrepareForUpdate następujące problemy:

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

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

ClickOnce

ClickOnce zaktualizowano 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 TLS 1.1 i 1.2 nie są wymagane żadne dodatkowe kroki w aplikacji ClickOnce aplikacji.

Konwertowanie aplikacji Windows Forms i WPF na aplikacje platformy UWP

Windows oferuje teraz możliwości, które mogą przenieść istniejące aplikacje klasyczne Windows, w tym aplikacje WPF i Windows Forms, do platformy uniwersalnej Windows Platform (UWP). Ta technologia działa jak most, umożliwiając stopniowe migrowanie istniejącej bazy kodu na platformę UWP, dzięki czemu aplikacja jest przenoszowana do wszystkich Windows 10 platformy uniwersalnej systemu Windows.

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, proces pełnego zaufania można usunąć, a nowa aplikacja platformy UWP będzie dostępna dla wszystkich Windows 10 aplikacji.

Ulepszenia debugowania

W programie .NET Framework 4.6.2 ulepszono interfejs API debugowania nieza zdalnego w celu przeprowadzenia 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 NullReferenceException null . W celu obsługi tego scenariusza następujące interfejsy API zostały dodane do nieza zarządzaniem interfejsem API debugowania.

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 dodano 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) są problemem. 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 zawartych 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 chronionych sprzętowo kluczy

ADO.NET obsługuje teraz natywnie przechowywanie Always Encrypted głównym kolumn 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 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ć dołączane ciągi połączenia, aby wskazać, że łączyła się z zawsze won "MultisubnetFailover=true" grupą dostępności. Bez ustawienia słowa kluczowego połączenia na , aplikacja może doświadczyć limitu czasu podczas nawiązywania połączenia z true zawsze won grupą dostępności. 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 tywnych grup dostępności, zobacz SqlClient Support for High Availability, Disaster Recovery(Obsługa klienta SqlClient na rzecz wysokiej dostępności i odzyskiwania po awarii).

Windows Presentation Foundation (WPF)

Windows Presentation Foundation zawiera szereg ulepszeń i zmian.

Zwiększona wydajność

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

Ulepszenia sprawdzania pisowni

Moduł sprawdzania pisowni w WPF został zaktualizowany na platformie Windows 8.1 i nowszych wersjach, aby wykorzystać obsługę systemu operacyjnego do sprawdzania pisowni w dodatkowych językach. Nie ma żadnych zmian w funkcjonalności Windows wcześniejszych niż Windows 8.1.

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

  • xml:lang, jeśli jest obecny.

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

  • Bieżąca kultura wątku.

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 niestandardowe słowniki, które są rejestrowane globalnie. Ta funkcja jest dostępna oprócz możliwości rejestrowania ich dla per-control.

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

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

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

  • Każdy wiersz powinien składać się z wyrazu (na listach dodanych i wykluczonych wyrazów) lub pary autokorekta ze słowami oddzielonych pionowym paskiem ("|") (na liście wyrazów autokorekta).

  • 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 niestandardowe słowniki 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 repozytorium. Pomóż nam ulepszyć nasze przykłady, wysyłając do nas żądanie ściągnięcie lub otwierając GitHub problem.

Rozszerzenia DirectX

WPF zawiera pakiet NuGet, który udostępnia nowe implementacje, które ułatwiają współdziałanie z zawartością D3DImage DX10 i Dx11. Kod dla tego pakietu został typu open source i jest dostępnyna 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 guid transakcji identyfikator identyfikator identyfikator do nowego Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) przeciążenia . Jeśli ta operacja powiedzie się, istnieją ograniczenia dotyczące możliwości transakcji. Po transakcje inne niż MSDTC jest enlisted, następujące metody zgłaszać, ponieważ te metody wymagają TransactionPromotionException promocji do MSDTC:

Po transakcje inne niż MSDTC transakcji jest wyewoluowany, musi być używany dla przyszłych trwałych enlistments za pomocą protokołów, które definiuje. Wartość Guid właściwości transakcji można uzyskać za pomocą właściwości PromoterType . Gdy transakcja podniesie się, transakcję podniesie Byte tablicę, która reprezentuje token o podniesień. Aplikacja może uzyskać tokenu o wartości spoza msdtc promowane transakcji za pomocą GetPromotedToken metody.

Użytkownicy nowego Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) przeciążenia muszą postępować zgodnie z określoną sekwencją wywołań, aby operacja podsyłania 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 coraz częściej zestawy są kompilowane w pamięci przez program Roslyn. 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 w celu wykonywania zadań, takich jak pokrycie kodu lub analiza wydajności wiersz po wierszu. Interfejs ICorProfilerInfo7 zawiera teraz dwie nowe metody: ICorProfilerInfo7::GetInMemorySymbolsLength i 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ć lub serializować na dysku.

  • Lepsza instrumentacja za pomocą interfejsu ICorProfiler.

    Profileery używające 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 odwołuje 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, w szczególności przez dodanie nowych AssemblyRef rekordów , , , , i TypeRef TypeSpec MemberRef MemberSpec UserString . Ta zmiana sprawia, że możliwy jest 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 będzie kopiować 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 telefony, pliki mogą być bardzo duże w systemach komputerowych i wymagać znacznego czasu na ich skopiowanie.

Dzięki plikom 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 komputer A na maszynę B, i użyć interfejsów API dostępu do interfejsu debugowania, aby odczytać mapowanie il PDB źródłowy do IL i mapowanie IL do natywnego pliku PDB obrazu natywnego. Połączenie obu mapowań zapewnia mapowanie z źródła na natywne. Ponieważ plik PDB obrazu natywnego jest znacznie mniejszy niż wszystkie moduły i obrazy natywne, proces kopiowania z maszyny 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 mają zastosowanie do obu, a inne są specyficzne dla .NET Framework 4.6 lub .NET Core.

  • ASP.NET Core

    Program .NET 2015 zawiera ASP.NET Core, która stanowi implementację platformy .NET typu Lean do tworzenia nowoczesnych aplikacji opartych na chmurze. ASP.NET Core modularne, więc można uwzględnić w aplikacji tylko te funkcje, które są potrzebne. 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 nowych .NET Framework. Jednak aby utworzyć aplikację, która używa 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 Aktualizacje

    • 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, , który umożliwia asynchroniczne opróżnianie odpowiedzi przy użyciu obsługi HttpResponse.FlushAsync async/await 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żliwiła rozszerzalne, skoncentrowane na kodzie podejście do operacji na danych opartych na operacjach CRUD na stronach Web Forms i kontrolkach użytkownika. System powiązania modelu obsługuje teraz Task metody powiązania modelu zwracane przez funkcję . Ta funkcja Web Forms deweloperom uzyskiwanie korzyści ze skalowalności asynchronicznej z łatwością systemu powiązań danych podczas korzystania z nowszej wersji systemów ORM, w tym Entity Framework.

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

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

      W aplikacjach wartość .NET Framework 4.6 to true . W przypadku aplikacji uruchomionych w .NET Framework 4.6, które są kierowane do starszej wersji .NET Framework, jest to false 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 użytkownikom mniejsze opóźnienia ładowania stron internetowych. Strony internetowe (w przeciwieństwie do usług) korzystają najbardziej z protokołu HTTP/2, ponieważ protokół optymalizuje 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 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, musisz Windows 10 na ASP.NET.

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

      Aby zapewnić sposób używania funkcji PUSH_PROMISE w aplikacjach ASP.NET, do klasy dodano nową metodę z dwoma przeciążeniami i PushPromise(String) PushPromise(String, String, NameValueCollection) HttpResponse .

      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 na Windows) wykonają całą pracę. Nie musisz nic robić dla swoich użytkowników.

      Większość głównych przeglądarek obsługuje protokół HTTP/2,więc 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

      Firmy Microsoft i Google współpracowały 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 użyte przez przestępców do uzyskiwania 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 będą uczestniczyć w protokole, tak aby tokeny uwierzytelniania zostały zweryfikowane 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. Nie było to jednak obsługiwane przez ASP.NET ze względu na niektóre ASP.NET zależne od stabilnego kodu skrótu. W .NET Framework 4.6 są teraz obsługiwane algorytmy losowego wyznaczania wartości skrótu ciągu. Aby włączyć tę funkcję, użyj aspnet:UseRandomizedStringHashAlgorithm ustawienia konfiguracji.

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

    ADO .NET obsługuje teraz funkcję Always Encrypted dostępną w programie SQL Server 2016 Community Technology Preview 2 (CTP2). Dzięki Always Encrypted SQL Server może 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 klienckich).

  • 64-bitowy kompilator JIT dla kodu zarządzanego

    .NET Framework 4.6 zawiera nową wersję 64-bitowego kompilatora JIT (oryginalnie o nazwie RyuJIT). Nowy kompilator 64-bitowy zapewnia znaczne ulepszenia wydajności w 64-bitowym kompilatorze 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 jest kompilowana jako 64-bitowa lub AnyCPU i działa w 64-bitowym systemie operacyjnym. Mimo że 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ż funkcje przyspieszania sprzętowego SIMD w połączeniu z typami z obsługą simd w przestrzeni nazw, co może zapewniać dobrą System.Numerics wydajność.

  • Ulepszenia modułu ładującego zestawu

    Modułu ładującego zestawu używa teraz pamięci wydajniej, zwalniając zestawy 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 IReadOnlyCollection <T>

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

    • CultureInfo.CurrentCulture i CultureInfo.CurrentUICulture

      Właściwości CultureInfo.CurrentCulture i są teraz typu CultureInfo.CurrentUICulture odczyt-zapis, a nie tylko do odczytu. Jeśli przypiszesz nowy obiekt 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 CultureInfo Thread.CurrentThread.CurrentCulture użytkownika Thread.CurrentThread.CurrentUICulture zdefiniowana przez właściwości.

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

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

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

    • Typy obsługujące technikę SIMD

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

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

    • Aktualizacje kryptografii

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

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

      • Zestaw metod rozszerzeń dla certyfikatów X509 i , które zwracają implementację opartą na CNG, a nie implementację opartą na System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPublicKey(System.Security.Cryptography.X509Certificates.X509Certificate2) System.Security.Cryptography.X509Certificates.RSACertificateExtensions.GetRSAPrivateKey(System.Security.Cryptography.X509Certificates.X509Certificate2) capi, jeśli 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 wymaga kodu podobnego do poniższego w X509Certificate2 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 struktury w celu obsługi konwertowania wartości daty i czasu na DateTimeOffset lub z czasu systemu Unix:

    • Przełączniki zgodności

      Klasa dodaje nową funkcję zgodności, która umożliwia autorom bibliotek zapewnienie jednolitego mechanizmu rezygnacji dla nowych funkcji AppContext 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 w przypadku zmiany istniejącej funkcjonalności. Z drugiej strony istnieje już niejawna możliwość wyboru nowych funkcji.

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

      Aplikacja (lub biblioteka) może zadeklarować wartość przełącznika (która zawsze jest wartością) zdefiniowaną Boolean przez bibliotekę zależną. Przełącznik jest zawsze false niejawny. Włączenie przełącznika true . Jawne ustawienie przełącznika false na 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 wykonać na nim działania.

      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
      

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

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

      • Przełącz . biblioteka . switchname (nazwa przełącznika)

    • Zmiany wzorca asynchronicznego opartego na zadaniach (TAP)

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

      Klasa umożliwia reprezentowanie danych otoczenia, które są lokalne dla danego asynchronicznego przepływu System.Threading.AsyncLocal<T> 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 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ł AsyncLocal<T>.Value przejście kontekstu.

      Do wzorca asynchronicznego opartego na zadaniach (TAP) dodano trzy wygodne metody, , i , aby zwracać ukończone zadania Task.CompletedTask Task.FromCanceled w określonym Task.FromException stanie.

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

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

      Teraz można użyć klasy do dziennika komunikatów administracyjnych lub operacyjnych w dzienniku zdarzeń, oprócz wszystkich istniejących sesji EventSource 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 przy użyciu następujących funkcji:

      • 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 Write metoda 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 wartość TargetFrameworkAttribute .NET Framework 4.6. Aplikacje, które są kierowane do wcześniejszych wersji struktury, ale są uruchomione w programie .NET Framework 4.6, mogą zdecydować się na nowe zachowanie, dodając następujący wiersz do <runtime> sekcji app.config pliku:

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

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

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

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

    • Dotyk jest lepszy

      Raporty klientów dotyczące Połączenie, że dotknięcie 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 programie .NET Framework 4.6 obsługuje przezroczyste okna podrzędne w Windows 8.1 i powyższych. 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 HwndSourceParameters.UsesPerPixelTransparency właściwość na true wartość .

  • 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ść lub dodając następujący kod SslProtocols 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. Prefiks należy ustawić, dodając 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 true wartość :

        <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 sekcji appSettings app.config pliku:

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

    Wartość domyślna to 60 sekund. Jeśli ustawiono wartość 0, żądania poza kolejnością są natychmiast odrzucane z błędem value 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, jeśli zostanie odebrany komunikat operacji poza kolejnością i nie ma żadnych zakładek innych niż protokołu.

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

  • Transakcje

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

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

    Wartość domyślna to false.

  • Sieć

    • Ponowne użycie gniazda

      Windows 10 zawiera nowy algorytm sieci o wysokiej skalowalności, który umożliwia lepsze wykorzystanie zasobów komputera 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 ograniczać 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 powoduje usunięcie limitu 64 KB dla połączeń współbieżnych:

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

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

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

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

  • Zmiana rozmiaru w kontrolkach Windows Forms.

    Ta funkcja została rozszerzona w programie .NET Framework 4.6 w celu dołączyć typy , , i oraz prostokąt określony przez właściwość używaną podczas DomainUpDown NumericUpDown rysowania obiektu DataGridViewComboBoxColumn DataGridViewColumn ToolStripSplitButton Bounds UITypeEditor .

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

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

    .NET Core obsługuje głównie 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

Aplikacje platformy Windows platformie uniwersalnej systemu (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 funkcji .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 niezagodowego interfejsu API debugowania dodano wiele nowych interfejsów i wyliczeń. Więcej informacji można znaleźć w temacie Debugging (Unmanaged API Reference) (Debugowanie (nieza zarządzanie odwołanie do interfejsu API).

  • Pakiety .NET Framework open source

    Pakiety .NET Core, takie jak kolekcje niezmienne, interfejsy API SIMDi interfejsy API sieci, takie jak te, które znajdują się w przestrzeni nazw, są teraz dostępne jako pakiety typu open source w System.Net.Http 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 (Wprowadzeniedo programu .NET,strony głównej .NET) GitHub .

Co nowego w programie .NET Framework 4.5.2

  • Nowe interfejsy API dla ASP.NET mobilnych. Nowe metody i umożliwiają sprawdzanie i modyfikowanie nagłówków odpowiedzi oraz kodu stanu, gdy odpowiedź jest HttpResponse.AddOnSendingHeaders HttpResponseBase.AddOnSendingHeaders opróżniona do aplikacji klienckiej. Rozważ użycie tych metod zamiast zdarzeń i . Są PreSendRequestHeaders one bardziej wydajne i PreSendRequestContent 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. Ta metoda nie może być wywoływana poza ASP.NET domeną aplikacji zarządzanej.

    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, takie jak (które zrzucą wyjątki, jeśli HttpResponse.StatusCode nagłówki zostały zapisane), zostaną pomyślnie wywołania.

  • Zmiana rozmiaru w kontrolkach Windows Forms. 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 element na w pliku konfiguracji EnableWindowsFormsHighDpiAutoResizing true aplikacji (app.config):

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

    Można to zrobić w tej samej domenie aplikacji i nie wymaga dodatkowego kodu niezamażnego do interakcji z MSDTC w celu przeprowadzenia promocji. Nową metodę można wywołać tylko wtedy, gdy istnieje zaległe wywołanie metody z metody zaimplementowanej przez podyscytowanie. System.Transactions IPromotableSinglePhaseNotification Promote

  • 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 zał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 ICorProfiler interfejsów API.

  • Ulepszenia debugowania. Następujące nowe nieza niezaderowowane 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 śledzenie zdarzeń poza procesem 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 element Transaction.EnlistPromotableSinglePhase w odpowiedzi na metodę ITransactionPromoter.Promote . Pyta o System.Transactions podniesieć transakcji do transakcji MSDTC i "konwersji" promowane enlistment do trwałej enlistment. Po pomyślnym zakończeniu tej metody interfejs nie będzie już przywołyty przez usługę , a wszystkie przyszłe powiadomienia będą wysyłane IPromotableSinglePhaseNotification System.Transactions do dostarczonego ISinglePhaseNotification interfejsu. Rejestracja, których dotyczy, musi działać jako trwałe rejestracji, obsługi rejestrowania transakcji i odzyskiwania. Aby uzyskać Transaction.EnlistDurable szczegółowe informacje, zapoznaj się z tematem . Ponadto lista musi obsługiwać program ISinglePhaseNotification . Tę metodę można wywołać tylko podczas przetwarzania ITransactionPromoter.Promote wywołania. Jeśli tak nie jest, jest TransactionException zgłaszany 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 Windows Runtime 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 środowiska uruchomieniowego Windows runtime (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 biblioteki klas przenośnych.

    Aby uzyskać więcej informacji na temat tych zmian, zobacz Portable Class Library.

  • Zestaw .NET Framework zawiera teraz dokumentację usługi .NET Native, która jest technologią prekompilowania do kompilowania 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 aplikacji .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 formularzy Windows są następujące:

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

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

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

Ulepszenia debugowania aplikacji .NET Framework w programie 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 aplikacji zarządzanych na komputery, 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 wykonać program logiczny. 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ą obecnie 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 dla Windows środowiska uruchomieniowego. W Windows 8.1 wyjątki, które wynikają z aplikacji ze sklepu 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 .NET Framework 4.5.1.

Począwszy od Visual Studio 2013, możesz użyć narzędzia optymalizacji zarządzanego profilu z przewodnikiem (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 for Visual Studio 2013 Release Notes.

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.

  • Podzestaw mef, który można użyć podczas tworzenia aplikacji ze sklepu Windows 8.x. Ten podzestaw jest dostępny jako pakiet do pobrania z NuGet Gallery. 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 .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 profilu zarządzanego). Począwszy od Visual Studio 2013, możesz używać Mpgo.exe do optymalizowania Windows 8.x ze Sklepu, 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ść, większą 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 What's New for Parallelism in .NET Framework 4.5 (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 programy 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 System.Net.Http przestrzenie System.Net.Http.Headers nazw i .

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

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 TcpListener i .

Windows Presentation Foundation (WPF)

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

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

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

  • Nowe funkcje dla VirtualizingPanel klas Dispatcher i .

  • Zwiększona wydajność podczas wyświetlania dużych zestawów pogrupowanych danych oraz 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 implementujące interfejs oraz pobieranie informacji o powiązaniach ICustomTypeProvider 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 dla 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 celu zmniejszenia prawdopodobieństwa, że trzeba będzie ręcznie skonfigurować limity przydziału dla XmlDictionaryReaderQuotas 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 za Internet Information Services (IIS).

  • Możliwość generowania metadanych w pojedynczym dokumencie WSDL przez dołączenie ?singleWSDL do 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 programie 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 wersji .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, aby obejmowały:

    • 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 State , i Transition .

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

    • Ulepszone możliwości wyszukiwania przepływu pracy w Visual Studio, w tym szybkie wyszukiwanie i 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 konspektu 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 WorkflowIdentity klasa, 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 aplikacji ze sklepu Windows 8.x i został omówiony w przeglądzie.

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) jako docelowe. 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 Portable Class Library.

Zobacz też