Udostępnij za pośrednictwem


Co nowego w programie .NET Framework

Notatka

Program .NET Framework jest serwisowany niezależnie od aktualizacji systemu Windows z poprawkami błędów zabezpieczeń i niezawodności. Ogólnie rzecz biorąc, aktualizacje zabezpieczeń są wydawane kwartalnie. Program .NET Framework będzie nadal dołączany do systemu Windows bez planów jego usunięcia. Nie musisz migrować aplikacji .NET Framework, ale w przypadku nowego programowania użyj .NET 8 lub nowszej.

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

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

Notatka

Zespół programu .NET Framework udostępnia również funkcje poza pasmem, korzystając z narzędzia NuGet, w celu rozszerzenia obsługi platformy i wprowadzenia nowych funkcji, takich jak kolekcje niezmienne i typy wektorów z obsługą simD. Aby uzyskać więcej informacji, zobacz dodatkowe biblioteki klas i interfejsy API oraz .NET Framework i wydania poza pasmem. Zobacz pełną listę pakietów NuGet dla programu .NET Framework.

Wprowadzenie do programu .NET Framework 4.8.1

Program .NET Framework 4.8.1 jest oparty na poprzednich wersjach programu .NET Framework 4.x, dodając wiele nowych poprawek i kilka nowych funkcji, zachowując jednocześnie bardzo stabilny produkt.

Pobierz i zainstaluj program .NET Framework 4.8.1

Program .NET Framework 4.8.1 można pobrać z następujących lokalizacji:

Program .NET Framework 4.8 można zainstalować w systemie Windows 11, Windows 10 w wersji 21H2, Windows 10 w wersji 21H1, Windows 10 w wersji 20H2 i odpowiednich platformach serwera począwszy od systemu Windows Server 2022. Program .NET Framework 4.8.1 można zainstalować przy użyciu instalatora internetowego lub instalatora offline. Zalecanym sposobem dla większości użytkowników jest użycie instalatora internetowego.

Możesz obsługiwać .NET Framework 4.8.1 w programie Visual Studio 2022 w wersji 17.3 lub nowszej, instalując .NET Framework 4.8.1 Developer Pack.

Co nowego w programie .NET Framework 4.8.1

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

Ulepszona dostępność, która umożliwia aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technologii asystacyjnych, jest głównym celem programu .NET Framework 4.8.1. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w programie .NET Framework 4.8.1, zobacz Co nowego w ułatwieniach dostępu w programie .NET Framework.

Program .NET Framework 4.8.1 dodaje natywną obsługę architektury Arm64 do rodziny .NET Framework. W związku z tym inwestycje w rozległy ekosystem aplikacji i bibliotek programu .NET Framework mogą teraz korzystać z zalet uruchamiania obciążeń natywnie w usłudze Arm64 — a mianowicie lepszej wydajności w porównaniu z uruchomionym kodem x64 emulowanym w usłudze Arm64.

Firma Microsoft zobowiązuje się do udostępniania produktów i platform, które dostępne dla wszystkich. Program .NET Framework 4.8.1 oferuje dwie platformy deweloperskie interfejsu użytkownika systemu Windows, z których obie zapewniają deweloperom pomoc techniczną niezbędną do tworzenia dostępnych aplikacji. W ciągu ostatnich kilku wersji zarówno Windows Forms, jak i WPF dodali nowe funkcje i rozwiązali liczne problemy z niezawodnością związane z ułatwieniami dostępu. Możesz przeczytać więcej o nowościach i poprawkach w każdej wersji, odwiedzając Nowości w ułatwieniach dostępu w .NET Framework.

W tej wersji zarówno Windows Forms, jak i WPF wprowadziły ulepszenia obsługi etykietek narzędzi, aby były bardziej dostępne. W obu przypadkach etykietki narzędzi są teraz zgodne z wytycznymi określonymi w zawartości WCAG2.1 na temat aktywowania lub koncentracji uwagi wskazówek. Wymagania dotyczące etykietek narzędzi są następujące:

  • Podpowiedzi muszą być wyświetlane za pomocą wskaźnika myszy lub nawigacji za pomocą klawiatury do elementu sterującego.
  • Etykietki narzędzi powinny być odrzucane. Oznacza to, że proste polecenie klawiatury, takie jak Esc, powinno odrzucić etykietkę narzędzia.
  • Dymki powinny umożliwiać najechanie kursorem. Użytkownicy powinni mieć możliwość umieszczania kursora myszy na etykietce narzędzia. Dzięki temu scenariusze, takie jak używanie lupy, mogą odczytywać etykietkę narzędzia dla użytkowników o niskiej wydajności.
  • Etykietki narzędzi powinny być trwałe. Etykietki narzędzi nie powinny automatycznie zniknąć po upływie określonego czasu. Zamiast tego etykietki narzędzi powinny zostać zamknięte po tym, jak użytkownik przeniesie mysz do innego elementu sterującego, lub za pomocą polecenia klawiatury.

W formularzach systemu Windows ta obsługa jest dostępna tylko w systemach operacyjnych Windows 11 lub nowszych. Windows Forms to cienka, zarządzana otoka interfejsu API systemu Windows, a nowe zachowanie etykietki narzędzi stało się dostępne tylko w systemie Windows 11. WPF nie ma zależności wersji systemu operacyjnego dla dostępnych podpowiedzi.

WPF zaimplementował większość wymagań dotyczących podpowiedzi zgodnych ze standardem WCAG2.1 w programie .NET Framework 4.8. W tej wersji WPF poprawiono doświadczenie użytkownika, zapewniając, że dymek pomocniczy w bieżącym oknie można łatwo zamknąć za pomocą klawisza Esc, klawisza Ctrl (samodzielnie) lub kombinacji klawiszy Ctrl+Shift+F10. Zakres klucza ucieczki został zmniejszony w tej wersji, aby zastosować go tylko do bieżącego okna. Wcześniej zastosowano ją do dowolnej otwartej etykietki narzędzia w aplikacji.

Windows Forms był pierwszym stosem interfejsu użytkownika systemu Windows utworzonym dla programu .NET Framework. W związku z tym została ona pierwotnie utworzona w celu korzystania ze starszej technologii ułatwień dostępu, która nie spełnia bieżących wymagań dotyczących ułatwień dostępu. W tej wersji formularze systemu Windows rozwiązały wiele problemów. Aby uzyskać pełną listę zmian związanych z ułatwieniami dostępu, odwiedź stronę Co nowego w ułatwieniach dostępu w programie .NET Framework.

Najważniejsze ulepszenia formularzy systemu Windows w programie .NET Framework 4.8.1 to:

  • obsługa wzorca tekstu— Windows Forms dodano obsługę wzorca tekstu UIA. Ten wzorzec umożliwia technologiom wspomagającym nawigowanie po zawartości kontrolki TextBox lub podobnych kontrolek tekstowych znak po znaku. Umożliwia wybranie tekstu w kontrolce i zmianę oraz wstawianie nowego tekstu na kursor. Formularze systemu Windows dodały tę obsługę dla komórek TextBox, DataGridView, kontrolek ComboBox i nie tylko.

  • Rozwiązywanie problemów z kontrastem — w kilku kontrolkach formularze systemu Windows zmieniły współczynnik kontrastu prostokątów zaznaczenia, aby był ciemniejszy i bardziej widoczny.

  • Rozwiązano kilka problemów z kontrolką DataGridView:

    • Nazwy pasków przewijania zostały zaktualizowane tak, aby były spójne.
    • Narrator może teraz skupić się na pustych komórkach DataGridView.
    • Deweloperzy mogą ustawić zlokalizowaną właściwość typu kontrolki dla komórek Custom DataGridView.
    • Kolor łącza dla komórek DataGridViewLink został zaktualizowany w celu lepszego kontrastu z tłem.

Wprowadzenie do programu .NET Framework 4.8

Program .NET Framework 4.8 jest oparty na poprzednich wersjach programu .NET Framework 4.x, dodając wiele nowych poprawek i kilka nowych funkcji, jednocześnie pozostając bardzo stabilnym produktem.

Pobierz i zainstaluj program .NET Framework 4.8

Program .NET Framework 4.8 można pobrać z następujących lokalizacji:

Program .NET Framework 4.8 można zainstalować w systemach Windows 10, Windows 8.1, Windows 7 z dodatkiem SP1 i odpowiednich platformach serwerów, począwszy od systemu Windows Server 2008 R2 z dodatkiem SP1. Program .NET Framework 4.8 można zainstalować przy użyciu instalatora internetowego lub instalatora offline. Zalecanym sposobem dla większości użytkowników jest użycie instalatora internetowego.

Możesz używać .NET Framework 4.8 w programie Visual Studio 2012 lub nowszym, instalując .NET Framework 4.8 Developer Pack.

Co nowego w programie .NET Framework 4.8

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

Ulepszona dostępność, która umożliwia aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technologii asystacyjnych, nadal jest głównym celem programu .NET Framework 4.8. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w programie .NET Framework 4.8, zobacz Co nowego w ułatwieniach dostępu w programie .NET Framework.

Klasy bazowe

Zmniejszony wpływ FIPS na kryptografię. W poprzednich wersjach programu .NET Framework zarządzane klasy dostawców kryptograficznych, takie jak SHA256Managed zgłaszają CryptographicException, gdy systemowe biblioteki kryptograficzne są skonfigurowane w trybie FIPS. Te wyjątki są zgłaszane, ponieważ zarządzane wersje klas dostawców kryptograficznych, w przeciwieństwie do bibliotek kryptograficznych systemu, nie zostały poddane certyfikacji FIPS (Federal Information Processing Standards) 140-2. Ponieważ tylko nieliczni deweloperzy mają swoje maszyny programistyczne w trybie FIPS, wyjątki często pojawiają się w systemach produkcyjnych.

Domyślnie w aplikacjach opracowanych dla .NET Framework 4.8 następujące zarządzane klasy kryptografii nie zgłaszają już błędu CryptographicException w takich sytuacjach:

Zamiast tego te klasy przekierowują operacje kryptograficzne do biblioteki kryptograficznej systemu. Ta zmiana skutecznie usuwa potencjalnie mylącą różnicę między środowiskami deweloperskimi a środowiskami produkcyjnymi i sprawia, że składniki natywne i składniki zarządzane działają w ramach tych samych zasad kryptograficznych. Aplikacje 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 Zarządzane klasy kryptograficzne nie zgłaszają wyjątku CryptographyException w trybie FIPS.

Użycie zaktualizowanej wersji biblioteki ZLib

Począwszy od programu .NET Framework 4.5, zestaw clrcompression.dll używa ZLib, natywnej zewnętrznej biblioteki do kompresji danych w celu zapewnienia implementacji algorytmu deflate. Wersja programu .NET Framework 4.8 clrcompression.dll jest aktualizowana w celu używania biblioteki ZLib w wersji 1.2.11, która zawiera kilka kluczowych ulepszeń i poprawek.

Windows Communication Foundation (WCF)

Wprowadzenie do ServiceHealthBehavior

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

ServiceHealthBehavior jest zachowaniem usługi WCF, które rozszerza IServiceBehavior. Po dodaniu zachowania usługi do kolekcji ServiceDescription.Behaviors, wykonywane są następujące działania:

  • 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ółowe informacje dotyczące usługi, w tym stan usługi, liczby ograniczeń i pojemność, mogą być wyświetlane przy użyciu żądania HTTP/GET z ciągiem zapytania ?health. Łatwość dostępu do takich informacji jest ważna podczas rozwiązywania problemów z błędną usługą WCF.

Istnieją dwa sposoby udostępniania punktu końcowego stanu zdrowia i publikowania informacji o kondycji usługi WCF.

  • Za pomocą kodu. Na przykład:

    ServiceHost host = new ServiceHost(typeof(Service1),
                       new Uri("http://contoso:81/Service1"));
    ServiceHealthBehavior healthBehavior =
        host.Description.Behaviors.Find<ServiceHealthBehavior>();
    healthBehavior ??= new ServiceHealthBehavior();
    host.Description.Behaviors.Add(healthBehavior);
    
    Dim host As New ServiceHost(GetType(Service1),
                New Uri("http://contoso:81/Service1"))
    Dim healthBehavior As ServiceHealthBehavior =
       host.Description.Behaviors.Find(Of ServiceHealthBehavior)()
    If healthBehavior Is Nothing Then
       healthBehavior = New ServiceHealthBehavior()
    End If
    host.Description.Behaviors.Add(healthBehavior)
    
  • Za pomocą pliku konfiguracji. Na przykład:

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

Stan kondycji usługi można zbadać przy użyciu parametrów zapytania, takich jak OnServiceFailure, OnDispatcherFailure, OnListenerFailure, OnThrottlePercentExceeded), a dla każdego parametru zapytania można określić kod odpowiedzi HTTP. Jeśli kod odpowiedzi HTTP zostanie pominięty dla parametru zapytania, domyślnie jest używany 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.

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

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

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

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

    • W przeciwnym razie zwracana jest wartość 200.

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

Windows Presentation Foundation (WPF)

Ulepszenia DPI wysokiej rozdzielczości

W programie .NET Framework 4.8 WPF dodano obsługę rozpoznawania dpi Per-Monitor V2 i skalowania DPI Mixed-Mode. Zobacz Tworzenie aplikacji klasycznych o wysokiej rozdzielczości DPI w systemie Windows, aby uzyskać dodatkowe informacje na temat programowania w wysokiej rozdzielczości DPI.

Program .NET Framework 4.8 zwiększa obsługę hostowanych HWNDs i windows Forms we współpracy z aplikacjami High-DPI WPF na platformach, które obsługują skalowanie DPI Mixed-Mode (począwszy od aktualizacji systemu Windows 10 z kwietnia 2018 r.). Gdy hostowane elementy HWND lub Windows Forms są tworzone jako Mixed-Mode okna ze skalowaniem DPI przez wywołanie SetThreadDpiHostingBehavior i SetThreadDpiAwarenessContext, mogą być hostowane w aplikacji Per-Monitor V2 WPF i są odpowiednio rozmieszczone i skalowane. Taka hostowana zawartość nie jest renderowana w natywnej rozdzielczości DPI; Zamiast tego system operacyjny skaluje hostowaną zawartość do odpowiedniego rozmiaru. Obsługa trybu rozpoznawania DPI dla Per-Monitor w wersji 2 umożliwia także osadzanie kontrolek WPF w natywnym oknie aplikacji obsługującej wysoką rozdzielczość DPI.

Aby włączyć obsługę Mixed-Mode skalowania o wysokiej rozdzielczości DPI, można ustawić następujące AppContext przełączniki w 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 programie .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 na platformie .NET Core 2.1. Wiele optymalizacji i wszystkie poprawki błędów wprowadzone w kompilatorze JIT platformy .NET Core 2.1 są zawarte w kompilatorze JIT programu .NET Framework 4.8.

Ulepszenia NGEN . Środowisko uruchomieniowe ulepszyło zarządzanie pamięcią dla obrazów Native Image Generator (NGEN), dzięki czemu dane mapowane z obrazów NGEN nie są rezydentami 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 antymalware dla wszystkich zestawów. W poprzednich wersjach programu .NET Framework środowisko uruchomieniowe skanuje wszystkie zestawy załadowane z dysku przy użyciu usługi Windows Defender lub oprogramowania chroniącego przed złośliwym kodem innej firmy. Jednak zestawy ładowane z innych źródeł, takich jak metoda Assembly.Load(Byte[]), nie są skanowane i mogą potencjalnie zawierać niewykryte złośliwe oprogramowanie. Począwszy od programu .NET Framework 4.8 działającego w systemie Windows 10, środowisko uruchomieniowe wyzwala skanowanie przez rozwiązania chroniące przed złośliwym kodem, które implementują interfejs skanowania ochrony przed złośliwym kodem (AMSI).

Co nowego w programie .NET Framework 4.7.2

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

Ciągłe skupienie na poprawie dostępności w .NET Framework 4.7.2 umożliwia aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technik wspomagających. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w programie .NET Framework 4.7.2, zobacz Co nowego w ułatwieniach dostępu w programie .NET Framework.

Klasy bazowe

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

Nowe przeciążenia metod RSA.Create i DSA.Create

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

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

kodem takim jak:

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

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

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

Konstruktory Rfc2898DeriveBytes akceptują nazwę algorytmu skrótu

Klasa Rfc2898DeriveBytes ma trzy nowe konstruktory z parametrem HashAlgorithmName, który identyfikuje algorytm HMAC do użycia podczas wyprowadzania kluczy. Zamiast używać algorytmu SHA-1, deweloperzy powinni używać algorytmu HMAC opartego na algorytmie SHA-2, takiego 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 efemerycznych

Importowanie pliku PFX może opcjonalnie ładować klucze prywatne bezpośrednio z pamięci, omijając dysk twardy. Gdy nowa flaga X509KeyStorageFlags.EphemeralKeySet jest zdefiniowana w konstruktorze X509Certificate2 lub jednej z wersji metody X509Certificate2.Import, klucze prywatne zostaną załadowane jako tymczasowe klucze. Uniemożliwia to widoczność kluczy na dysku. Jednak:

  • Ponieważ klucze nie są zapisywane na dysku, certyfikaty ładowane z tą flagą nie są odpowiednie do dodania do X509Store.

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

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

Programowe generowanie żądań certyfikacji PKCS#10 i certyfikatów klucza publicznego X.509

Począwszy od programu .NET Framework 4.7.2, obciążenia mogą generować żądania podpisywania certyfikatów (CSR), co pozwala na przygotowanie 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 "Programmatic creation of PKCS#10 certification signing requests and X.509 public key certificates" (Programowe tworzenie żądań podpisywania certyfikatów PKCS#10 i certyfikatów kluczy publicznych X.509) w blogu platformy .NET .

Nowi członkowie SignerInfo

Począwszy od programu .NET Framework 4.7.2, klasa SignerInfo udostępnia więcej informacji o podpisie. Wartość właściwości System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm można pobrać, aby określić algorytm podpisu cyfrowego używany przez podpisującego. SignerInfo.GetSignature można wywołać, aby uzyskać kopię podpisu kryptograficznego dla tego sygnatariusza.

Pozostawienie zawiniętego strumienia otwartym po usunięciu obiektu CryptoStream

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

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

Zmiany w dekompresji w DeflateStream

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

Obsługa dekompresji przy użyciu interfejsów API systemu Windows jest domyślnie włączona dla aplikacji przeznaczonych dla programu .NET Framework 4.7.2. Aplikacje przeznaczone dla wcześniejszych wersji programu .NET Framework, ale działają w programie .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

Program .NET Framework 4.7.2 dodaje szereg nowych interfejsów API do typów SortedSet<T> i HashSet<T>. Należą do nich:

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

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

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

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

ASP.NET

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

wstrzykiwanie zależności (DI) rozdziela obiekty i ich zależności, aby kod obiektu nie musiał już zostać zmieniony, ponieważ zależność uległa zmianie. Podczas tworzenia aplikacji ASP.NET przeznaczonych dla programu .NET Framework 4.7.2 można wykonywać następujące czynności:

  • Użyj iniekcji opartej na interfejsie i konstruktorze opartej na zestawie w programach obsługi i modułach , wystąpień strony i kontrolki użytkownika projektów aplikacji internetowych ASP.NET.

  • Użyj iniekcji bazującej na metodzie setter i opartej na interfejsie w obsługach i modułach, wystąpienia stronoraz kontrolek użytkownika projektów witryn sieci Web ASP.NET.

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

obsługa plików cookie tej samej witryny

SameSite uniemożliwia przeglądarce wysyłanie pliku cookie wraz z żądaniem z innej witryny. .NET Framework 4.7.2 dodaje właściwość HttpCookie.SameSite, której wartość jest członkiem wyliczenia System.Web.SameSiteMode. Jeśli jego wartość jest SameSiteMode.Strict lub SameSiteMode.Lax, ASP.NET dodaje atrybut SameSite do nagłówka set-cookie. Obsługa SameSite dotyczy obiektów HttpCookie, jak również ciasteczek FormsAuthentication i System.Web.SessionState.

Możesz ustawić obiekt SameSite dla obiektu 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

Możesz również skonfigurować pliki cookie SameSite na poziomie aplikacji, modyfikując plik web.config:

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

Możesz dodać opcję SameSite dla plików cookie FormsAuthentication i System.Web.SessionState, modyfikując plik konfiguracyjny sieci.

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

Sieci

Implementacja właściwości programu HttpClientHandler

Program .NET Framework 4.7.1 dodał osiem właściwości do klasy System.Net.Http.HttpClientHandler. Jednak dwóch rzuciło PlatformNotSupportedException. Program .NET Framework 4.7.2 udostępnia teraz implementację tych właściwości. Oto właściwości:

SQLClient

Obsługa Uwierzytelniania Uniwersalnego usługi Azure Active Directory i Uwierzytelniania Wieloskładnikowego

Rosnące wymagania dotyczące zgodności i zabezpieczeń wymagają, aby wielu klientów używało uwierzytelniania wieloskładnikowego (MFA). Ponadto bieżące najlepsze rozwiązania odradzają dołączanie haseł użytkowników bezpośrednio w parametrach połączenia. Aby zapewnić obsługę tych zmian, program .NET Framework 4.7.2 rozszerza parametry połączenia SQLClient poprzez dodanie nowej wartości "Active Directory Interactive" do istniejącego słowa kluczowego "Authentication", aby wspierać uwierzytelnianie wieloskładnikowe i uwierzytelnianie usługi Azure AD. Nowa metoda interaktywna obsługuje natywnych i federacyjnych użytkowników usługi Azure AD, a także użytkowników-gości usługi Azure AD. W przypadku użycia tej metody uwierzytelnianie wieloskładnikowe nałożone przez usługę Azure AD jest obsługiwane w przypadku baz danych SQL. 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ługiwała tylko opcje SqlAuthenticationMethod.ActiveDirectoryPassword i SqlAuthenticationMethod.ActiveDirectoryIntegrated. Oba te elementy są częścią nieinterakcyjnego protokołu ADAL, który nie obsługuje uwierzytelniania wieloskładnikowego. Dzięki nowej opcji SqlAuthenticationMethod.ActiveDirectoryInteractive łączność SQL obsługuje uwierzytelnianie wieloskładnikowe, a także istniejące metody uwierzytelniania (hasło i zintegrowane uwierzytelnianie), co umożliwia użytkownikom interaktywne wprowadzanie haseł użytkowników bez utrwalania haseł w parametrach połączenia.

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

obsługa funkcji Always Encrypted w wersji 2

Platforma NET Framework 4.7.2 dodaje obsługę funkcji Always Encrypted opartej na enklawie. Oryginalna wersja funkcji Always Encrypted to technologia szyfrowania po stronie klienta, w której klucze szyfrowania nigdy nie opuszczają klienta. W Always Encrypted opartej na enklawie klient może opcjonalnie wysyłać klucze szyfrowania do bezpiecznej enklawy, która jest bezpieczną jednostką obliczeniową, uznawaną za część SQL Server, z którą kod SQL Server nie może manipulować. Aby obsługiwać funkcję Always Encrypted z wykorzystaniem enklaw, .NET Framework 4.7.2 dodaje następujące typy i składniki do przestrzeni nazw System.Data.SqlClient:

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

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

Podstawowy przepływ funkcji Always Encrypted opartej na enklawie jest:

  1. Użytkownik tworzy połączenie AlwaysEncrypted z programem SQL Server, które obsługuje szyfrowanie Always Encrypted oparte na enklawie. Kierowca kontaktuje się z usługą zaświadczania, aby upewnić się, że łączy się z właściwą enklawą.

  2. Po poświadczeniu enklawy sterownik ustanawia bezpieczny kanał z bezpieczną enklawą hostowaną w programie SQL Server.

  3. Sterownik przekazuje klucze szyfrowania autoryzowane przez klienta do bezpiecznej enklawy na czas trwania połączenia SQL.

Windows Presentation Foundation

znajdowanie słowników zasobów wg źródła

Począwszy od programu .NET Framework 4.7.2, asystent diagnostyczny może zlokalizować ResourceDictionaries utworzone na podstawie danego identyfikatora URI źródłowego. (Ta funkcja jest używana przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Asystent diagnostyczny, taki jak funkcja "Edit-and-Continue" programu Visual Studio, umożliwia użytkownikowi edytowanie elementu ResourceDictionary z intencją stosowania zmian do uruchomionej aplikacji. Jednym z kroków osiągnięcia tego celu jest znalezienie wszystkich elementów ResourceDictionaries utworzonych przez uruchomioną aplikację na podstawie edytowanego słownika. Na przykład aplikacja może zadeklarować ResourceDictionary, którego zawartość jest kopiowana z danego źródłowego identyfikatora URI.

<ResourceDictionary Source="MyRD.xaml" />

Asystent diagnostyczny, który edytuje oryginalny znacznik w MyRD.xaml może użyć nowej funkcji do zlokalizowania słownika. Ta funkcja jest implementowana przez nową metodę statyczną, ResourceDictionaryDiagnostics.GetResourceDictionariesForSource. Asystent diagnostyczny wywołuje nową metodę, używając bezwzględnego adresu URI, który identyfikuje oryginalny język znaczników, 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ą kolekcję, chyba że VisualDiagnostics jest włączony, a zmienna środowiskowa ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO jest ustawiona.

znajdowanie właścicieli ResourceDictionary

Począwszy od programu .NET Framework 4.7.2, asystent diagnostyczny może zlokalizować właścicieli danego ResourceDictionary. (Funkcja jest używana przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Za każdym razem, gdy zostanie wprowadzona zmiana w ResourceDictionary, WPF automatycznie znajdzie wszystkie odwołania DynamicResource, które mogą mieć wpływ na zmianę.

Asystent diagnostyczny, taki jak funkcja "Edytuj i kontynuuj" programu Visual Studio, może chcieć rozszerzyć tę funkcję 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ść Resources odnosi się do słownika (bezpośrednio lub pośrednio za pośrednictwem właściwości ResourceDictionary.MergedDictionaries). Trzy nowe metody statyczne zaimplementowane w klasie System.Windows.Diagnostics.ResourceDictionaryDiagnostics, po jednym dla każdego z typów bazowych, które mają właściwość Resources, obsługują ten krok:

Te metody zwracają puste wyliczenie, chyba że VisualDiagnostics jest włączony, a zmienna środowiskowa ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO jest ustawiona.

Znajdowanie odwołań StaticResource

Asystent diagnostyczny może teraz odbierać powiadomienie ilekroć odwołanie do StaticResource zostanie rozwiązane. (Funkcja jest używana przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Asystent diagnostyczny, taki jak funkcja "Edytuj i kontynuuj" programu Visual Studio, może chcieć zaktualizować wszystkie zastosowania zasobu, gdy jego wartość w ResourceDictionary się zmienia. WPF wykonuje to automatycznie w przypadku odwołań DynamicResource, ale celowo nie robi tego w przypadku odwołań StaticResource. Począwszy od programu .NET Framework 4.7.2, asystent diagnostyczny może używać tych powiadomień do lokalizowania tych zastosowań zasobu statycznego.

Powiadomienie jest implementowane przez nowe zdarzenie ResourceDictionaryDiagnostics.StaticResourceResolved:

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

To zdarzenie jest zgłaszane za każdym razem, gdy środowisko uruchomieniowe rozwiąże odwołanie StaticResource. Argumenty StaticResourceResolvedEventArgs opisują rozwiązanie i wskazują obiekt i właściwość hostujące odwołanie StaticResource oraz ResourceDictionary i klucz 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 add akcesorium jest ignorowane), chyba że VisualDiagnostics jest włączona, a zmienna środowiskowa ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO jest ustawiona.

ClickOnce

Aplikacje z myślą o HDPI dla formularzy Windows Forms, Windows Presentation Foundation (WPF) i Visual Studio Tools for Office (VSTO) można wdrażać za pomocą ClickOnce. Jeśli w manifeście aplikacji zostanie znaleziony następujący wpis, wdrożenie zakończy się pomyślnie w programie .NET Framework 4.7.2:

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

W przypadku aplikacji Windows Forms wcześniejsze obejście polegające na ustawieniu świadomości DPI w pliku konfiguracyjnym aplikacji zamiast manifestu aplikacji nie jest już konieczne do pomyślnego wdrożenia za pomocą ClickOnce.

Co nowego w programie .NET Framework 4.7.1

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

Ponadto głównym celem programu .NET Framework 4.7.1 jest ulepszona dostępność, która umożliwia aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technologii pomocniczych. Aby uzyskać informacje na temat ulepszeń ułatwień dostępu w programie .NET Framework 4.7.1, zobacz Co nowego w ułatwieniach dostępu w programie .NET Framework.

Klasy bazowe

obsługa dla platformy .NET Standard 2.0

.NET Standard określa zestaw interfejsów API, które muszą być dostępne w każdej implementacji platformy .NET obsługującej wersję standardu. Program .NET Framework 4.7.1 w pełni obsługuje platformę .NET Standard 2.0 i dodaje około 200 interfejsów API zdefiniowanych na platformie .NET Standard 2.0 i brakuje ich w programie .NET Framework 4.6.1, 4.6.2 i 4.7. (Należy pamiętać, że te wersje programu .NET Framework obsługują program .NET Standard 2.0 tylko wtedy, gdy dodatkowe pliki pomocy technicznej .NET Standard są również wdrażane w systemie docelowym). Aby uzyskać więcej informacji, zobacz "Obsługa protokołu BCL — .NET Standard 2.0" w .NET Framework 4.7.1 Runtime and Compiler Features wpis w blogu.

obsługa konstruktorów konfiguracji

Konstruktorzy konfiguracji umożliwiają deweloperom dynamiczne wprowadzanie i tworzenie ustawień konfiguracji dla aplikacji w czasie wykonywania. Niestandardowe konstruktory konfiguracji mogą służyć do modyfikowania istniejących danych w sekcji konfiguracji lub tworzenia sekcji konfiguracji całkowicie od podstaw. Bez konstruktorów konfiguracji pliki .config są statyczne, a ich ustawienia są definiowane jakiś czas przed uruchomieniem aplikacji.

Aby utworzyć niestandardowego konstruktora konfiguracji, należy utworzyć konstruktor z klasy abstrakcyjnej ConfigurationBuilder i zastąpić jej ConfigurationBuilder.ProcessConfigurationSection i ConfigurationBuilder.ProcessRawXml. Możesz także zdefiniować swoje konstruktory w pliku .config. Aby uzyskać więcej informacji, zobacz sekcję "Configuration Builders" we wpisie na blogu ".NET Framework 4.7.1 'ASP.NET and Configuration Features'".

wykrywanie funkcji w czasie wykonywania

Klasa System.Runtime.CompilerServices.RuntimeFeature udostępnia mechanizm określania, czy wstępnie zdefiniowana funkcja jest obsługiwana w danej implementacji platformy .NET w czasie kompilacji, czy w czasie wykonywania. W czasie kompilacji kompilator może sprawdzić, czy istnieje określone pole, aby określić, czy funkcja jest obsługiwana; jeśli tak, może emitować kod, który korzysta z tej funkcji. Podczas działania aplikacji może ona wywołać metodę RuntimeFeature.IsSupported przed emitowaniem kodu. Aby uzyskać więcej informacji, zobacz Add helper method to describe features supported by the runtime.

Typy krotki wartości można serializować

Począwszy od programu .NET Framework 4.7.1, System.ValueTuple i skojarzone z nim typy ogólne są oznaczone jako Serializable, co umożliwia serializacji binarnej. Powinno to ułatwić migrowanie typów Tuple, takich jak Tuple<T1,T2,T3> i Tuple<T1,T2,T3,T4>, do typów wartownikowych. Aby uzyskać więcej informacji, zobacz "Kompilator - ValueTuple jest serializowalny" w wpisie na blogu o funkcjach środowiska uruchomieniowego i kompilatora .NET Framework 4.7.1.

obsługa odwołań tylko do odczytu

Program .NET Framework 4.7.1 dodaje System.Runtime.CompilerServices.IsReadOnlyAttribute. Ten atrybut jest używany przez kompilatory języka do oznaczania elementów członkowskich, które mają typy zwrotów referencyjnych tylko do odczytu lub parametry tylko do odczytu. Aby uzyskać więcej informacji, zobacz "Kompilator — obsługa ReadOnlyReferences" w .NET Framework 4.7.1 Runtime and Compiler Features w wpisie na blogu. Aby uzyskać informacje na temat wartości zwracanych typu ref, zobacz Wartości zwracane typu ref i zmienne lokalne ref oraz Wartości zwracane typu Ref (Visual Basic).

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

ulepszenia wydajności zbierania śmieci

Zmiany dotyczące zbierania śmieci (GC) w programie .NET Framework 4.7.1 zwiększają ogólną wydajność, szczególnie w przypadku alokacji stert dużych obiektów (LOH). W programie .NET Framework 4.7.1 oddzielne blokady są używane do alokacji małych stertów obiektów (SOH) i LOH, co umożliwia alokacje LOH, gdy funkcja GC w tle zamiata SOH. W związku z tym aplikacje, które tworzą dużą liczbę alokacji LOH, powinny odnotować redukcję rywalizacji o blokadę alokacji i lepszą wydajność. Aby uzyskać więcej informacji, zobacz sekcję "Runtime — Ulepszenia wydajności GC" w wpisie na blogu "Funkcje środowiska uruchomieniowego i kompilatora .NET Framework 4.7.1".

Budowanie sieci kontaktów

obsługa algorytmu SHA-2 dla Message.HashAlgorithm

W programie .NET Framework 4.7 i starszych wersjach właściwość Message.HashAlgorithm obsługuje tylko wartości HashAlgorithm.Md5 i HashAlgorithm.Sha. Począwszy od programu .NET Framework 4.7.1, obsługiwane są również HashAlgorithm.Sha256, HashAlgorithm.Sha384i HashAlgorithm.Sha512. To, czy ta wartość jest rzeczywiście używana, zależy od MSMQ, ponieważ samo wystąpienie Message nie wykonuje haszowania, ale po prostu przekazuje wartości do MSMQ. Aby uzyskać więcej informacji, zobacz sekcję "Obsługa algorytmu SHA-2 dla elementu Message.HashAlgorithm" w wpisie na blogu .NET Framework 4.7.1 ASP.NET i funkcjach konfiguracji.

ASP.NET

kroki wykonywania w aplikacjach ASP.NET

ASP.NET przetwarza żądania w z góry ustalonym potoku, który zawiera 23 zdarzenia. ASP.NET wykonuje każdą procedurę obsługi zdarzeń jako krok wykonywania. W wersjach ASP.NET do .NET Framework 4.7, ASP.NET nie może przenosić kontekstu wykonania ze względu na przełączanie między wątkami natywnymi i zarządzanymi. Zamiast tego ASP.NET selektywnie przekazuje tylko HttpContext. Począwszy od programu .NET Framework 4.7.1, metoda HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) umożliwia również modułom przywracanie danych otoczenia. Ta funkcja jest przeznaczona dla bibliotek zainteresowanych śledzeniem, profilowaniem, diagnostyką lub transakcjami, na przykład, które dbają o przepływ wykonywania aplikacji. Aby uzyskać więcej informacji, zobacz wpis na blogu "Funkcja Kroku Wykonywania ASP.NET" w poście .NET Framework 4.7.1 ASP.NET i Funkcje Konfiguracji.

ASP.NET analizowanie plików cookie HttpCookie

Program .NET Framework 4.7.1 zawiera nową metodę, HttpCookie.TryParse, która zapewnia ustandaryzowany sposób tworzenia obiektu HttpCookie z ciągu i dokładnego przypisywania wartości plików cookie, takich jak data wygaśnięcia i ścieżka. Aby uzyskać więcej informacji, zobacz "ASP.NET parsowanie HttpCookie" w wpisie na blogu o funkcjach konfiguracji i ASP.NET w .NET Framework 4.7.1.

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

W ramach .NET Framework 4.7 i starszych wersji ASP.NET umożliwiała deweloperom przechowywanie poświadczeń użytkownika z hasłami w postaci skrótów w plikach konfiguracji, używając algorytmów MD5 lub SHA1. Począwszy od programu .NET Framework 4.7.1, ASP.NET obsługuje również nowe bezpieczne opcje 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ć inny niż domyślny algorytm wyznaczania wartości skrótu.

Ważny

Firma Microsoft zaleca korzystanie z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Jeśli łączysz się z usługą Azure SQL, zalecaną metodą uwierzytelniania są Zarządzane tożsamości dla zasobów platformy Azure.

Co nowego w programie .NET Framework 4.7

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

Aby uzyskać listę nowych interfejsów API dodanych do programu .NET Framework 4.7, zobacz .NET Framework 4.7 API Changes (Zmiany interfejsu API programu .NET Framework 4.7) w witrynie GitHub. Aby uzyskać listę ulepszeń funkcji i poprawek błędów w programie .NET Framework 4.7, zobacz .NET Framework 4.7 Lista zmian w witrynie GitHub. Aby uzyskać więcej informacji, zobacz Ogłoszenie programu .NET Framework 4.7 w blogu platformy .NET.

Klasy bazowe

Program .NET Framework 4.7 poprawia serializację za pomocą DataContractJsonSerializer:

ulepszone funkcje za pomocą kryptografii krzywej eliptycznej (ECC)*

W programie .NET Framework 4.7 metody ImportParameters(ECParameters) zostały dodane do klas ECDsa i ECDiffieHellman, aby umożliwić obiektowi reprezentowanie już ustanowionego klucza. Dodano również metodę ExportParameters(Boolean) do eksportowania klucza przy użyciu jawnych parametrów krzywej.

Program .NET Framework 4.7 wprowadza również obsługę dodatkowych krzywych (w tym zestaw krzywych Brainpool) i dodał predefiniowane definicje ułatwiające tworzenie za pośrednictwem nowych metod fabryki Create i Create.

Możesz zobaczyć przykład ulepszeń kryptograficznych programu .NET Framework 4.7 w witrynie GitHub.

DataContractJsonSerializer - lepsza obsługa znaków kontrolnych

W programie .NET Framework 4.7 klasa DataContractJsonSerializer serializuje znaki sterujące zgodnie ze standardem ECMAScript 6. To zachowanie jest domyślnie włączone w przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7 i jest funkcją opt-in dla aplikacji działających w programie .NET Framework 4.7, ale są przeznaczone dla poprzedniej wersji programu .NET Framework. Aby uzyskać więcej informacji, przejdź do sekcji Zgodność aplikacji.

Sieci

Program .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 System.Net.Security.SslStream 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 operacyjny. Deweloperzy nie potrzebują już twardego kodu wersji protokołu TLS.

ASP.NET

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

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

Począwszy od programu .NET Framework 4.7, ASP.NET dodaje nowy zestaw interfejsów API, który umożliwia deweloperom zastąpienie domyślnych implementacji ASP.NET na potrzeby 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 implementacja ASP.NET nie jest odpowiednia:

  • magazyn pamięci podręcznej obiektów. Korzystając z sekcji konfiguracji nowych 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 ASP.NET powiadamia aplikacje, gdy są uruchomione blisko skonfigurowanego limitu bajtów prywatnych dla procesu lub gdy maszyna jest niska w łącznej dostępnej fizycznej pamięci RAM. Gdy te limity są bliskie, powiadomienia są wysyłane. W przypadku niektórych aplikacji powiadomienia są wyzwalane zbyt blisko skonfigurowanych limitów, aby umożliwić przydatne reakcje. Deweloperzy mogą teraz pisać własne monitory pamięci, aby zastąpić domyślny monitor za pomocą właściwości ApplicationMonitors.MemoryMonitor.

  • Reakcje Limitu Pamięci. Domyślnie ASP.NET próbuje ograniczyć pamięć podręczną obiektów i okresowo wywoływać GC.Collect, gdy limit prywatnych bajtów procesu jest bliski. W przypadku niektórych aplikacji częstotliwość wywołań do GC.Collect lub ilość pamięci podręcznej, która jest przycinana, jest nieefektywna. Deweloperzy mogą teraz zastąpić lub uzupełnić domyślne zachowanie, subskrybując implementacje IObserver monitorowi pamięci aplikacji.

Windows Communication Foundation (WCF)

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

Możliwość konfigurowania domyślnych ustawień zabezpieczeń komunikatów na potrzeby protokołu TLS 1.1 lub TLS 1.2

Począwszy od programu .NET Framework 4.7, program WCF umożliwia skonfigurowanie protokołu TLS 1.1 lub TLS 1.2 oprócz protokołów SSL 3.0 i TLS 1.0 jako domyślnego protokołu zabezpieczeń komunikatów. Jest to ustawienie zgody; aby go 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>

ulepszona niezawodność aplikacji WCF i serializacji WCF

Program WCF zawiera szereg zmian kodu, które eliminują warunki wyścigu, zwiększając wydajność i niezawodność opcji serializacji. Należą do nich:

  • Lepsza obsługa mieszania kodu asynchronicznego i synchronicznego w wywołaniach 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 metody FormatterServices.GetSerializableMembers(Type).
  • Zwiększona niezawodność podczas usuwania kelnera przez wywołanie metody ChannelSynchronizer.RemoveWaiter.

Formularze systemu Windows

W programie .NET Framework 4.7 formularze systemu Windows zwiększają obsługę monitorów o wysokiej rozdzielczości DPI.

obsługa wysokiej rozdzielczości DPI

Począwszy od aplikacji przeznaczonych dla programu .NET Framework 4.7, platforma .NET Framework oferuje wysoką obsługę DPI i dynamicznej obsługi DPI dla aplikacji Windows Forms. Obsługa wysokiej rozdzielczości DPI poprawia układ i wygląd formularzy i kontrolek na monitorach o wysokiej rozdzielczości DPI. Dynamiczne dpi zmienia układ i wygląd formularzy i kontrolek, gdy użytkownik zmienia dpi lub wyświetla współczynnik skalowania uruchomionej aplikacji.

Obsługa wysokiej rozdzielczości DPI to funkcja, którą można skonfigurować przez zdefiniowanie sekcji <System.Windows.Forms.ConfigurationSection> w pliku konfiguracji aplikacji. Aby uzyskać więcej informacji na temat dodawania obsługi wysokiej rozdzielczości DPI i dynamicznej obsługi DPI do aplikacji Windows Forms, zobacz obsługa wysokiej rozdzielczości DPI w formularzach systemu Windows.

Windows Presentation Foundation (WPF)

W programie .NET Framework 4.7 platforma WPF obejmuje następujące ulepszenia:

Obsługa stosu technologii dotykowej/rysika opartego na komunikatach WM_POINTER systemu Windows

Teraz możesz używać stosu touch/stylus na podstawie komunikatów WM_POINTER zamiast platformy Windows Ink Services (WISP). Jest to funkcja zgody w programie .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję Zgodność aplikacji.

Nowa implementacja interfejsów API drukowania WPF

Interfejsy API drukowania WPF w klasie System.Printing.PrintQueue wywołają interfejs API pakietu dokumentów drukowania systemu Windows zamiast przestarzałego interfejsu API drukowania XPS. Aby uzyskać wpływ tej zmiany na zgodność aplikacji, zobacz sekcję Zgodność aplikacji.

Co nowego w programie .NET Framework 4.6.2

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

Aby uzyskać listę nowych interfejsów API dodanych do programu .NET Framework 4.6.2, zobacz .NET Framework 4.6.2 Api Changes (Zmiany interfejsu API programu .NET Framework 4.6.2) w witrynie 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 witrynie GitHub. Aby uzyskać więcej informacji, zobacz Ogłoszenie programu .NET Framework 4.6.2 w blogu platformy .NET.

ASP.NET

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

ulepszona obsługa zlokalizowanych komunikatów o błędach w modułach sprawdzania poprawności adnotacji danych

Moduły sprawdzania poprawności adnotacji danych umożliwiają przeprowadzenie walidacji przez dodanie co najmniej jednego atrybutu do właściwości klasy. Element ValidationAttribute.ErrorMessage atrybutu definiuje tekst komunikatu o błędzie, jeśli walidacja zakończy się niepowodzeniem. Począwszy od programu .NET Framework 4.6.2, ASP.NET ułatwia lokalizowanie komunikatów o błędach. Komunikaty o błędach zostaną zlokalizowane, jeśli:

  1. ValidationAttribute.ErrorMessage jest zawarty w atrybucie weryfikacji.

  2. Plik zasobu jest przechowywany w folderze App_LocalResources.

  3. Nazwa zlokalizowanego pliku zasobów ma formę DataAnnotation.Localization.{nazwa}.resx, gdzie nazwa jest nazwą kultury w formacie kod_języka-kod_kraju/regionu lub kod_języka.

  4. Nazwa klucza zasobu to ciąg przypisany do atrybutu ValidationAttribute.ErrorMessage, a jego wartość jest zlokalizowanym komunikatem o błędzie.

Na przykład następujący atrybut adnotacji danych definiuje domyślny komunikat o błędzie dla danego kulturowego ustawienia w przypadku nieprawidłowej oceny.

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żna utworzyć plik zasobu DataAnnotation.Localization.fr.resx, którego kluczem jest ciąg komunikatu o błędzie i którego wartością jest zlokalizowany komunikat o błędzie. Plik musi znajdować się w folderze App.LocalResources. Na przykład poniżej znajduje się klucz i jego wartość w komunikacie o błędzie w języku francuskim (fr):

Nazwa Wartość
Ocena musi należeć do przedziału od 1 do 10. Ocena musi być w przedziale od 1 do 10.

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

obsługa asynchronicznego z dostawcami magazynu stanów sesji

ASP.NET teraz umożliwia używanie metod zwracania zadań z dostawcami magazynu stanów sesji, dzięki czemu aplikacje ASP.NET uzyskać korzyści ze skalowalności asynchronicznego. Aby obsługiwać operacje asynchroniczne z dostawcami magazynu stanów sesji, ASP.NET zawiera nowy interfejs, System.Web.SessionState.ISessionStateModule, który dziedziczy po IHttpModule i umożliwia deweloperom implementowanie własnego modułu sesji i dostawców magazynu sesji asynchronicznej. Interfejs jest definiowany 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 SessionStateUtility zawiera dwie nowe metody, IsSessionStateReadOnly i IsSessionStateRequired, które mogą służyć do obsługi operacji asynchronicznych.

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

Począwszy od .NET Framework 4.6.2, metody zwracające zadania mogą być używane z dostawcami wyjściowej pamięci podręcznej, aby zapewnić korzyści skalowalności związane z asynchronicznością. Dostawcy, którzy implementują te metody, zmniejszają blokowanie wątków na serwerze internetowym i zwiększają skalowalność usługi ASP.NET.

Dodano interfejsy API, które wspierają dostawców asynchronicznej pamięci podręcznej danych wyjściowych:

Kategorie znaków

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

Obsługa formatu Unicode 8.0 jest ograniczona do klasyfikacji znaków przez klasę CharUnicodeInfo oraz typy i metody, które na nim polegają. Należą do nich klasa StringInfo, przeciążona metoda Char.GetUnicodeCategory oraz klasy znaków rozpoznawane przez aparat wyrażeń regularnych programu .NET Framework. Porównanie charakterów i sortowanie tekstu nie jest zmienione przez tę zmianę i nadal polega na podstawowym systemie operacyjnym albo, w przypadku systemów Windows 7, na danych charakterów dostarczonych przez platformę .NET Framework.

Aby uzyskać informacje o zmianach w kategoriach znaków z formatu Unicode 6.0 do Unicode 7.0, zobacz Standard Unicode w wersji 7.0.0 w witrynie internetowej Konsorcjum Unicode. Aby zobaczyć zmiany w standardzie Unicode z wersji 7.0 do 8.0, zobacz Standard Unicode, wersja 8.0.0 na stronie internetowej Konsorcjum Unicode.

Kryptografia

Wsparcie dla certyfikatów X509 zawierających DSA ze standardem FIPS 186-3

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

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 standardu FIPS 186-3 jest zapewniana przez nową klasę System.Security.Cryptography.DSACng.

Zgodnie z ostatnimi zmianami w klasie RSA w programie .NET Framework 4.6 i klasie ECDsa w programie .NET Framework 4.6.1, abstrakcyjna klasa bazowa DSA w programie .NET Framework 4.6.2 ma dodatkowe metody, które pozwalają wywołującym korzystać z tej funkcji bez rzutowania. Możesz wywołać metodę rozszerzenia DSACertificateExtensions.GetDSAPrivateKey w celu podpisania danych, 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 również wywołać metodę rozszerzenia DSACertificateExtensions.GetDSAPublicKey w celu zweryfikowania podpisanych danych, jak pokazano w poniższym przykładzie.

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

zwiększona przejrzystość danych wejściowych do procedur wyprowadzania kluczy ECDiffieHellman

Program .NET Framework 3.5 dodał obsługę wymiany kluczy eliptycznej krzywej Diffie-Hellman z trzema różnymi procedurami funkcji wyprowadzania klucza (KDF). Dane wejściowe procedur i same procedury zostały skonfigurowane za pośrednictwem właściwości obiektu ECDiffieHellmanCng. Ale ponieważ nie każda funkcja przetwarzała każdą właściwość wejściową, było dużo możliwości na nieporozumienia ze strony dewelopera.

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

Metoda ECDiffieHellman Opis
DeriveKeyFromHash(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[]) Wyodrębnia materiał kluczowy przy użyciu formuły

HASH(secretPrepend || x || secretAppend)

HASH(secretPrepend OrElse x OrElse secretAppend)

gdzie x jest obliczonym wynikiem algorytmu Diffie-Hellman EC.
DeriveKeyFromHmac(ECDiffieHellmanPublicKey, HashAlgorithmName, Byte[], Byte[], Byte[]) Wyodrębnia materiał kluczowy przy użyciu formuły

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

HMAC(hmacKey, secretPrepend lub x lub secretAppend)

gdzie x jest obliczonym wynikiem algorytmu Diffie-Hellman EC.
DeriveKeyTls(ECDiffieHellmanPublicKey, Byte[], Byte[]) Wyodrębnia materiał klucza przy użyciu algorytmu wyprowadzania pseudolosowej funkcji TLS (PRF).

Obsługa szyfrowania symetrycznego z trwałym kluczem

Biblioteka kryptografii systemu Windows (CNG) dodała obsługę przechowywania utrwalonego kluczy symetrycznych i używania przechowywanych sprzętowo kluczy symetrycznych, a program .NET Framework 4.6.2 umożliwił deweloperom korzystanie z tej funkcji. Ponieważ pojęcie nazw kluczy i dostawców kluczy jest 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 (AesCng) i 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 algorytmu SignedXml na potrzeby tworzenia skrótów SHA-2

.NET Framework 4.6.2 oferuje wsparcie dla klasy SignedXml dla metod podpisu RSA-SHA256, RSA-SHA384 oraz RSA-SHA512 PKCS#1 i algorytmów skrótu SHA256, SHA384 i SHA512.

Stałe identyfikatora URI są uwidocznione na SignedXml:

Pole SignedXml Stały
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ły niestandardowy program obsługi SignatureDescription w CryptoConfig w celu dodania obsługi tych algorytmów, będą nadal działać tak jak w przeszłości, ale ponieważ obecnie istnieją ustawienia domyślne platformy, rejestracja CryptoConfig nie jest już konieczna.

SqlClient

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

Pula połączeń i limity czasu w bazach danych Azure SQL Database

Po włączeniu buforowania połączeń i wystąpieniu limitu czasu lub innego błędu logowania wyjątek zostaje zapisany w buforze. Zapisany wyjątek jest zgłaszany przy każdej kolejnej próbie nawiązania połączenia przez następne 5 sekund do 1 minuty. Aby uzyskać więcej informacji, zobacz Konfiguracja puli połączeń w SQL Server (ADO.NET).

Takie zachowanie nie jest pożądane podczas nawiązywania połączenia z bazami danych Azure SQL Database, ponieważ próby połączenia mogą zakończyć się niepowodzeniem z błędami przejściowymi, które są zwykle szybko odzyskiwane. Aby lepiej zoptymalizować doświadczenie ponawiania próby połączenia, zachowanie blokujące pulę połączeń jest usuwane, gdy połączenia z baz danych Azure SQL kończą się niepowodzeniem.

Dodanie nowego słowa kluczowego PoolBlockingPeriod umożliwia wybranie okresu blokowania najlepiej odpowiedniego dla aplikacji. Wartości obejmują:

Auto

Okres blokowania puli połączeń dla aplikacji łączącej się z usługą Azure SQL Database jest wyłączony, a okres blokowania puli połączeń dla aplikacji łączącej się z dowolnym innym wystąpieniem programu 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 wartości, są traktowane jako bazy danych Azure SQL Database:

  • .database.windows.net

  • .database.chinacloudapi.cn

  • .database.usgovcloudapi.net

  • .database.cloudapi.de

AlwaysBlock

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

NeverBlock

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

ulepszenia usługi Always Encrypted

Program SQLClient wprowadza dwa ulepszenia funkcji Always Encrypted:

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

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

Windows Communication Foundation

W programie .NET Framework 4.6.2 program Windows Communication Foundation został rozszerzony 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 biblioteki kryptograficznej systemu Windows (CNG). W programie .NET Framework 4.6.2 ta obsługa jest ograniczona do używania certyfikatów z kluczem publicznym, który ma wykładnik nie więcej niż 32 bity długości. Gdy aplikacja jest przeznaczona dla programu .NET Framework 4.6.2, ta funkcja jest domyślnie włączona.

W przypadku aplikacji przeznaczonych dla platformy .NET Framework 4.6.1 i starszych, ale są one uruchomione w programie .NET Framework 4.6.2, tę funkcję można włączyć, dodając następujący wiersz do sekcji środowiska uruchomieniowego pliku app.config lub web.config.

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

Można to również zrobić programowo za pomocą kodu, takiego jak:

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 DataContractJsonSerializer obsługuje wiele reguł korekty dla jednej strefy czasowej. Jest to funkcja zgody. Aby ją włączyć, dodaj następujące ustawienie do pliku app.config:

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

Po włączeniu tej funkcji obiekt DataContractJsonSerializer używa typu TimeZoneInfo zamiast typu TimeZone do deserializacji danych daty i godziny. TimeZoneInfo obsługuje wiele reguł korekty, co umożliwia pracę z historycznymi danymi strefy czasowej; TimeZone nie.

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

NetNamedPipeBinding najlepsze dopasowanie

WCF ma nowe ustawienie aplikacji, które można skonfigurować w aplikacjach klienckich, aby zapewnić, że zawsze łączą się z usługą nasłuchującą na identyfikatorze URI, który najlepiej odpowiada temu, o który proszą. Jeśli to ustawienie aplikacji jest ustawione na false (ustawienie domyślne), istnieje możliwość, aby klienci korzystający z NetNamedPipeBinding próbowali nawiązać połączenie z usługą nasłuchującą na identyfikatorze URI, który jest podciągem żądanego identyfikatora URI.

Na przykład klient próbuje nawiązać połączenie z usługą nasłuchującą w net.pipe://localhost/Service1, ale inna usługa na tym komputerze z uprawnieniami administratora nasłuchuje w net.pipe://localhost. Po ustawieniu tej aplikacji na falseklient podejmie próbę nawiązania połączenia z niewłaściwą usługą. Po ustawieniu ustawienia aplikacji na trueklient będzie zawsze łączyć się z najlepszą zgodną usługą.

Notatka

Klienci korzystający z NetNamedPipeBinding znajdują usługi na podstawie adresu bazowego usługi (jeśli istnieje) zamiast pełnego adresu punktu końcowego. Aby upewnić się, że to ustawienie zawsze działa, 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 aplikacji klienckiej:

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

SSL 3.0 nie jest domyślnym protokołem

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

Windows Presentation Foundation (WPF)

W programie .NET Framework 4.6.2 program Windows Presentation Foundation został rozszerzony w następujących obszarach:

sortowania grup

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

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

Dwie nowe właściwości statyczne klasy PropertyGroupDescription, CompareNameAscending i CompareNameDescending, mogą być używane w najbardziej typowych przypadkach.

Na przykład następujące dane grup XAML według wieku, posortuj grupy wiekowe w kolejności rosnącej i pogrupuj elementy w każdej grupie wiekowej według nazwiska.

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

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

obsługa klawiatury dotykowej

Obsługa klawiatury dotykowej umożliwia śledzenie fokusu w aplikacjach WPF przez automatyczne wywoływanie i odrzucanie klawiatury dotykowej w systemie Windows 10, gdy dane wejściowe dotyku są odbierane przez kontrolkę, która może przyjmować wprowadzanie tekstowe.

W poprzednich wersjach programu .NET Framework aplikacje WPF nie mogą zdecydować się na śledzenie fokusu bez wyłączania obsługi gestów pióra/dotyku WPF. W rezultacie aplikacje WPF muszą wybierać między pełną obsługą dotyku WPF lub polegać na podwyższeniu poziomu myszy systemu Windows.

DPI dla każdego monitora

Aby wesprzeć niedawne rozprzestrzenianie się środowisk z wysokim i hybrydowym DPI dla aplikacji WPF, WPF w .NET Framework 4.6.2 umożliwia świadomość ustawień DPI dla każdego monitora. Zobacz przykłady i przewodnik dewelopera na GitHub, aby uzyskać więcej informacji o tym, jak umożliwić aplikacji WPF rozpoznawanie DPI na monitorach.

W poprzednich wersjach .NET Framework aplikacje WPF były świadome ustawień DPI systemu. Innymi słowy, interfejs użytkownika aplikacji jest skalowany przez system operacyjny odpowiednio w zależności od dpi monitora, na którym jest renderowana aplikacja.

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

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

Windows Workflow Foundation (WF)

W programie .NET Framework 4.6.2 program Windows Workflow Foundation został rozszerzony w następującym obszarze:

obsługa wyrażeń języka C# i funkcji IntelliSense w rehosted WF Designer

Począwszy od programu .NET Framework 4.5, platforma WF obsługuje wyrażenia języka C# zarówno w projektancie programu Visual Studio, jak i w przepływach pracy kodu. Rehosted Workflow Designer jest kluczową funkcją WF, która umożliwia umieszczenie Projektanta Przepływu Pracy w aplikacji poza Visual Studio (na przykład w WPF). Program Windows Workflow Foundation umożliwia obsługę wyrażeń języka C# i funkcji IntelliSense w rehosted Workflow Designer. Aby uzyskać więcej informacji, zobacz blog Windows Workflow Foundation.

Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio W wersjach programu .NET Framework wcześniejszych niż 4.6.2 funkcja IntelliSense projektanta WF jest uszkodzona, gdy klient ponownie kompiluje projekt przepływu pracy z programu Visual Studio. Podczas gdy kompilacja projektu kończy się pomyślnie, typy przepływów pracy nie są widoczne w projektancie i pojawiają się ostrzeżenia IntelliSense dotyczące brakujących typów przepływów pracy w oknie listy błędów . Program .NET Framework 4.6.2 rozwiązuje ten problem i udostępnia funkcję IntelliSense.

aplikacje przepływu pracy w wersji 1 z funkcją śledzenia przepływu pracy są teraz uruchamiane w trybie FIPS

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

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

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

Ulepszenia Przepływu Pracy podczas korzystania z Aktualizacji Dynamicznej za pomocą Projektanta Przepływu Pracy programu Visual Studio

Projektanci przepływów pracy, projektanci działań schematu blokowego oraz inni projektanci działań przepływów pracy teraz pomyślnie ładują i wyświetlają przepływy pracy, które zostały zapisane po wywołaniu metody DynamicUpdateServices.PrepareForUpdate. W wersjach programu .NET Framework przed programem .NET Framework 4.6.2 ładowanie pliku XAML w programie Visual Studio dla przepływu pracy zapisanego po wywołaniu DynamicUpdateServices.PrepareForUpdate może spowodować następujące problemy:

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

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

ClickOnce

Funkcja ClickOnce została zaktualizowana w celu obsługi protokołów TLS 1.1 i TLS 1.2 oprócz protokołu 1.0, który już obsługuje. Funkcja ClickOnce automatycznie wykrywa, który protokół jest wymagany; Aby włączyć obsługę protokołu TLS 1.1 i 1.2, nie są wymagane żadne dodatkowe kroki w aplikacji ClickOnce.

Konwertowanie aplikacji Windows Forms i WPF na aplikacje platformy UWP

System Windows oferuje teraz funkcje umożliwiające korzystanie z istniejących aplikacji klasycznych systemu Windows, w tym aplikacji WPF i Windows Forms, do platformy uniwersalnej systemu Windows (UWP). Ta technologia działa jako most, umożliwiając stopniowe migrowanie istniejącej bazy kodu do platformy UWP, co spowoduje przeniesienie aplikacji na wszystkie urządzenia z systemem Windows 10.

Przekonwertowane aplikacje klasyczne uzyskują tożsamość aplikacji podobną do tożsamości aplikacji platformy UWP, co sprawia, że interfejsy API platformy UWP są dostępne w celu włączenia funkcji, takich jak dynamiczne kafelki i powiadomienia. Aplikacja nadal działa tak jak poprzednio i działa jako aplikacja o pełnym zaufaniu. Po przekonwertowaniu aplikacji proces kontenera aplikacji można dodać do istniejącego procesu pełnego zaufania w celu dodania adaptacyjnego interfejsu użytkownika. Po przeniesieniu wszystkich funkcji do procesu kontenera aplikacji można usunąć pełny proces zaufania i udostępnić nową aplikację platformy UWP wszystkim urządzeniom z systemem Windows 10.

Ulepszenia debugowania

interfejsu API debugowania niezarządzanego został rozszerzony w programie .NET Framework 4.6.2 w celu przeprowadzenia dodatkowej analizy, gdy zostanie zgłoszony , aby można było określić, która zmienna w jednym wierszu kodu źródłowego jest . Aby obsłużyć ten scenariusz, do niezarządzanego API debugowania dodano następujące interfejsy API.

Co nowego w programie .NET Framework 4.6.1

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

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

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

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

EcDSA oferuje lepszą wydajność i jest bardziej bezpiecznym algorytmem kryptografii niż RSA, zapewniając doskonały wybór, w którym wydajność i skalowalność protokołu Transport Layer Security (TLS) jest problemem. Implementacja programu .NET Framework opakowuje wywołania istniejących funkcji systemu Windows.

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 dla kodu potrzebnego do wygenerowania podpisu w programie .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

Do ADO.NET zostały dodane następujące elementy:

Obsługa funkcji Always Encrypted dla kluczy chronionych sprzętem

ADO.NET obsługuje teraz przechowywanie kluczy głównych kolumn Always Encrypted natywnie w sprzętowych modułach zabezpieczeń (HSM). Dzięki tej obsłudze 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 modułu HSM lub dostawców CNG na serwerach aplikacji lub komputerach klienckich, aby uzyskać dostęp do danych Always Encrypted chronionych kluczami głównymi kolumn przechowywanymi w HSM.

Ulepszone zachowanie połączenia dla AlwaysOn MultiSubnetFailover

SqlClient teraz automatycznie zapewnia szybsze połączenia z AlwaysOn Availability Group (AG). W sposób niewidoczny 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 tą wersją aplikacja musiała ustawić parametry połączenia, aby uwzględnić "MultisubnetFailover=true", aby wskazać, że łączyła się z zawsze włączoną grupą dostępności. Bez ustawienia słowa kluczowego połączenia na trueaplikacja może napotkać przekroczenie limitu czasu podczas nawiązywania połączenia z grupą dostępności AlwaysOn. W tej wersji aplikacja nie musi już ustawić MultiSubnetFailover na true. Aby uzyskać więcej informacji na temat obsługi klienta SqlClient dla zawsze włączonych grup dostępności, zobacz SqlClient Support for High Availability, Disaster Recovery.

Windows Presentation Foundation (WPF)

Program Windows Presentation Foundation zawiera szereg ulepszeń i zmian.

ulepszona wydajność

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

Ulepszenia sprawdzania pisowni

Moduł sprawdzania pisowni w WPF został zaktualizowany w systemie Windows 8.1 i nowszych wersjach w celu wykorzystania obsługi systemu operacyjnego na potrzeby sprawdzania pisowni w dodatkowych językach. Nie ma żadnych zmian w funkcjach w wersjach systemu Windows wcześniejszych niż Windows 8.1.

Podobnie jak w poprzednich wersjach programu .NET Framework język kontrolki TextBox lub blok RichTextBox jest wykrywany, wyszukując informacje w następującej kolejności:

  • xml:lang, jeśli jest obecny.

  • Bieżący język wejściowy.

  • Bieżąca kultura.

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

Dodatkowa obsługa słowników niestandardowych dla poszczególnych użytkowników

W programie .NET Framework 4.6.1 WPF rozpoznaje słowniki niestandardowe zarejestrowane globalnie. Ta funkcja jest dostępna oprócz możliwości rejestrowania ich dla każdego elementu sterującego.

W poprzednich wersjach WPF niestandardowe słowniki nie rozpoznawały Wyrazów Wykluczonych i listy Autokorekty. Są one obsługiwane w systemach Windows 8.1 i Windows 10 za pomocą plików, które można umieścić w katalogu %AppData%\Microsoft\Spelling\<language tag>. Następujące reguły dotyczą tych plików:

  • Pliki powinny mieć rozszerzenia .dic (dla dodanych słów), .exc (dla wykluczonych słów) lub acl (dla Autokorekty).

  • Pliki powinny być w formacie tekstu niesformatowanego UTF-16 LE, który rozpoczyna się od znacznika porządku bajtów (BOM).

  • Każdy wiersz powinien składać się ze słowa (znajdującego się na liście dodanych lub wykluczonych wyrazów) albo pary autokorekty z wyrazami rozdzielonymi pionową kreską ("|") (na liście wyrazów autokorekty).

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

Notatka

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

przykładów

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

rozszerzenia DirectX

WPF zawiera pakiet NuGet, który zapewnia nowe implementacje D3DImage, ułatwiające współdziałanie z zawartością DX10 i DX11. Kod tego pakietu został opublikowany jako open source i jest dostępny na GitHubie.

Windows Workflow Foundation: transakcje

Metoda Transaction.EnlistPromotableSinglePhase może teraz użyć rozproszonego menedżera transakcji innego niż MSDTC w celu podwyższenia poziomu transakcji. W tym celu należy określić identyfikator promotora transakcji GUID do nowego przeciążenia Transaction.EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification, Guid) . Jeśli ta operacja zakończy się pomyślnie, istnieją ograniczenia dotyczące możliwości transakcji. Po zarejestrowaniu inicjatora transakcji spoza MSDTC, następujące metody zwracają błąd TransactionPromotionException, ponieważ wymagają podwyższenia poziomu do MSDTC.

Kiedy promotor transakcji, który nie jest związany z MSDTC, zostanie zarejestrowany, musi być używany do przyszłych trwałych rejestracji zgodnie z protokołami, które definiuje. Uzyskać Guid promotora transakcji można za pomocą właściwości PromoterType. Kiedy transakcja jest promowana, promotor transakcji dostarcza tablicę Byte, która reprezentuje promowany token. Aplikacja może uzyskać promowany token dla transakcji innej niż MSDTC promowana za pomocą metody GetPromotedToken.

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

Profilowanie

Niezarządzany interfejs API profilowania 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 Roslyn. W przypadku deweloperów tworzących narzędzia profilowania oznacza to, że pliki PDB, które historycznie były serializowane na dysku, mogą już nie być obecne. Narzędzia profilera często używają plików PDB do mapowania kodu z powrotem na wiersze źródłowe dla zadań, takich jak pokrycie kodu lub analiza wydajności wierszy po wierszu. Interfejs ICorProfilerInfo7 zawiera teraz dwie nowe metody: ICorProfilerInfo7::GetInMemorySymbolsLength i ICorProfilerInfo7::ReadInMemorySymbols. Zapewniają one narzędziom profilera dostęp do danych PDB w pamięci. Za pomocą nowych API profiler może uzyskać zawartość pliku PDB w pamięci jako tablicę bajtów, a następnie przetworzyć ją lub zserializować na dysk.

  • Lepsza instrumentacja za pomocą interfejsu ICorProfiler.

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

Pliki PDB generatora obrazów natywnych (NGEN)

Śledzenie zdarzeń między maszynami umożliwia klientom profilowanie programu na maszynie A i przeglądanie danych profilowania za pomocą mapowania linii źródłowej na maszynie B. Przy użyciu poprzednich wersji programu .NET Framework użytkownik skopiuje wszystkie moduły i obrazy natywne z komputera profilowanego do maszyny analizy zawierającej plik PDB IL w celu utworzenia mapowania źródłowego na natywne. Chociaż ten proces może działać dobrze, gdy pliki są stosunkowo małe, takie jak w przypadku aplikacji telefonicznych, pliki mogą być bardzo duże w systemach klasycznych i wymagają znacznego czasu na skopiowanie.

W przypadku NGen PDB, NGen może utworzyć PDB, który zawiera mapowanie IL-to-native bez zależności od PDB IL. W naszym scenariuszu śledzenia zdarzeń między maszynami potrzebne jest skopiowanie natywnego pliku PDB obrazu generowanego przez maszynę A na maszynę B i użycie interfejsów API dostępu do interfejsu debugowania odczytywania źródłowegoto-IL mapowania il PDB i mapowania natywnego obrazu PDB na natywne. Połączenie obu mapowań zapewnia mapowanie typu source-to-native. Ponieważ plik PDB obrazu natywnego jest znacznie mniejszy niż wszystkie moduły i obrazy natywne, proces kopiowania z maszyny A do maszyny B jest znacznie szybszy.

Co nowego na platformie .NET 2015

Platforma .NET 2015 wprowadza programy .NET Framework 4.6 i .NET Core. Niektóre nowe funkcje dotyczą obu tych funkcji, a inne są specyficzne dla platformy .NET Framework 4.6 lub .NET Core.

  • ASP.NET Core

    Platforma .NET 2015 obejmuje platformę ASP.NET Core, która jest oszczędną implementacją platformy .NET do tworzenia nowoczesnych aplikacji opartych na chmurze. ASP.NET Core jest modułowa, dzięki czemu można uwzględnić tylko te funkcje, które są potrzebne w aplikacji. Może być hostowana w usługach IIS lub samodzielnie hostowana w procesie niestandardowym i można uruchamiać aplikacje z różnymi wersjami programu .NET Framework na tym samym serwerze. Obejmuje on nowy system konfiguracji środowiska przeznaczony do wdrażania w chmurze.

    MvC, web API i Web Pages są ujednolicone w jednej strukturze o nazwie MVC 6. Aplikacje ASP.NET Core można tworzyć za pomocą narzędzi w programie Visual Studio 2015 lub nowszym. Istniejące aplikacje będą działać na nowym programie .NET Framework; Jednak aby utworzyć aplikację korzystającą z 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.

  • aktualizacje ASP.NET

    • API oparte na zadaniach dla asynchronicznego opróżniania odpowiedzi

      ASP.NET teraz udostępnia prosty interfejs API oparty na zadaniach do asynchronicznego przetwarzania odpowiedzi, HttpResponse.FlushAsync, który umożliwia przetwarzanie odpowiedzi asynchronicznie przy użyciu możliwości języka async/await.

    • Powiązanie modelu obsługuje metody zwracania zadań

      W programie .NET Framework 4.5 ASP.NET dodano funkcję powiązania modelu, która umożliwiła rozszerzalne, ukierunkowane na kod podejście do operacji danych opartych na operacjach CRUD na stronach formularzy sieci Web i kontrolkach użytkownika. System powiązywania modelu teraz obsługuje metody powiązania modelu zwracające Task. Ta funkcja umożliwia deweloperom formularzy internetowych uzyskanie korzyści ze skalowalności asynchronicznych z łatwością systemu powiązania danych w przypadku korzystania z nowszych wersji ormów, w tym programu Entity Framework.

      Asynchroniczne powiązanie modelu jest kontrolowane przez ustawienie konfiguracji aspnet:EnableAsyncModelBinding.

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

      W aplikacjach korzystających z docelowego programu .NET Framework 4.6 domyślnie ustawiono wartość true. W przypadku aplikacji działających w programie .NET Framework 4.6 przeznaczonych dla starszej wersji programu .NET Framework jest ona domyślnie false. 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 i serwerem), co powoduje mniejsze opóźnienie ładowania strony internetowej dla użytkowników. Strony internetowe (w przeciwieństwie do usług) korzystają najbardziej z protokołu HTTP/2, ponieważ protokół ten optymalizuje wiele elementów jako część jednego doświadczenia użytkownika. Dodano obsługę protokołu HTTP/2 do ASP.NET w programie .NET Framework 4.6. Ponieważ funkcje sieciowe istnieją w wielu warstwach, nowe funkcje były wymagane w systemie Windows, w usługach IIS i w ASP.NET w celu włączenia protokołu HTTP/2. Aby używać protokołu HTTP/2 z ASP.NET, musisz uruchomić system Windows 10.

      Protokół HTTP/2 jest również obsługiwany i domyślnie włączony dla aplikacji Uniwersalnej Platformy Windows (UWP) korzystających z interfejsu API System.Net.Http.HttpClient.

      Aby zapewnić sposób korzystania z funkcji PUSH_PROMISE w aplikacjach ASP.NET, nowa metoda z dwoma przeciążeniami, PushPromise(String) i PushPromise(String, String, NameValueCollection), została dodana do klasy HttpResponse.

      Notatka

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

      Przeglądarka i serwer internetowy (IIS w systemie Windows) wykonują całą pracę. Nie musisz wykonywać żadnych ciężkich czynności dla użytkowników.

      Większość głównych przeglądarek obsługujeHTTP/2, dlatego prawdopodobnie użytkownicy skorzystają z obsługi protokołu HTTP/2, jeśli serwer go obsługuje.

    • obsługa protokołu powiązania tokenu

      Firma Microsoft i Google współpracują nad nowym podejściem do uwierzytelniania o nazwie Token Binding Protocol. Założeniem jest to, że tokeny uwierzytelniania (w pamięci podręcznej przeglądarki) mogą być skradzione i używane przez przestępców w celu uzyskania dostępu do innych bezpiecznych zasobów (na przykład konta bankowego) bez konieczności używania hasła lub innej wiedzy uprzywilejowanej. Nowy protokół ma na celu rozwiązanie tego problemu.

      Protokół powiązania tokenu zostanie zaimplementowany w systemie Windows 10 jako funkcja przeglądarki. ASP.NET aplikacje będą uczestniczyć w protokole, dzięki czemu tokeny uwierzytelniania są weryfikowane jako wiarygodne. Klient i implementacje serwera ustanawiają kompleksową ochronę określoną przez protokół.

    • Randomized string hash algorithmsRandomizowane algorytmy skrótów ciągów znaków

      Program .NET Framework 4.5 wprowadził zrandomizowany algorytm haszowania ciągów . Funkcja nie była jednak obsługiwana przez ASP.NET, ponieważ niektóre z jego funkcji zależały od stabilnego kodu skrótu. W programie .NET Framework 4.6 algorytmy skrótów losowych ciągów są teraz obsługiwane. Aby włączyć tę funkcję, użyj ustawienia konfiguracji aspnet:UseRandomizedStringHashAlgorithm.

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

    Platforma ADO .NET obsługuje teraz funkcję Always Encrypted dostępną w programie SQL Server 2016. Za pomocą funkcji Always Encrypted program SQL Server może wykonywać operacje na zaszyfrowanych danych, a najlepiej wszystkie klucze szyfrowania znajdują się z aplikacją wewnątrz zaufanego środowiska klienta, a nie na serwerze. Funkcja Always Encrypted zabezpiecza dane klientów, dzięki czemu administratorzy baz danych 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ć do istniejących aplikacji. Aby uzyskać szczegółowe informacje, zobacz Always Encrypted (Silnik bazy danych) i Always Encrypted (rozwój aplikacji klienckich).

  • 64-bitowy kompilator JIT dla kodu zarządzanego

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

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

  • Ulepszenia modułu ładującego zestawów

    Ładowarka zestawów teraz wykorzystuje pamięć bardziej efektywnie, wypakowując zestawy IL po załadowaniu odpowiedniego obrazu NGEN. Ta zmiana zmniejsza pamięć wirtualną, co jest szczególnie korzystne w przypadku dużych aplikacji 32-bitowych (takich jak Program Visual Studio), a także zapisuje pamięć fizyczną.

  • zmiany biblioteki klas bazowych

    Wiele nowych interfejsów API zostało dodanych do programu .NET Framework 4.6, aby umożliwić kluczowe scenariusze. Obejmują one następujące zmiany i dodatki:

    • implementacje><IReadOnlyCollection

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

    • CultureInfo.CurrentCulture i CultureInfo.CurrentUICulture

      Właściwości CultureInfo.CurrentCulture i CultureInfo.CurrentUICulture są teraz do odczytu i zapisu, a nie tylko do odczytu. Jeśli przypiszesz nowy obiekt CultureInfo do tych właściwości, zmienia się również kultura bieżącego wątku zdefiniowana przez właściwość Thread.CurrentThread.CurrentCulture i bieżącą kulturę wątku interfejsu użytkownika zdefiniowaną przez właściwości Thread.CurrentThread.CurrentUICulture.

    • Ulepszenia zarządzania pamięcią (GC)

      Klasa GC zawiera teraz metody TryStartNoGCRegion i EndNoGCRegion, które pozwalają uniemożliwić zbieranie śmieci podczas wykonywania ścieżki krytycznej.

      Nowa wersja przeciążenia metody GC.Collect(Int32, GCCollectionMode, Boolean, Boolean) pozwala kontrolować, czy zarówno mała sterta obiektów, jak i duża sterta obiektów są czyszczone i kompaktowane lub czyszczone tylko.

    • typy z obsługą SIMD

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

      Ponieważ nowy 64-bitowy kompilator JIT zawiera także sprzętowe funkcje przyspieszania SIMD, szczególnie znaczące ulepszenia wydajności można zaobserwować przy wykorzystaniu rodzajów obsługujących SIMD z tym nowym kompilatorem.

    • aktualizacje kryptografii

      Interfejs API System.Security.Cryptography jest aktualizowany, aby obsługiwać interfejsy API kryptografii Windows CNG . Poprzednie wersje programu .NET Framework polegały całkowicie na starszej wersji interfejsów API kryptograficznych systemu Windows jako podstawy implementacji System.Security.Cryptography. Mieliśmy prośby wsparcia interfejsu API CNG, ponieważ obsługuje nowoczesne algorytmy kryptograficzne, które są ważne dla niektórych kategorii aplikacji.

      Program .NET Framework 4.6 zawiera następujące nowe ulepszenia obsługujące interfejsy API kryptografii CNG systemu Windows:

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

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

      • Ulepszenia interfejsu API RSA, dzięki czemu typowe akcje nie wymagają już rzutowania. Na przykład szyfrowanie danych przy użyciu obiektu X509Certificate2 wymaga kodu podobnego do poniższego w poprzednich wersjach programu .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 korzystający z nowych interfejsów API kryptograficznych w programie .NET Framework 4.6 można przepisać 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 lub z czasu systemu Unix

      Następujące nowe metody zostały dodane do struktury DateTimeOffset w celu obsługi konwertowania wartości daty i godziny na lub z godziny systemu Unix:

    • przełączniki zgodności

      Klasa AppContext dodaje nową funkcję zgodności, która umożliwia autorom bibliotek zapewnienie jednolitego mechanizmu rezygnacji dla nowych funkcji dla użytkowników. Ustanawia luźne powiązanie kontraktu między składnikami, aby przekazać żądanie rezygnacji. Ta funkcja jest zwykle ważna, gdy wprowadzono zmianę w istniejących funkcjach. Z drugiej strony istnieje już niejawna zgoda na nowe funkcje.

      W przypadku AppContextbiblioteki definiują i uwidaczniają przełączniki zgodności, a kod, który jest od nich zależny, może ustawić te przełączniki tak, aby wpływały na zachowanie biblioteki. Domyślnie biblioteki udostępniają nowe funkcje i zmieniają ją tylko (czyli udostępniają poprzednie funkcje), jeśli przełącznik jest ustawiony.

      Aplikacja (lub biblioteka) może zadeklarować wartość przełącznika (który jest zawsze wartością Boolean), którą definiuje biblioteka zależna. Przełącznik jest zawsze domyślnie false. Ustawienie przełącznika na true go włącza. Jawne ustawienie przełącznika na false zapewnia nowe zachowanie.

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

      Biblioteka musi sprawdzić, czy klient zadeklarował wartość przełącznika, a następnie odpowiednio zareagować.

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

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

      • przełącznik.namespace.switchname

      • przełącznik. biblioteka.switchname

    • Zmiany wzorca asynchronicznego opartego na zadaniach (TAP)

      W przypadku aplikacji przeznaczonych dla platformy .NET Framework 4.6 obiekty Task i Task<TResult> dziedziczą kulturę i kulturę interfejsu użytkownika wątku wywołującego. Nie ma to wpływu na zachowanie aplikacji przeznaczonych dla poprzednich wersji programu .NET Framework lub które nie są przeznaczone dla określonej wersji programu .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję "Operacje asynchroniczne oparte na kulturze i zadaniach" tematu klasy CultureInfo.

      Klasa System.Threading.AsyncLocal<T> umożliwia reprezentowanie danych otoczenia lokalnych dla danego przepływu sterowania asynchronicznego, takiego jak metoda async. 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 kontekstowe zmieniają się, albo dlatego, że właściwość AsyncLocal<T>.Value została jawnie zmieniona, albo ponieważ wątek napotkał przejście kontekstu.

      Trzy wygodne metody, Task.CompletedTask, Task.FromCanceledi Task.FromException, zostały dodane do wzorca asynchronicznego opartego na zadaniach (TAP) w celu zwrócenia ukończonych zadań w określonym stanie.

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

    • EventSource obsługuje teraz zapisywanie w dzienniku zdarzeń

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

      Pakiet NuGet i program .NET Framework 4.6 zostały zaktualizowane o następujące funkcje:

      • dynamiczne zdarzenia

        Umożliwia definiowanie zdarzeń "na bieżąco" bez tworzenia metod zdarzeń.

      • Bogaty ładunek

        Umożliwia przekazanie specjalnie przypisanych klas i tablic, a także typów pierwotnych jako ładunku

      • monitoring aktywności

        Powoduje, że zdarzenia uruchamiania i zatrzymywania tagują pomiędzy nimi inne zdarzenia za pomocą identyfikatora reprezentującego wszystkie aktualnie aktywne działania.

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

  • Windows Presentation Foundation (WPF)

    • ulepszenia interfejsu HDPI

      Obsługa interfejsu HDPI w WPF jest teraz lepsza w programie .NET Framework 4.6. Wprowadzono zmiany w układzie zaokrąglania w celu zmniejszenia liczby wystąpień wycinków w kontrolkach z obramowaniami. Domyślnie ta funkcja jest włączona tylko wtedy, gdy TargetFrameworkAttribute jest ustawiona na .NET Framework 4.6. Aplikacje, które są przeznaczone dla wcześniejszych wersji frameworka, ale działają na .NET Framework 4.6, mogą włączyć nowe zachowanie, dodając następujący wiersz do sekcji <środowiska uruchomieniowego> pliku app.config.

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

      Okna WPF rozciągające się na wielu monitorach z różnymi ustawieniami DPI (wieloustawieniowa konfiguracja DPI) są teraz całkowicie renderowane bez zaciemnionych obszarów. Możesz zrezygnować z tego zachowania, dodając następujący wiersz do sekcji <appSettings> pliku app.config, aby wyłączyć to nowe zachowanie:

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

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

    • Touch jest lepszy

      Raporty klientów na Connect, że dotyk wywołuje nieprzewidywalne zachowanie, zostały rozwiązane w .NET Framework 4.6. Próg dwukrotnego naciśnięcia dla aplikacji ze Sklepu Windows i aplikacji WPF jest teraz taki sam w systemie Windows 8.1 i nowszych.

    • obsługa przezroczystych okien podrzędnych

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

  • Windows Communication Foundation (WCF)

    • obsługa protokołu SSL

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

      <netTcpBinding>
          <binding>
            <security mode= "None|Transport|Message|TransportWithMessageCredential" >
                <transport clientCredentialType="None|Windows|Certificate"
                          protectionLevel="None|Sign|EncryptAndSign"
                          sslProtocols="Ssl3|Tls1|Tls11|Tls12">
                  </transport>
            </security>
          </binding>
      </netTcpBinding>
      
    • wysyłanie komunikatów przy użyciu różnych połączeń HTTP

      Program WCF umożliwia teraz użytkownikom zapewnienie, że niektóre komunikaty są wysyłane przy użyciu różnych bazowych połączeń HTTP. Istnieją dwa sposoby, aby to zrobić:

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

        Użytkownicy mogą określić parametry, które będą używane 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 jest ustawiany przez dodanie pary klucz/wartość do właściwości komunikatu Message.Properties. Klucz to "HttpTransportConnectionGroupNamePrefix"; wartość jest żądanym prefiksem.

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

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

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

    Teraz możesz określić liczbę sekund, przez które usługa przepływu pracy będzie przetrzymywać żądanie operacji poza kolejnością, gdy istnieje aktywny zakładnik "bez protokołu" przed upływem limitu czasu żądania. Zakładka "bez protokołu" to zakładka, która nie jest powiązana z zaległymi działaniami odbierania. Niektóre działania tworzą zakładki inne niż protokoły w ramach implementacji, więc może nie być oczywiste, że istnieje zakładka bez protokołu. Obejmują one Stan i Pick. Jeśli więc masz usługę przepływu pracy zaimplementowaną z maszyną stanów lub zawierającą aktywność Pick, najprawdopodobniej będziesz mieć zakładki, które nie są częścią protokołu. Interwał określa się, dodając wiersz podobny do poniższego w sekcji appSettings pliku app.config:

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

    Wartość domyślna to 60 sekund. Jeśli value jest ustawione na 0, żądania nieuporządkowane są natychmiast odrzucane z błędem i komunikatem, 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 zostanie wyświetlony, jeśli zostanie odebrany komunikat operacji poza protokołem i nie ma zakładek innych niż protokół.

    Jeśli wartość elementu FilterResumeTimeoutInSeconds jest różna od zera, istnieją nieprotokolarne zakładki, a tok czasu dobiega końca, operacja kończy się niepowodzeniem, wyświetlając komunikat o przekroczeniu limitu czasu.

  • Transakcje

    Teraz można uwzględnić identyfikator transakcji rozproszonej dla transakcji, która spowodowała wystąpienie wyjątku pochodzącego z TransactionException. W tym celu dodaj następujący klucz do sekcji appSettings pliku app.config:

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

    Wartość domyślna to false.

  • sieci

    • Ponowne użycie gniazda

      System Windows 10 zawiera nowy algorytm sieci o wysokiej skalowalności, który zapewnia lepsze wykorzystanie zasobów maszynowych przez ponowne użycie portów lokalnych dla wychodzących połączeń TCP. Program .NET Framework 4.6 obsługuje nowy algorytm, umożliwiając aplikacjom platformy .NET korzystanie z nowego zachowania. W poprzednich wersjach systemu Windows istniał sztuczny limit połączeń współbieżnych (zazwyczaj 16 384, domyślny rozmiar zakresu portów dynamicznych), co może ograniczyć skalowalność usługi, powodując wyczerpanie portów w przypadku obciążenia.

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

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

      Deweloperzy piszący aplikację wykorzystującą wyłącznie gniazda mogą określić opcję System.Net.Sockets.SocketOptionName podczas wywoływania metody, takiej jak Socket.SetSocketOption, aby gniazda wychodzące mogły ponownie korzystać z portów lokalnych podczas tworzenia powiązania.

    • Obsługa międzynarodowych nazw domen i PunyCode

      Nowa właściwość, IdnHost, została dodana do klasy Uri, aby lepiej obsługiwać międzynarodowe nazwy domen i PunyCode.

  • Zmienianie rozmiaru w kontrolkach Windows Forms.

    Ta funkcja została rozszerzona w programie .NET Framework 4.6 w celu uwzględnienia typów DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn, ToolStripSplitButton, a także prostokąta określonego przez właściwość Bounds używaną podczas rysowania UITypeEditor.

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

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • obsługa kodowań stron kodowych

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

  • .NET Native

Aplikacje platformy uniwersalnej systemu Windows (UWP), które są napisane w języku C# lub Visual Basic, mogą korzystać z nowej technologii, która kompiluje aplikacje w kodzie natywnym, a nie w języku IL. Ta technologia tworzy aplikacje, które mają krótszy czas uruchamiania i wykonywania. Aby uzyskać więcej informacji, zobacz kompilowanie aplikacji z użyciem .NET Native. Aby zapoznać się z omówieniem platformy .NET Native, które sprawdza, jak różni się zarówno od kompilacji JIT, jak i NGEN oraz co to oznacza dla Twojego kodu, zobacz .NET Native and Compilation.

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

Aby obsługiwać debugowanie aplikacji natywnych platformy .NET, do interfejsu API debugowania niezarządzanego dodano wiele nowych interfejsów i wyliczenia. Aby uzyskać więcej informacji, zobacz temat Debugowanie ( Odwołanie do niezarządzanego interfejsu API).

  • pakiety .NET Framework typu open source

    Pakiety platformy .NET Core, takie jak kolekcje niezmienne, interfejsy API SIMDi interfejsy API sieci, takie jak te znajdujące się w przestrzeni nazw System.Net.Http, są teraz dostępne jako pakiety open source w usłudze GitHub. Aby uzyskać dostęp do kodu, zobacz .NET w witrynie GitHub. Aby uzyskać więcej informacji i dowiedzieć się, jak współtworzyć te pakiety, zobacz Introduction to .NET, .NET Home Page on GitHub.

Co nowego w programie .NET Framework 4.5.2

  • Nowe interfejsy API dla aplikacji ASP.NET. Nowe metody HttpResponse.AddOnSendingHeaders i HttpResponseBase.AddOnSendingHeaders pozwalają na inspekcję i modyfikowanie nagłówków odpowiedzi oraz kodu stanu podczas przesyłania odpowiedzi do aplikacji klienckiej. Rozważ użycie tych metod zamiast zdarzeń PreSendRequestHeaders i PreSendRequestContent; są bardziej wydajne i niezawodne.

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

    Nowe właściwości HttpResponse.HeadersWritten i HttpResponseBase.HeadersWritten zwracają wartości logiczne wskazujące, 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 HttpResponse.StatusCode (które zgłaszają wyjątki, jeśli nagłówki zostały zapisane), powiodą się.

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

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

    <appSettings>
        <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" />
    </appSettings>
    
  • Nowa funkcja przepływu pracy. Menedżer zasobów używający metody EnlistPromotableSinglePhase (i w związku z tym implementujący interfejs IPromotableSinglePhaseNotification) może użyć nowej metody Transaction.PromoteAndEnlistDurable w celu zażądania następujących elementów:

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

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

    Poprzednie implementacje ICorProfiler obsługiwały leniwe wczytywanie zestawów zależnych. Nowe interfejsy API profilowania wymagają, aby zestawy zależne wprowadzane przez profilera były ładowane natychmiast, a nie ładowane po pełnym zainicjowaniu aplikacji. Ta zmiana nie ma wpływu na użytkowników istniejących interfejsów API ICorProfiler.

  • Ulepszenia debugowania. Następujące nowe niezarządzane interfejsy API debugowania zapewniają lepszą integrację z profilerem. Teraz możesz uzyskać dostęp do metadanych wstawionych przez profilera, a także do zmiennych lokalnych i kodu wygenerowanego przez żądania ReJIT kompilatora podczas debugowania zrzutu.

  • Zmiany w śledzeniu zdarzeń. Program .NET Framework 4.5.2 umożliwia przetwarzanie poza procesem, śledzenie zdarzeń na potrzeby śledzenia działań opartych na systemie Windows (ETW) dla większego obszaru powierzchni. Dzięki temu dostawcy usługi Advanced Power Management (APM) udostępniają lekkie narzędzia, które dokładnie śledzą koszty poszczególnych żądań i działań obejmujących wiele wątków. Te zdarzenia są zgłaszane tylko wtedy, gdy kontrolery ETW je włączają; w związku z tym zmiany nie mają wpływu na wcześniej napisany kod ETW ani kod uruchamiany z wyłączonym etW.

  • promowanie transakcji i konwertowanie jej na trwałe zaangażowanie

    Transaction.PromoteAndEnlistDurable to nowy interfejs API dodany do programu .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 rejestrację, która została wcześniej utworzona przez Transaction.EnlistPromotableSinglePhase w odpowiedzi na metodę ITransactionPromoter.Promote. Prosi System.Transactions o podniesienie poziomu transakcji do transakcji MSDTC i "przekonwertowanie" możliwej do podniesienia rejestracji na trwałą rejestrację. Po pomyślnym zakończeniu tej metody interfejs IPromotableSinglePhaseNotification nie będzie już przywołyny przez System.Transactions, a wszelkie przyszłe powiadomienia będą wysyłane do dostarczonego interfejsu ISinglePhaseNotification. Rejestracja, o której mowa, musi działać jako trwała, wspierając rejestrowanie transakcji i odzyskiwanie. Aby uzyskać szczegółowe informacje, zobacz Transaction.EnlistDurable. Ponadto rejestracja musi obsługiwać ISinglePhaseNotification. Ta metoda może wywołać tylko podczas przetwarzania wywołania ITransactionPromoter.Promote. Jeśli tak nie jest, zostanie zgłoszony wyjątek TransactionException.

Co nowego w programie .NET Framework 4.5.1

kwietnia 2014 r. aktualizacje:

  • Visual Studio 2013 Update 2 zawiera aktualizacje szablonów bibliotek klas przenośnych w celu obsługi następujących scenariuszy:

    • Interfejsy API środowiska uruchomieniowego systemu Windows można używać w bibliotekach przenośnych przeznaczonych dla systemów Windows 8.1, Windows Phone 8.1 i Windows Phone Silverlight 8.1.

    • XAML (typy Windows.UI.XAML) można uwzględnić w bibliotekach przenośnych, gdy celem jest Windows 8.1 lub Windows Phone 8.1. Obsługiwane są następujące szablony XAML: pusta strona, słownik zasobów, kontrolka szablonów i kontrola użytkownika.

    • Możesz utworzyć przenośny składnik środowiska uruchomieniowego systemu Windows (plik winmd) do użycia w aplikacjach ze Sklepu przeznaczonych dla systemów Windows 8.1 i Windows Phone 8.1.

    • Możesz przekonfigurować bibliotekę klas Sklepu Windows lub Sklepu Windows Phone jak bibliotekę klas przenośnych.

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

  • Zestaw zawartości programu .NET Framework zawiera teraz dokumentację dla platformy .NET Native, która jest technologią prekompilacji do kompilowania i wdrażania aplikacji systemu Windows. Platforma .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 Kompilowanie aplikacji przy użyciu platformy .NET Native.

  • Źródło referencyjne programu .NET Framework zapewnia nowe środowisko przeglądania i ulepszone funkcje. Teraz możesz przeglądać kod źródłowy programu .NET Framework w trybie online, pobrać referencyjne do przeglądania w trybie offline i przejść przez źródła (w tym poprawki i aktualizacje) podczas debugowania. Aby uzyskać więcej informacji, zobacz wpis w blogu Nowy wygląd źródła referencyjnego platformy .NET.

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

  • Automatyczne przekierowywanie powiązań dla zestawów programistycznych. Począwszy od programu Visual Studio 2013, podczas kompilowania aplikacji przeznaczonej dla programu .NET Framework 4.5.1 przekierowania powiązań mogą zostać dodane do pliku konfiguracji aplikacji, jeśli aplikacja lub jej składniki odwołują się do wielu wersji tego samego zestawu. Tę funkcję można również włączyć dla projektów przeznaczonych dla starszych wersji programu .NET Framework. Aby uzyskać więcej informacji, zapoznaj się z Jak włączyć i wyłączyć automatyczne przekierowanie wiązania.

  • Możliwość zbierania informacji diagnostycznych w celu ułatwienia deweloperom poprawy wydajności aplikacji serwerowych i aplikacji w chmurze. Aby uzyskać więcej informacji, zobacz metody WriteEventWithRelatedActivityId i WriteEventWithRelatedActivityIdCore w klasie EventSource.

  • Możliwość jawnego kompaktowania dużego sterty obiektów (LOH) podczas odzyskiwania pamięci. Aby uzyskać więcej informacji, zobacz właściwość GCSettings.LargeObjectHeapCompactionMode.

  • Dodatkowe ulepszenia wydajności, takie jak zawieszenie aplikacji ASP.NET, ulepszenia wielordzeniowego trybu JIT i szybsze uruchamianie aplikacji po aktualizacji programu .NET Framework. Aby uzyskać szczegółowe informacje, zobacz ogłoszenie .NET Framework 4.5.1 i wpis na blogu o zawieszeniu aplikacji ASP.NET.

Ulepszenia formularzy systemu Windows obejmują:

  • Zmiana rozmiaru w kontrolkach formularzy systemu Windows. Możesz użyć ustawienia DPI systemu, aby zmienić rozmiar elementów kontrolek (na przykład ikony wyświetlane w siatce właściwości), poprzez dodanie wpisu w pliku konfiguracji aplikacji (app.config). Ta funkcja jest obecnie obsługiwana w następujących kontrolkach Windows Forms:

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

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

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

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

  • Edytuj i kontynuuj dla aplikacji 64-bitowych. Program Visual Studio 2013 obsługuje funkcję Edytuj i kontynuuj dla 64-bitowych aplikacji zarządzanych dla komputerów stacjonarnych, Sklepu Windows i systemu Windows Phone. Istniejące ograniczenia pozostają w mocy zarówno dla aplikacji 32-bitowych, jak i 64-bitowych (zobacz ostatnią sekcję artykułu Obsługiwane zmiany kodu (C#)).

  • Debugowanie z uwzględnieniem asynchroniczności. Aby ułatwić debugowanie aplikacji asynchronicznych w programie Visual Studio 2013, stos wywołań ukrywa kod infrastruktury udostępniany przez kompilatory w celu obsługi programowania asynchronicznego, a także łańcuchy w logicznych ramkach nadrzędnych, dzięki czemu można łatwiej wykonywać wykonywanie programów logicznych. Okno Zadania zastępuje okno Zadania równoległe i wyświetla zadania powią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 asynchroniczne" ogłoszenia .NET Framework 4.5.1.

  • Lepsza obsługa wyjątków dla składników środowiska uruchomieniowego systemu Windows. W systemie Windows 8.1 wyjątki wynikające z aplikacji Sklepu Windows zachowują informacje o błędzie, który spowodował wyjątek, nawet poza granicami językowymi. Tę funkcję można znaleźć w sekcji "Tworzenie aplikacji ze Sklepu Windows" w ogłoszeniu .NET Framework 4.5.1.

Począwszy od programu Visual Studio 2013, można użyć narzędzia optymalizacji z przewodnikiem profilu zarządzanego (Mpgo.exe) w celu zoptymalizowania aplikacji ze Sklepu Windows 8.x oraz aplikacji klasycznych.

Aby uzyskać informacje o nowych funkcjach w programie ASP.NET 4.5.1, zobacz ASP.NET i Web Tools for Visual Studio 2013 Release Notes (Informacje o wersji programu Visual Studio 2013).

Co nowego w programie .NET Framework 4.5

Klasy bazowe

  • Możliwość zmniejszenia liczby ponownych uruchomień systemu przez wykrywanie i zamykanie aplikacji programu .NET Framework 4 podczas wdrażania. Zobacz Zmniejszanie liczby ponownych uruchomień systemu podczas instalacji programu .NET Framework 4.5.

  • Obsługa tablic o rozmiarze większym niż 2 gigabajty (GB) na platformach 64-bitowych. Tę funkcję można włączyć w pliku konfiguracji aplikacji. Zobacz element <gcAllowVeryLargeObjects>, który zawiera również listę innych ograniczeń dotyczących rozmiaru obiektu i rozmiaru tablicy.

  • Lepsza wydajność dzięki zbieraniu niepotrzebnych danych w tle dla serwerów. Gdy używasz odzyskiwania pamięci serwera w programie .NET Framework 4.5, odzyskiwanie pamięci w tle jest automatycznie włączone. Zobacz sekcję Odzyskiwanie pamięci serwera w tle w temacie Podstawy odzyskiwania pamięci.

  • Opcjonalna kompilacja jednokrotnego wykonywania w tle (JIT) jest dostępna na procesorach wielordzeniowych w celu zwiększenia wydajności aplikacji. Zobacz ProfileOptimization.

  • Możliwość ograniczenia czasu próby przetworzenia wyrażenia regularnego przez silnik wyrażeń regularnych przed przekroczeniem limitu czasu. Zobacz właściwość Regex.MatchTimeout.

  • Możliwość definiowania kultury domyślnej dla domeny aplikacji. Zobacz klasę CultureInfo.

  • Obsługa kodowania Unicode (UTF-16) przez konsolę. Zobacz klasę Console.

  • Obsługa przechowywania wersji danych porządkowania i porównywania ciągów kulturowych. Zobacz klasę SortVersion.

  • Lepsza wydajność podczas pobierania zasobów. Zobacz Tworzenie pakietów i wdrażanie zasobów.

  • Ulepszenia kompresji zip w celu zmniejszenia rozmiaru skompresowanego pliku. Zobacz przestrzeń nazw System.IO.Compression.

  • Możliwość dostosowania kontekstu odbicia w celu zastąpienia domyślnego zachowania odbicia za pomocą klasy CustomReflectionContext.

  • Obsługa wersji 2008 standardu Internationalized Domain Names in Applications (IDNA), gdy klasa System.Globalization.IdnMapping jest używana w systemie Windows 8.

  • Delegowanie porównania ciągów do systemu operacyjnego, który implementuje Unicode 6.0, gdy program .NET Framework jest używany w systemie Windows 8. W przypadku uruchamiania na innych platformach program .NET Framework zawiera własne dane porównania ciągów, które implementują kod Unicode 5.x. Zobacz klasę String i sekcję Uwagi klasy SortVersion.

  • Możliwość obliczania kodów skrótów dla ciągów na podstawie domeny aplikacji. Zobacz <UseRandomizedStringHashAlgorithm> Element.

  • Obsługa odbicia typu została podzielona między klasy Type i TypeInfo. Zobacz odbicie w programie .NET Framework dla aplikacji ze Sklepu Windows.

Managed Extensibility Framework (MEF) – Zarządzany Framework Rozszerzeń

W programie .NET Framework 4.5 program Managed Extensibility Framework (MEF) udostępnia następujące nowe funkcje:

  • Obsługa typów ogólnych.

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

  • Wiele zakresów.

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

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

Asynchroniczne operacje na plikach

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

Narzędzia

W programie .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, zobacz Resgen.exe (Generator plików zasobów).

Zarządzana optymalizacja sterowana profilem (Mpgo.exe) umożliwia poprawę czasu uruchamiania aplikacji, wykorzystania pamięci (wielkość zestawu roboczego) i wydajności dzięki optymalizacji zestawów obrazów natywnych. Narzędzie wiersza polecenia generuje dane profilu dla natywnych zestawów aplikacji obrazów. Zobacz Mpgo.exe (narzędzie do optymalizacji sterowanej profilem zarządzanym). Począwszy od programu Visual Studio 2013, można użyć Mpgo.exe do zoptymalizowania aplikacji ze Sklepu Windows 8.x oraz aplikacji klasycznych.

Przetwarzanie równoległe

Program .NET Framework 4.5 udostępnia kilka nowych funkcji i ulepszeń przetwarzania równoległego. Obejmują one lepszą wydajność, zwiększoną kontrolę, ulepszoną obsługę programowania asynchronicznego, nową bibliotekę przepływu danych i ulepszoną obsługę równoległego debugowania i analizy wydajności. Zobacz wpis Co nowego w zakresie równoległości w programie .NET Framework 4.5 w blogu Programowanie równoległe za pomocą platformy .NET.

Sieć

ASP.NET 4.5 i 4.5.1 dodają powiązanie modelu dla formularzy Web Forms, obsługę protokołu WebSocket, asynchroniczne procedury obsługi, ulepszenia wydajności oraz wiele innych funkcji. Aby uzyskać więcej informacji, zobacz następujące zasoby:

sieci

Program .NET Framework 4.5 udostępnia nowy interfejs programowania dla aplikacji HTTP. Aby uzyskać więcej informacji, zapoznaj się z nowymi przestrzeniami nazw System.Net.Http i System.Net.Http.Headers.

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

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

  • Obsługa identyfikatora URI zgodnego ze specyfikacją RFC. 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 internacjonalizacji adresów e-mail (EAI). Aby uzyskać więcej informacji, zajrzyj do przestrzeni nazw System.Net.Mail.

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

  • Obsługa gniazda w trybie dwutrybowym. Aby uzyskać więcej informacji, zobacz klasy Socket i TcpListener.

Windows Presentation Foundation (WPF)

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

  • Nowa kontrolka Ribbon, pozwalająca zaimplementować interfejs użytkownika typu wstążki, który obsługuje pasek narzędzi szybkiego dostępu, menu aplikacji oraz karty.

  • Nowy interfejs INotifyDataErrorInfo, który obsługuje walidację danych synchronicznych i asynchronicznych.

  • Nowe funkcje klas VirtualizingPanel i Dispatcher.

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

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

  • Zmiana położenia danych w miarę zmiany wartości (kształtowanie na żywo).

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

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

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

Windows Communication Foundation (WCF)

W programie .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 opracowywania kontraktów po raz pierwszy.

  • Możliwość łatwiejszego konfigurowania trybu zgodności ASP.NET.

  • Zmiany domyślnych wartości właściwości transportu w celu zmniejszenia potrzeby ich ręcznego ustawiania.

  • Aktualizacje klasy XmlDictionaryReaderQuotas, aby zmniejszyć prawdopodobieństwo, że będziesz musiał ręcznie skonfigurować kwoty dla czytników słowników XML.

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

  • Nowa asynchroniczna obsługa przesyłania strumieniowego.

  • Nowe mapowanie protokołu HTTPS, aby ułatwić uwidocznienie punktu końcowego za pośrednictwem protokołu HTTPS za pomocą usług Internet Information Services (IIS).

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

  • Obsługa protokołów Websocket w celu umożliwienia prawdziwej dwukierunkowej komunikacji przez porty 80 i 443 z charakterystyką wydajności podobną do transportu TCP.

  • Obsługa konfigurowania usług w kodzie.

  • Podpowiedzi narzędziowe edytora XML.

  • Obsługa buforowania dla ChannelFactory.

  • Obsługa kompresji kodera binarnego.

  • Obsługa transportu UDP, który umożliwia deweloperom pisanie usług wykorzystujących mechanizm "wystrzel i zapomnij" w przesyłaniu wiadomości. Klient wysyła komunikat do usługi i oczekuje braku odpowiedzi z usługi.

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

  • Obsługa usług WCF korzystających z nazw domen międzynarodowych (IDN).

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

Windows Workflow Foundation (WF)

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

  • Przepływy pracy maszyny stanu, które zostały wprowadzone po raz pierwszy w ramach programu .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 maszyny stanu. Te klasy i działania zostały zaktualizowane dla programu .NET Framework 4.5 w celu uwzględnienia następujących elementów:

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

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

    • Obsługa projektanta na potrzeby tworzenia przejścia współużytkowanego wyzwalacza.

    • Działania dotyczące tworzenia przepływów pracy maszyny stanu, w tym: StateMachine, Statei Transition.

  • Ulepszone funkcje projektanta przepływu pracy, takie jak:

    • Ulepszone możliwości wyszukiwania workflow w programie Visual Studio, w tym Szybkie znajdowanie i Znajdź w plikach.

    • Możliwość automatycznego tworzenia aktywności sekwencji po dodaniu drugiej podrzędnej aktywności do aktywności kontenera oraz uwzględnienia obu tych aktywności w aktywności sekwencji.

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

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

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

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

    • Automatyczne łączenie i automatyczne wstawianie działań i przejść w przepływach pracy maszyny stanu i schematu blokowego.

  • Przechowywanie informacji o stanie widoku przepływu pracy w jednym elemecie w pliku XAML, dzięki czemu można łatwo zlokalizować 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 korzystające z języka Visual Basic będą używać wyrażeń języka 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 języka Visual Basic, są zgodne z projektami przepływu pracy języka C#, które używają wyrażeń języka C#.

  • Ulepszenia dotyczące wersji:

    • Nowa klasa WorkflowIdentity, która udostępnia mapowanie między trwałym wystąpieniem przepływu pracy a definicją przepływu pracy.

    • Równoległe wykonywanie 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ług w podejściu najpierw kontraktowym, zapewniające wsparcie dla automatycznego generowania aktywności w celu zgodności z istniejącym kontraktem serwisowym.

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

Platforma .NET dla aplikacji ze Sklepu Windows 8.x

Aplikacje ze Sklepu Windows 8.x są zaprojektowane pod kątem konkretnych formatów i wykorzystują potencjał systemu operacyjnego Windows. Podzestaw programu .NET Framework 4.5 lub 4.5.1 jest dostępny do tworzenia aplikacji ze Sklepu Windows 8.x dla systemu Windows przy użyciu języka C# lub Visual Basic. Ten podzestaw .NET jest nazywany .NET dla aplikacji ze Sklepu Windows 8.x i jest omówiony w przeglądzie dotyczącym .

Przenośne biblioteki klas

Projekt Portable Class Library w programie Visual Studio 2012 (i nowszych wersjach) umożliwia pisanie i tworzenie zarządzanych zestawów, które działają na wielu platformach .NET Framework. Korzystając z projektu Portable Class Library, można wybrać platformy (takie jak Windows Phone i .NET dla aplikacji ze Sklepu Windows 8.x), do których mają być przeznaczone. Dostępne typy i członkowie w projekcie są automatycznie ograniczone do wspólnych typów i członków na tych platformach. Aby uzyskać więcej informacji, zobacz Portable Class Library.

Zobacz też