Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Notatka
program .NET Framework jest serwisowany niezależnie od aktualizacji 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 Windows bez planów jego usunięcia. Nie musisz migrować aplikacji platformy .NET Framework, ale w przypadku nowego programowania użyj .NET zamiast .NET Framework.
Ten artykuł zawiera podsumowanie najważniejszych nowych funkcji i ulepszeń w następujących wersjach platformy .NET Framework:
- .NET Framework 4.8.1
- .NET Framework 4.8
- .NET Framework 4.7.2
- .NET Framework 4.7.1
- .NET Framework 4.7
- .NET Framework 4.6.2
- .NET Framework 4.6.1
- .NET 2015 i .NET Framework 4.6
- .NET Framework 4.5.2
- .NET Framework 4.5.1
- .NET Framework 4.5
Ten artykuł nie zawiera kompleksowych informacji o każdej nowej funkcji i może ulec zmianie. Aby uzyskać ogólne informacje na temat platformy .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ół .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 Additional Class Libraries and APIs and .NET Framework and Out-of-Band Releases. Zobacz kompletną listę pakietów NuGet dla .NET Framework.
Wprowadzenie do platformy .NET Framework 4.8.1
.NET Framework 4.8.1 jest oparta na poprzednich wersjach platformy .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.1
Program .NET Framework 4.8.1 można pobrać z następujących lokalizacji:
- .NET Framework 4.8.1 Web Installer
- NET Framework 4.8.1 instalator offline
.NET Framework 4.8 można zainstalować na Windows 11, Windows 10 w wersji 21H2, Windows 10 w wersji 21H1, Windows 10 w wersji 20H2 i odpowiednich platform serwera, począwszy od 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 ustawić .NET Framework 4.8.1 w 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
.NET Framework 4.8.1 wprowadza nowe funkcje w następujących obszarach:
- Natywna obsługa Arm64
- zgodne z WCAG2.1 dostępne podpowiedzi
- Windows Forms — ulepszenia ułatwień dostępu
Ulepszona dostępność, która umożliwia aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technologii asystacyjnych, jest głównym celem .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.
platforma .NET Framework 4.8.1 dodaje natywną obsługę arm64 do rodziny platformy .NET Framework. Dlatego inwestycje w rozległy ekosystem aplikacji i bibliotek platformy .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 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. Więcej informacji o tym, co zostało naprawione lub dodane w każdej wersji, można znaleźć w Co nowego w ułatwieniach dostępu w programie .NET Framework.
W tej wersji zarówno Windows Forms, jak i WPF wprowadzono 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 Windows Forms ta obsługa jest dostępna tylko w Windows 11 lub nowszych systemach operacyjnych. Windows Forms jest cienką, zarządzaną nakładką interfejsu API Windows, a nowa funkcjonalność podpowiedzi stała się dostępna tylko w Windows 11. WPF nie ma zależności wersji systemu operacyjnego dla dostępnych etykietek narzędzi.
WPF zaimplementował większość wymagań dotyczących podpowiedzi zgodnych z WCAG2.1 w środowisku .NET Framework 4.8. W tej wersji WPF poprawiono doświadczenie użytkownika, zapewniając, że dymek w bieżącym oknie można łatwo odrzucić przy użyciu klawisza Esc, klawisza Ctrl (samodzielnie) lub kombinacji 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 Windows utworzonym dla platformy .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 Windows Forms rozwiązano szereg 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 aspekty ulepszeń Windows Forms w .NET Framework 4.8.1 to:
Obsługa wzorca tekstowego UIA— W Windows Forms dodano obsługę wzorca tekstowego 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. Dodano tę obsługę do Windows Forms, w tym dla kontrolek TextBox, komórek DataGridView, kontrolek ComboBox i innych.
Rozwiązywanie problemów z kontrastem — w kilku kontrolkach Windows Forms zmienił 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 platformy .NET Framework 4.8
.NET Framework 4.8 opiera się na poprzednich wersjach programu .NET Framework 4.x przez dodanie wielu nowych poprawek i kilku nowych funkcji, a jednocześnie pozostanie bardzo stabilnym produktem.
Pobierz i zainstaluj program .NET Framework 4.8
Program .NET Framework 4.8 można pobrać z następujących lokalizacji:
Instalator offline programu NET Framework 4.8
program .NET Framework 4.8 można zainstalować w Windows 10, Windows 8.1, Windows 7 SP1 i odpowiednich platformach serwerów, począwszy od wersji 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żna używać .NET Framework 4.8 w Visual Studio 2012 lub nowszym, instalując .NET Framework 4.8 Developer Pack.
Co nowego w programie .NET Framework 4.8
.NET Framework 4.8 wprowadza nowe funkcje w następujących obszarach:
- klasy bazowe
- Windows Communication Foundation (WCF)
- Windows Presentation Foundation (WPF)
- Wspólne Środowisko Uruchomieniowe
Ulepszona dostępność, która umożliwia aplikacji zapewnienie odpowiedniego środowiska dla użytkowników technologii asystacyjnych, nadal koncentruje się na .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 biblioteki kryptograficzne systemu 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 kierowanych na .NET Framework 4.8 następujące zarządzane klasy kryptograficzne nie zgłaszają już CryptographicException w tym przypadku:
- MD5Cng
- MD5CryptoServiceProvider
- RC2CryptoServiceProvider
- RijndaelManaged
- RIPEMD160Managed
- SHA256Managed
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 na . 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 platformy .NET Framework 4.5, zestaw clrcompression.dll używa ZLib natywnej zewnętrznej biblioteki do kompresji danych w celu zapewnienia implementacji algorytmu deflate. Program .NET Framework 4.8 w wersji clrcompression.dll został zaktualizowany do 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 . Po dodaniu zachowania usługi do kolekcji , 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 . Ł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 , , , ), 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:
OnServiceFailure:
Kod stanu odpowiedzi HTTP 450 jest zwracany, gdy ServiceHost.State jest większy niż .
Parametry zapytania i przykłady:
OnDispatcherFailure:
Kod stanu odpowiedzi HTTP 455 jest zwracany, gdy stan dowolnego dyspozytora kanału jest większy niż .
OnListenerFailure:
Kod stanu odpowiedzi HTTP 465 jest zwracany, gdy stan dowolnego odbiornika kanału jest większy niż .
NaPrzekroczenieProcentuPrzepustnicy:
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 lub XML, określając ciąg zapytania, taki jak . Ciąg zapytania, taki jak , zwraca pustą stronę HTML.
Windows Presentation Foundation (WPF)
Ulepszenia DPI wysokiej rozdzielczości
W .NET Framework 4.8, WPF dodaje obsługę świadomości DPI w wersji Per-Monitor V2 oraz skalowania DPI w trybie mieszanym. Zobacz High DPI Desktop Application Development on Windows aby uzyskać dodatkowe informacje na temat programowania w wysokiej rozdzielczości DPI.
.NET Framework 4.8 ulepsza obsługę hostowanych HWNDs i współdziałania Windows Forms w aplikacjach High-DPI WPF na platformach, które obsługują skalowanie DPI Mixed-Mode (począwszy od aktualizacji Windows 10 z kwietnia 2018 r.). pl-PL: Gdy hostowane elementy HWND lub kontrolki systemu Windows Forms są tworzone jako okna skalowane w trybie DPI mieszanym przez wywołanie SetThreadDpiHostingBehavior i SetThreadDpiAwarenessContext, mogą one być hostowane w aplikacji WPF Per-Monitor V2 i są odpowiednio rozmiarowane 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 w wersji Per-Monitor v2 umożliwia również umieszczanie kontrolek WPF w oknie natywnym w aplikacji dostosowanej do wysokiego 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 obejmuje następujące zmiany i ulepszenia:
ulepszenia kompilatora JIT. Kompilator just in time (JIT) w programie .NET Framework 4.8 jest oparty na kompilatorze JIT w programie .NET Core 2.1. Wiele optymalizacji i wszystkich poprawek błędów wprowadzonych w kompilatorze .NET Core 2.1 JIT jest uwzględnionych w kompilatorze .NET Framework 4.8 JIT.
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 Windows Defender lub oprogramowania chroniącego przed złośliwym kodem innej firmy. Jednak zestawy ładowane z innych źródeł, takich jak metoda , nie są skanowane i mogą potencjalnie zawierać niewykryte złośliwe oprogramowanie. Począwszy od programu .NET Framework 4.8 działającego w Windows 10, środowisko uruchomieniowe wyzwala skanowanie za pomocą rozwiązań chroniących przed złośliwym kodem, które implementują Antimalware Scan Interface (AMSI).
Co nowego w programie .NET Framework 4.7.2
.NET Framework 4.7.2 zawiera nowe funkcje w następujących obszarach:
Ciągła koncentracja w .NET Framework 4.7.2 dotyczy ulepszonej dostępności, co pozwala aplikacjom zapewnić odpowiednie doświadczenie dla użytkowników technologii wspomagającej. 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 wiele ulepszeń kryptograficznych, lepszą obsługę dekompresji dla archiwów ZIP i nowe interfejsy API kolekcji.
Nowe przeciążenia metod RSA.Create i DSA.Create
Metody i umożliwiają podanie kluczowych parametrów przy tworzeniu nowego wystąpienia klucza lub . 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 i umożliwiają generowanie nowych kluczy lub 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 ma trzy nowe konstruktory z parametrem , 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 jest zdefiniowana w konstruktorze lub jednej z wersji metody , 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 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ść nie działa.
Ponieważ starsza właściwość 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 platformy .NET Framework 4.7.2, obciążenia mogą generować żądania podpisywania certyfikatów (CSR), co umożliwia generowanie żądań certyfikatów w istniejących narzędziach. Jest to często przydatne w scenariuszach testowych.
Aby uzyskać więcej informacji i przykłady kodu, zobacz "Programowe tworzenie żądań podpisywania certyfikatów PKCS#10 i certyfikatów kluczy publicznych X.509" w .NET Blog.
Nowi członkowie SignerInfo
Począwszy od platformy .NET Framework 4.7.2, klasa SignerInfo udostępnia więcej informacji o podpisie. Wartość właściwości można pobrać, aby określić algorytm podpisu cyfrowego używany przez podpisującego. 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 .NET Framework 4.7.2, klasa CryptoStream ma dodatkowy konstruktor, który umożliwia Dispose nie zamykać obudowanego strumienia. Aby pozostawić zawinięty strumień otwarty po usunięciu wystąpienia , wywołaj nowy konstruktor w następujący sposób:
var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);
Dim cStream = New CryptoStream(stream, transform, mode, leaveOpen:=true)
Zmiany w dekompresji w DeflateStream
Począwszy od platformy .NET Framework 4.7.2, implementacja operacji dekompresji w klasie DeflateStream została zmieniona tak, aby domyślnie używać natywnych interfejsów API Windows. Zazwyczaj powoduje to znaczną poprawę wydajności.
Obsługa dekompresji przy użyciu interfejsów API Windows jest domyślnie włączona dla aplikacji przeznaczonych dla platformy .NET Framework 4.7.2. Aplikacje przeznaczone dla starszych wersji platformy .NET Framework, ale działają w programie .NET Framework 4.7.2, mogą wyrazić zgodę 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:
Metody , które rozszerzają wzorzec "try" używany w innych typach kolekcji na te dwa typy. Metody są następujące:
- public bool HashSetT. TryGetValue(T equalValue, out T actualValue)
- public bool SortedSetT. TryGetValue(T equalValue, out T actualValue)
metod rozszerzenia, które konwertują kolekcję na :
-
publicznego statycznego zestawu skrótów TSource ToHashSet TSource (to źródło TSource TSource) - publicznego statycznego zestawu skrótów
ToHashSet Source<(to źródło>TSource>TSource, IEqualityComparer> porównywar TSource)
-
Nowe konstruktory , które pozwalają określić pojemność kolekcji, co przynosi zysk wydajnościowy, gdy znasz rozmiar z góry.
- public HashSet(int pojemność)
- publiczny HashSet(int pojemność, IEqualityComparer porównujący)
Klasa zawiera nowe przeciążenia i 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 platformy .NET Framework 4.7.2 można wykonywać następujące czynności:
Użyj iniekcji opartej na setterze, interfejsie i konstruktorze w handlers i modułów, instancji stron oraz kontrolek użytkownika projektów aplikacji internetowych ASP.NET.
Użyj iniekcji opartej na setterach i interfejsach w uchwytach i modułach, instancjach stron i kontrolkach użytkownika w projektach witryn internetowych 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ść to SameSiteMode.Strict lub SameSiteMode.Lax, ASP.NET dodaje atrybut SameSite do nagłówka set-cookie. Obsługa SameSite dotyczy obiektów , jak również ciasteczek i .
Możesz ustawić obiekt SameSite dla obiektu 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 i , modyfikując plik konfiguracyjny sieci.
<system.web>
<authentication mode="Forms">
<forms cookieSameSite="Lax">
<!-- ... -->
</forms>
</authentication>
<sessionState cookieSameSite="Lax"></sessionState>
</system.web>
Sieć
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 . .NET Framework 4.7.2 udostępnia teraz implementację tych właściwości. Oto właściwości:
SQLClient
Support for Azure Active Directory Universal Authentication and Multifactor authentication
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 łańcuchy połączeń SQLClient, dodając nową wartość "Active Directory Interactive" dla istniejącego słowa kluczowego "Uwierzytelnianie", w celu obsługi uwierzytelniania wieloskładnikowego i uwierzytelniania Azure AD. Nowa metoda interaktywna obsługuje użytkowników natywnych i federacyjnych Azure AD, a także użytkowników-gości 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), które umożliwiają użytkownikom interaktywne wprowadzanie haseł użytkowników bez utrwalania haseł w parametry połączenia.
Aby uzyskać więcej informacji i przykład, zobacz "SQL — obsługa uniwersalnego i wieloskładnikowego uwierzytelniania w Azure AD" w .NET Blog.
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 enklawowej wersji funkcji Always Encrypted klient ma możliwość opcjonalnego wysłania kluczy szyfrowania do bezpiecznej enklawy, która jest bezpiecznym podmiotem obliczeniowym, będącym częścią SQL Server, ale kod SQL Server nie może nią manipulować. Aby obsługiwać szyfrowanie Always Encrypted oparte na enklawie, program .NET Framework 4.7.2 dodaje następujące typy i elementy członkowskie do przestrzeni nazw System.Data.SqlClient:
, który określa identyfikator URI dla enklawy opartej na funkcji Always Encrypted.
, która jest abstrakcyjną klasą, z której wywodzą się wszyscy dostawcy enklaw.
, który hermetyzuje stan sesji danej enklawy.
SqlEnclaveAttestationParameters, który udostępnia parametry zaświadczania używane przez SQL Server, aby uzyskać informacje wymagane do wykonania określonego protokołu zaświadczania.
Następnie plik konfiguracji aplikacji określa konkretną implementację abstrakcyjnej klasy , 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:
Użytkownik tworzy połączenie Always Encrypted z SQL Server, który obsługuje szyfrowanie z wykorzystaniem enklaw w funkcji Always Encrypted. Kierowca kontaktuje się z usługą zaświadczania, aby upewnić się, że łączy się z właściwą enklawą.
Gdy enklawa zostanie sprawdzona, sterownik ustanawia bezpieczny kanał z bezpieczną enklawą hostowaną na SQL Server.
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 wersji .NET Framework 4.7.2, narzędzie diagnostyczne może zlokalizować ResourceDictionaries, które zostały 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 "Edytuj i kontynuuj", Visual Studio umożliwia użytkownikowi edytowanie elementu ResourceDictionary z zamiarem zastosowania 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ą, . 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 jest włączony, a zmienna środowiskowa jest ustawiona.
znajdowanie właścicieli ResourceDictionary
Począwszy od .NET Framework 4.7.2, asystent diagnostyczny może zlokalizować właścicieli danego ResourceDictionary. (Funkcja jest używana przez asystentów diagnostycznych, a nie przez aplikacje produkcyjne). Za każdym razem, gdy zostanie wprowadzona zmiana ResourceDictionary, WPF automatycznie znajdzie wszystkie DynamicResource odwołania, które mogą mieć wpływ na zmianę.
Asystent diagnostyczny, taki jak funkcja "Edit-and-Continue" 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ść odnosi się do słownika (bezpośrednio lub pośrednio za pośrednictwem właściwości ). Trzy nowe metody statyczne zaimplementowane w klasie System.Windows.Diagnostics.ResourceDictionaryDiagnostics, po jednym dla każdego z typów podstawowych, które mają właściwość Resources, obsługują ten krok:
Te metody zwracają puste wyliczenie, chyba że jest włączony, a zmienna środowiskowa 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 "Edit-and-Continue" Visual Studio, może chcieć zaktualizować wszystkie zastosowania zasobu, gdy jego wartość w ResourceDictionary się zmienia. WPF wykonuje to automatycznie dla DynamicResource odwołań, ale celowo nie robi tego dla StaticResource odwołań. Począwszy od programu .NET Framework 4.7.2, asystent diagnostyczny może użyć tych powiadomień, aby zlokalizować te zastosowania zasobu statycznego.
Powiadomienie jest implementowane przez nowe zdarzenie :
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 opisują rozwiązanie i wskazują obiekt i właściwość hostujące odwołanie StaticResource oraz 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 akcesorium jest ignorowane), chyba że jest włączona, a zmienna środowiskowa jest ustawiona.
ClickOnce
Aplikacje z uwzględnieniem HDPI dla Windows Forms, Windows Presentation Foundation (WPF) oraz Visual Studio Tools dla pakietu Office (VSTO) mogą być wdrażane 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 Windows Forms aplikacji poprzednie obejście ustawienia rozpoznawania dpi w pliku konfiguracji aplikacji zamiast manifestu aplikacji nie jest już konieczne, aby wdrożenie technologii ClickOnce zakończyło się pomyślnie.
Co nowego w programie .NET Framework 4.7.1
program .NET Framework 4.7.1 zawiera nowe funkcje w następujących obszarach:
- klasy bazowe
- Common Language Runtime (CLR)
- sieci komputerowe
- ASP.NET
Ponadto głównym celem .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
Support for .NET Standard 2.0
.NET Standard definiuje zestaw interfejsów API, które muszą być dostępne w każdej implementacji .NET, która obsługuje wersję standardu. .NET Framework 4.7.1 w pełni obsługuje .NET Standard 2.0 i dodaje about 200 interfejsów API zdefiniowanych w .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 platformy .NET Framework obsługują .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 "BCL - .NET Standard 2.0 Support" 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 i zastąpić jej i . 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 środowiska uruchomieniowego
Klasa System.Runtime.CompilerServices.RuntimeFeature udostępnia mechanizm określania, czy wstępnie zdefiniowana funkcja jest obsługiwana w danej implementacji .NET w czasie kompilacji lub w czasie wykonywania. W czasie kompilacji kompilator może sprawdzić, czy istnieje określone pole, aby określić, czy funkcja jest obsługiwana; jeśli tak, może emitować kod, który korzysta z tej funkcji. W czasie wykonywania aplikacja może wywołać metodę przed emisją kodu. Aby uzyskać więcej informacji, zobacz, jak dodać metodę pomocniczą do opisania funkcji obsługiwanych przez środowisko uruchomieniowe.
Typy krotki wartości można serializować
Począwszy od .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 i , do typów wartownikowych. Aby uzyskać więcej informacji, zobacz "Compiler - ValueTuple is Serializable" we wpisie na blogu .NET Framework 4.7.1 Runtime and Compiler Features.
obsługa odwołań tylko do odczytu
.NET Framework 4.7.1 dodaje System.Runtime.CompilerServices.IsReadOnlyAttribute. Ten atrybut jest używany przez kompilatory języka do oznaczania elementów członkowskich, które mają typy zwrotów referencyjnych tylko do odczytu lub parametry tylko do odczytu. Aby uzyskać więcej informacji, zobacz "Kompilator — obsługa funkcji ReadOnlyReferences" w .NET Framework 4.7.1 Runtime and Compiler Features wpis w blogu. Aby uzyskać informacje na temat wartości zwracanych ref, zobacz Ref return values i ref locals i Ref return values (Visual Basic).
Środowisko uruchomieniowe języka wspólnego (CLR)
ulepszenia wydajności zbierania śmieci
Zmiany w funkcji zarządzania pamięcią (GC) w programie .NET Framework 4.7.1 poprawiają ogólną wydajność, zwłaszcza w zakresie alokacji sterty obiektów dużych rozmiarów (LOH). W programie .NET Framework 4.7.1 oddzielne blokady są używane na potrzeby 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 - GC Performance Improvements" (Ulepszenia wydajności środowiska uruchomieniowego — GC) w .NET Framework 4.7.1 Runtime and Compiler Features wpis w blogu.
Sieć
obsługa algorytmu SHA-2 dla Message.HashAlgorithm
W wersji .NET Framework 4.7 i wcześniejszych, właściwość Message.HashAlgorithm obsługiwała tylko wartości HashAlgorithm.Md5 i HashAlgorithm.Sha. Począwszy od .NET Framework 4.7.1, HashAlgorithm.Sha256, HashAlgorithm.Sha384 i HashAlgorithm.Sha512 są również obsługiwane. To, czy ta wartość jest rzeczywiście używana, zależy od MSMQ, ponieważ samo wystąpienie 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 w blogu .NET Framework 4.7.1 ASP.NET and Configuration features.
ASP.NET
Kroki wykonania w aplikacjach ASP.NET
ASP.NET przetwarza żądania we wstępnie zdefiniowanym 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 przekazywać kontekstu wykonywania z powodu przełączania między wątkami natywnymi a zarządzanymi. Zamiast tego ASP.NET selektywnie przekazuje tylko HttpContext. Począwszy od .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 «funkcja kroku wykonywania ASP.NET» w .NET Framework 4.7.1 ASP.NET i funkcje konfiguracji wpis na blogu.
Parsowanie HttpCookie w ASP.NET
.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 przypisania wartości plików cookie, takich jak data wygaśnięcia i ścieżka. Aby uzyskać więcej informacji, zobacz "Analizowanie HttpCookie w ASP.NET" we wpisie na blogu .NET Framework 4.7.1 ASP.NET and Configuration Features.
SHA-2 opcje haszowania dla poświadczeń uwierzytelniania formularzy w ASP.NET
W .NET Framework 4.7 i starszych wersjach ASP.NET umożliwiało deweloperom przechowywanie poświadczeń użytkownika w plikach konfiguracji, przy użyciu skrótów haseł za pomocą algorytmu MD5 lub SHA1. Począwszy od platformy .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, Managed Identities for Azure resources jest zalecaną metodą uwierzytelniania.
Co nowego w programie .NET Framework 4.7
.NET Framework 4.7 zawiera nowe funkcje w następujących obszarach:
- klasy bazowe
- sieci komputerowe
- ASP.NET
- Windows Communication Foundation (WCF)
- Windows Forms
- Windows Presentation Foundation (WPF)
Aby uzyskać listę nowych interfejsów API dodanych do platformy .NET Framework 4.7, zobacz .NET Framework 4.7 API Changes on GitHub .. Aby uzyskać listę ulepszeń funkcji i poprawek błędów w programie .NET Framework 4.7, zobacz .NET Framework 4.7 Lista zmian GitHub. Aby uzyskać więcej informacji, zobacz Announcing .NET Framework 4.7 w blogu .NET.
Klasy bazowe
.NET Framework 4.7 poprawia serializację przez DataContractJsonSerializer:
ulepszone funkcje za pomocą kryptografii krzywej eliptycznej (ECC)
W programie .NET Framework 4.7 metody ImportParameters(ECParameters) zostały dodane do ECDsa i ECDiffieHellman klasy, aby umożliwić obiektowi reprezentowanie już ustanowionego klucza. Dodano również metodę do eksportowania klucza przy użyciu jawnych parametrów krzywej.
.NET Framework 4.7 dodaje również obsługę dodatkowych krzywych (w tym zestawu krzywej Brainpool) i dodał wstępnie zdefiniowane definicje ułatwiające tworzenie za pośrednictwem nowych metod Create i Create factory.
Można zobaczyć przykład ulepszeń kryptografii w .NET Framework 4.7 na GitHub.
DataContractJsonSerializer - lepsza obsługa znaków kontrolnych
W .NET Framework 4.7 klasa DataContractJsonSerializer serializuje znaki kontrolne zgodnie ze standardem ECMAScript 6. To zachowanie jest domyślnie włączone dla aplikacji przeznaczonych dla platformy .NET Framework 4.7 i jest funkcją opt-in dla aplikacji uruchamianych w środowisku .NET Framework 4.7, ale które są przeznaczone dla poprzedniej wersji platformy .NET Framework. Aby uzyskać więcej informacji, przejdź do sekcji Zgodność aplikacji.
Sieć
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 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 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 w pobliżu skonfigurowanego limitu bajtów prywatnych dla procesu lub gdy maszyna jest niska w całkowitej 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 .
Reakcje Limitu Pamięci. Domyślnie ASP.NET próbuje przyciąć pamięć podręczną obiektów i okresowo wywoływać GC.Collect, gdy limit procesu prywatnego bajtu jest bliski. W przypadku niektórych aplikacji częstotliwość wywołań do lub ilość pamięci podręcznej, która jest przycinana, jest nieefektywna. Deweloperzy mogą teraz zastąpić lub uzupełnić domyślne zachowanie przez subskrybowanie implementacji do monitora pamięci aplikacji.
Windows Communication Foundation (WCF)
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 platformy .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 z i DuplexChannelBinder.
- Zwiększona niezawodność operacji serializacji podczas wywoływania metody .
- Zwiększona niezawodność podczas usuwania kelnera przez wywołanie metody ChannelSynchronizer.RemoveWaiter.
Windows Forms
W programie .NET Framework 4.7 Windows Forms zwiększa obsługę monitorów o wysokiej rozdzielczości DPI.
obsługa wysokiej rozdzielczości DPI
Począwszy od aplikacji przeznaczonych dla platformy .NET Framework 4.7, platforma .NET oferuje wysoką obsługę dpi i dynamicznej rozdzielczości 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 <System. Windows. Forms.ConfigurationSection> w pliku konfiguracji aplikacji. Aby uzyskać więcej informacji na temat dodawania obsługi wysokiej rozdzielczości DPI i dynamicznej rozdzielczości DPI do aplikacji Windows Forms, zobacz Obsługa wysokiej rozdzielczości DPI w Windows Forms.
Windows Presentation Foundation (WPF)
W programie .NET Framework 4.7 WPF obejmuje następujące ulepszenia:
Support dla stosu touch/stylus opartego na komunikatach Windows WM_POINTER
Teraz możesz użyć stosu touch/stylus opartego na komunikatach WM_POINTER zamiast platformy Windows Ink Services Platform (WISP). Jest to funkcja opt-in w programie .NET Framework. Aby uzyskać więcej informacji, przejdź do sekcji Zgodność aplikacji.
Nowa implementacja interfejsów API drukowania WPF
interfejsy API drukowania WPF w klasie System.Printing.PrintQueue wywołają interfejs API Windows Print Document Package API zamiast przestarzałego interfejsu API XPS Print API. 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:
kategorie znaków
kryptografia
SqlClient
ClickOnce
Konwertowanie aplikacji Windows Forms i WPF do aplikacji platformy UWP
Ulepszenia debugowania
Aby uzyskać listę nowych interfejsów API dodanych do platformy .NET Framework 4.6.2, zobacz .NET Framework 4.6.2 API Changes on GitHub ( Aby uzyskać listę ulepszeń funkcji i poprawek błędów w programie .NET Framework 4.6.2, zobacz .NET Framework 4.6.2 List of Changes on GitHub. Aby uzyskać więcej informacji, zobacz Announcing .NET Framework 4.6.2 w blogu .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 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:
jest zawarty w atrybucie weryfikacji.
Plik zasobu jest przechowywany w folderze App_LocalResources.
Nazwa zlokalizowanego pliku zasobów ma formę nazwa, gdzie nazwa jest nazwą kultury w formacie kod_językakod_kraju/regionu lub kod_języka.
Nazwa klucza zasobu to ciąg przypisany do atrybutu , 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 . 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 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 korzystanie z metod zwracających zadania z dostawcami magazynu stanów sesji, dzięki czemu aplikacje ASP.NET mogą uzyskać korzyści skalowalności wynikające z zastosowania asynchroniczności. Aby obsługiwać operacje asynchroniczne z dostawcami magazynu stanów sesji, ASP.NET zawiera nowy interfejs, System.Web.SessionState.ISessionStateModule, który dziedziczy z IHttpModule i umożliwia deweloperom implementowanie własnego modułu stanu 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 zawiera dwie nowe metody, i , które mogą służyć do obsługi operacji asynchronicznych.
Obsługa asynchroniczna dla dostawców pamięci podręcznej wyników.
Począwszy od platformy .NET Framework 4.6.2, metody zwracające zadania mogą być używane z dostawcami wyjściowej pamięci podręcznej w celu zapewnienia korzyści ze skalowalności asynchronicznej. 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:
Klasa , która dziedziczy z i umożliwia deweloperom implementację asynchronicznego dostawcy pamięci podręcznej dla danych wyjściowych.
Klasa , która udostępnia metody pomocnicze do konfigurowania wyjściowej pamięci podręcznej.
18 nowych metod w klasie . Należą do nich , , , , , , , , , , , , , i .
2 nowe metody w klasie : i .
2 nowe metody w klasie : i .
2 nowe metody w klasie : i .
W klasie metoda .
Metoda w ramach .
Kategorie znaków
Znaki w programie .NET Framework 4.6.2 są klasyfikowane na podstawie Unicode Standard, wersja 8.0.0. W programie .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ę oraz typy i metody, które na nim polegają. Należą do nich klasa StringInfo, przeciążona metoda Char.GetUnicodeCategory oraz klasy character rozpoznane przez aparat wyrażeń regularnych .NET Framework. Porównanie znaków i sortowanie ciągów nie jest dotknięte tą zmianą i nadal opiera się na podstawowym systemie operacyjnym lub, w systemach Windows 7, na danych znakowych dostarczanych 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
.NET Framework 4.6.2 dodaje obsługę certyfikatów X509 DSA (Digital Signature Algorithm), których klucze przekraczają limit FIPS 186-2 1024-bitowy.
Oprócz obsługi większych rozmiarów kluczy FIPS 186-3, .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ę .
Zgodnie z ostatnimi zmianami w klasie RSA w .NET Framework 4.6 i klasie ECDsa w .NET Framework 4.6.1, abstrakcyjna klasa bazowa DSA w .NET Framework 4.6.2 ma dodatkowe metody, które pozwalają wywołującym na korzystanie z tej funkcji bez rzutowania. Możesz wywołać metodę rozszerzenia 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 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
.NET Framework 3.5 dodano obsługę wymiany klucza Diffie-Hellmana krzywych eliptycznych z trzema różnymi funkcjami wyprowadzania klucza (KDF). Dane wejściowe procedur i same procedury zostały skonfigurowane za pośrednictwem właściwości obiektu . 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 bazowej 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 Windows (CNG) dodała obsługę przechowywania utrwalonego kluczy symetrycznych i używania przechowywanych sprzętowo kluczy symetrycznych oraz .NET Framework 4.6.2 umożliwiła 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 ).
Obsługa szyfrowania symetrycznego utrwalonego klucza istnieje dla algorytmów AES () i 3DES (). 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 dodaje obsługę klasy SignedXml dla metod podpisu PKCS#1 RSA-SHA256, RSA-SHA384 i RSA-SHA512 oraz algorytmów skrótu referencyjnego SHA256, SHA384 i SHA512.
Stałe identyfikatora URI są uwidocznione na :
| 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 w 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 nie jest już konieczna.
SqlClient
.NET Framework Dostawca danych for SQL Server (System.Data.SqlClient) zawiera następujące nowe funkcje w programie .NET Framework 4.6.2:
Pule połączeń i limity czasu w bazach danych Azure SQL
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 SQL Server Connection Pooling (ADO.NET).
Takie zachowanie nie jest pożądane podczas nawiązywania połączenia z bazami danych Azure SQL, ponieważ próby połączenia mogą zakończyć się niepowodzeniem z błędami przejściowymi, które są zwykle szybko odzyskiwane. Aby lepiej zoptymalizować proces ponawiania próby połączenia, usunięto mechanizm blokujący pulę połączeń w przypadku niepowodzenia połączeń z bazami danych Azure SQL.
Dodanie nowego słowa kluczowego umożliwia wybranie okresu blokowania najlepiej odpowiedniego dla aplikacji. Wartości obejmują:
Okres blokowania puli połączeń dla aplikacji łączącej się z Azure SQL Database jest wyłączony, a okres blokowania puli połączeń dla aplikacji łączącej się z dowolnym innym wystąpieniem SQL Server jest włączony. Jest to wartość domyślna. Jeśli nazwa punktu końcowego serwera kończy się dowolną z następujących wartości, uznaje się za bazy danych Azure SQL.
.database.windows.net
.database.chinacloudapi.cn
.database.usgovcloudapi.net
.database.cloudapi.de
Okres blokowania puli połączeń jest zawsze włączony.
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ść ustawiona na (która jest wartością domyślną), jeśli to samo zapytanie jest wywoływane wiele razy, klient pobiera metadane parametrów z 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 .
Windows Communication Foundation
W programie .NET Framework 4.6.2 Windows Communication Foundation została ulepszona 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 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 platformy .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 <runtime> sekcji 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 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 używa typu zamiast typu do deserializacji danych daty i godziny. obsługuje wiele reguł korekty, co umożliwia pracę z historycznymi danymi strefy czasowej; nie.
Aby uzyskać więcej informacji na temat struktury 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 (ustawienie domyślne), istnieje możliwość, aby klienci korzystający z 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 , ale inna usługa na tym komputerze z uprawnieniami administratora nasłuchuje w . Po ustawieniu tej aplikacji na klient podejmie próbę nawiązania połączenia z niewłaściwą usługą. Po ustawieniu ustawienia aplikacji na klient będzie zawsze łączyć się z najlepszą zgodną usługą.
Notatka
Klienci korzystający z 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.
Właściwość
Właściwość
Sekcja transportu sekcji netTcpBinding
Sekcja sslStreamSecurity w sekcji customBinding
Windows Presentation Foundation (WPF)
W programie .NET Framework 4.6.2 Windows Presentation Foundation została ulepszona w następujących obszarach:
sortowania grup
Aplikacja, która używa obiektu 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 i opisują sposób sortowania kolekcji grup utworzonych przez obiekt . Jest to analogiczne do sposobu, w jaki identycznie nazwane właściwości opisują sposób sortowania elementów danych.
Dwie nowe właściwości statyczne klasy , i , 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 Windows 10, gdy dane wejściowe dotyku są odbierane przez kontrolkę, która może przyjmować wprowadzanie tekstowe.
W poprzednich wersjach platformy .NET Framework aplikacje WPF nie mogą zdecydować się na śledzenie fokusu bez wyłączania obsługi gestów pióra/dotyku WPF. W związku z tym aplikacje WPF muszą wybrać pełną obsługę dotykową WPF lub polegać na podwyższeniu poziomu myszy Windows.
DPI dla każdego monitora
Aby zapewnić obsługę niedawnego rozprzestrzeniania środowisk o wysokiej rozdzielczości DPI i hybrydowej DPI dla aplikacji WPF, WPF w programie .NET Framework 4.6.2 umożliwia rozpoznawanie monitora. Zobacz przykłady i przewodnik dla deweloperów na GitHub, aby uzyskać więcej informacji o tym, jak umożliwić aplikacji WPF rozpoznawanie DPI na poszczególnych monitorach.
W poprzednich wersjach platformy .NET Framework aplikacje WPF są świadome systemowego DPI. 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 przez dodanie instrukcji konfiguracji do <runtime> sekcji 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 platformy .NET Framework 4.5, platforma WF obsługuje wyrażenia języka C# zarówno w projektancie Visual Studio, jak i w przepływach pracy kodu. Rehosted Workflow Designer to kluczowa funkcja WF, która pozwala projektantowi przepływu pracy znajdować się w aplikacji spoza Visual Studio (na przykład w WPF). Windows Workflow Foundation umożliwia obsługę wyrażeń w języku C# i funkcji IntelliSense w ponownie hostowanym Projektancie Przepływu Pracy. Aby uzyskać więcej informacji, zobacz blog Windows Workflow Foundation.
Availability of IntelliSense when a customer rebuilds a workflow project from Visual Studio W wersjach .NET Framework wcześniejszych niż 4.6.2 funkcja IntelliSense projektanta WF jest uszkodzona, gdy klient ponownie kompiluje projekt przepływu pracy z 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 . .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 powoduje wyjątek z komunikatem: "Ta implementacja nie jest częścią zweryfikowanych algorytmów kryptograficznych platformy Windows FIPS".
Ulepszenia przepływu pracy podczas korzystania z aktualizacji dynamicznej za pomocą projektanta przepływu pracy 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 . W wersjach .NET Framework przed .NET Framework 4.6.2 ładowanie pliku XAML w Visual Studio dla przepływu pracy, który został zapisany 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 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
Windows teraz oferuje funkcje umożliwiające korzystanie z istniejących aplikacji klasycznych Windows, w tym aplikacji WPF i Windows Forms, do platformy uniwersalnej 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 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 Windows 10.
Ulepszenia debugowania
Interfejs API debugowania unmanaged został rozszerzony w programie .NET Framework 4.6.2 w celu przeprowadzenia dodatkowej analizy, gdy jest zgłaszany NullReferenceException, dzięki czemu można określić, która zmienna w jednym wierszu kodu źródłowego jest null. Aby obsłużyć ten scenariusz, do niezarządzanego API debugowania dodano następujące interfejsy API.
ICorDebugCode4, ICorDebugVariableHomei ICorDebugVariableHomeEnum interfejsy, które eksponują natywne lokacje zmiennych zarządzanych. Dzięki temu debugery mogą przeprowadzić analizę przepływu kodu, gdy wystąpi i pracować wstecz w celu określenia zmiennej zarządzanej odpowiadającej lokalizacji natywnej .
Metoda ICorDebugType2::GetTypeID udostępnia mapowanie elementu ICorDebugType na COR_TYPEID, co umożliwia debugerowi uzyskanie COR_TYPEID bez wystąpienia klasy ICorDebugType. Istniejące interfejsy API dla COR_TYPEID można następnie użyć do określenia układu klasy typu.
Co nowego w programie .NET Framework 4.6.1
program .NET Framework 4.6.1 zawiera nowe funkcje w następujących obszarach:
kryptografia
profilowanie
NGen
Aby uzyskać więcej informacji na temat platformy .NET Framework 4.6.1, zobacz następujące tematy:
zgodność aplikacji w wersji 4.6.1
różnice interfejsu API .NET Framework (na GitHub)
Kryptografia: obsługa certyfikatów X509 zawierających ECDSA
.NET Framework 4.6 dodał obsługę RSACng dla certyfikatów X.509. .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 .NET Framework opakowuje wywołania istniejących funkcji 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 dodano 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
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ć ciąg połączenia, aby uwzględniał "MultisubnetFailover=true", wskazując, że łączyła się z Grupą Dostępności AlwaysOn. Bez ustawienia słowa kluczowego połączenia na aplikacja 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ć na . 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)
Windows Presentation Foundation zawiera szereg ulepszeń i zmian.
ulepszona wydajność
Opóźnienie w wyzwalaniu zdarzeń dotykowych zostało poprawione w .NET Framework 4.6.1. Ponadto wpisywanie w kontrolce nie wiąże już wątku renderowania podczas szybkiego wprowadzania danych.
Ulepszenia sprawdzania pisowni
Moduł sprawdzania pisowni w WPF został zaktualizowany w 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 Windows przed Windows 8.1.
Podobnie jak w poprzednich wersjach .NET Framework język kontrolki TextBox lub blok RichTextBox jest wykrywany przez wyszukanie informacji w następującej kolejności:
, 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 platformy .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 wykluczonych wyrazów i list autokorekty. Są one obsługiwane w 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 dostarczone do WPF w aplikacjach powinny nadal używać plików lex.
przykładów
Istnieje kilka przykładów WPF w repozytorium Microsoft/WPF-Samples GitHub. Pomóż nam ulepszyć nasze przykłady, wysyłając nam pull request lub otwierając problem GitHub.
rozszerzenia DirectX
WPF zawiera pakiet NuGet który udostępnia nowe implementacje D3DImage, które ułatwiają współdziałanie z zawartością DX10 i Dx11. Kod tego pakietu został otwarty i jest dostępny on GitHub.
Windows Workflow Foundation: Transakcje
Metoda 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 . 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 , 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ć promotora transakcji można za pomocą właściwości . Kiedy transakcja jest promowana, promotor transakcji dostarcza tablicę , która reprezentuje promowany token. Aplikacja może uzyskać promowany token dla transakcji innej niż MSDTC promowana za pomocą metody .
Użytkownicy nowego przeciążenia 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 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 , , , , i . 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 platformy .NET Framework użytkownik skopiuje wszystkie moduły i obrazy natywne z profilowanej maszyny 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 pliku PDB obrazu natywnego generowanego przez maszynę A na maszynę B i użycie interfejsów API dostępu do interfejsu debugowania do odczytywania źródłowego-to-IL mapowania IL PDB i mapowania natywnego PDB obrazu do natywnego. 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 w programie .NET 2015
.NET 2015 przedstawia .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
.NET 2015 obejmuje ASP.NET Core, które jest odchudzoną implementacją .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 platformy .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 nowej platformie .NET Framework. Jednak w celu utworzenia aplikacji korzystającej z wzorca MVC 6 lub SignalR 3 należy użyć systemu projektu w Visual Studio 2015 lub nowszym.
Aby uzyskać informacje, zobacz ASP.NET Core.
ASP.NET Updates
API oparte na zadaniach dla asynchronicznego opróżniania odpowiedzi
ASP.NET teraz udostępnia prosty interfejs API bazujący na zadaniach do asynchronicznego wypłukiwania odpowiedzi, HttpResponse.FlushAsync, który umożliwia wypłukiwanie odpowiedzi asynchronicznie zgodnie z obsługą
async/awaitjęzyka.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, skoncentrowane na kodzie 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 . 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 .
<appSettings> <add key=" aspnet:EnableAsyncModelBinding" value="true|false" /> </appSettings>W aplikacjach, które są uruchamiane na .NET Framework 4.6, domyślnie jest ustawione
true. W przypadku aplikacji działających w programie .NET Framework 4.6, które są przeznaczone dla starszej wersji platformy .NET Framework, jest to domyślniefalse. Można ją włączyć, ustawiając ustawienie konfiguracji na .HTTP/2 Support (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 Windows, w usługach IIS i w ASP.NET, aby włączyć protokół HTTP/2. Aby używać protokołu HTTP/2 z ASP.NET, należy korzystać z systemu Windows 10.
Protokół HTTP/2 jest również obsługiwany i domyślnie włączony dla aplikacji platformy uniwersalnej systemu Windows (UWP) Windows 10 korzystających z interfejsu API System.Net.Http.HttpClient.
Aby umożliwić korzystanie 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 (usługi IIS w 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 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
.NET Framework 4.5 wprowadził losowy algorytm skrótu ciągu. Jednak nie był obsługiwany przez ASP.NET, ponieważ niektóre funkcje ASP.NET zależą od stabilnego kodu skrótu. W programie .NET Framework 4.6 obsługiwane są algorytmy skrótów losowych ciągów. Aby włączyć tę funkcję, użyj ustawienia konfiguracji .
<appSettings> <add key="aspnet:UseRandomizedStringHashAlgorithm" value="true|false" /> </appSettings>
ADO.NET
.NET ADO obsługuje teraz funkcję Always Encrypted dostępną w SQL Server 2016. W przypadku funkcji Always Encrypted SQL Server może wykonywać operacje na zaszyfrowanych danych, a co najlepsze, klucz szyfrowania znajduje się w aplikacji 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 (Database Engine) i Always Encrypted (programowanie klienta).
64-bitowy kompilator JIT dla kodu zarządzanego
.NET Framework 4.6 oferuje 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 kompilator 64-bitowy jest włączony dla 64-bitowych procesów działających 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 , 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 Visual Studio), a także zapisuje pamięć fizyczną.
zmiany biblioteki klas bazowych
Do platformy .NET Framework 4.6 dodano wiele nowych interfejsów API w celu włączenia kluczowych scenariuszy. Obejmują one następujące zmiany i dodatki:
implementacjeIReadOnlyCollection
Dodatkowe kolekcje, takie jak i , implementują .
CultureInfo.CurrentCulture i CultureInfo.CurrentUICulture
Właściwości i są teraz do odczytu i zapisu, a nie tylko do odczytu. Jeśli przypiszesz nowy obiekt do tych właściwości, zmienia się również kultura bieżącego wątku zdefiniowana przez właściwość i bieżącą kulturę wątku interfejsu użytkownika zdefiniowaną przez właściwości .
Ulepszenia zarządzania pamięcią (GC)
Klasa zawiera teraz metody i , które pozwalają uniemożliwić zbieranie śmieci podczas wykonywania ścieżki krytycznej.
Nowa wersja przeciążenia metody 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 zawiera teraz szereg typów z obsługą SIMD, takich jak , , , , , i .
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
Aktualizowany jest interfejs API System.Security.Cryptography, aby obsługiwać interfejsy API kryptografii Windows CNG. Poprzednie wersje platformy .NET Framework polegały całkowicie na starszej wersji interfejsów API kryptografii 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.
.NET Framework 4.6 zawiera następujące nowe ulepszenia obsługujące interfejsy API kryptografii CNG Windows:
Zestaw metod rozszerzeń dla certyfikatów X509, i , 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 , 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 takiego jak 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 kryptografii 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 w celu obsługi konwertowania wartości daty i godziny na lub z godziny systemu Unix:
przełączniki zgodności
Klasa dodaje nową funkcję zgodności, która umożliwia autorom bibliotek zapewnienie jednolitego mechanizmu rezygnacji dla nowych funkcji 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 biblioteki 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ą ), którą definiuje biblioteka zależna. Przełącznik jest zawsze domyślnie . Ustawienie przełącznika na go włącza. Jawne ustawienie przełącznika na 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 IfKorzystne 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 wykorzystujących .NET Framework 4.6 Task i Task<TResult> obiekty dziedziczą kulturę oraz kulturę interfejsu użytkownika wątku wywołującego. Nie ma to wpływu na zachowanie aplikacji przeznaczonych dla poprzednich wersji platformy .NET Framework lub które nie są przeznaczone dla określonej wersji platformy .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję "Operacje asynchroniczne oparte na kulturze i zadaniach" tematu klasy .
Klasa umożliwia reprezentowanie danych otoczenia lokalnych dla danego przepływu sterowania asynchronicznego, takiego jak metoda . Może służyć do utrwalania danych między wątkami. Można również zdefiniować metodę wywołania zwrotnego, która jest powiadamiana za każdym razem, gdy dane kontekstowe zmieniają się, albo dlatego, że właściwość została jawnie zmieniona, albo ponieważ wątek napotkał przejście kontekstu.
Trzy wygodne metody, , i , zostały dodane do wzorca asynchronicznego opartego na zadaniach (TAP) w celu zwrócenia ukończonych zadań w określonym stanie.
Klasa obsługuje teraz asynchroniczną komunikację z nowym . metoda.
EventSource obsługuje teraz zapisywanie w dzienniku zdarzeń
Teraz możesz użyć klasy 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 .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 została dodana do klasy .
Windows Presentation Foundation (WPF)
ulepszenia interfejsu HDPI
Obsługa interfejsu HDPI w systemie 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 przeznaczone dla wcześniejszych wersji platformy, ale działają w programie .NET Framework 4.6, mogą wyrazić zgodę na nowe zachowanie, dodając następujący wiersz do <runtime> sekcji pliku app.config:
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotApplyLayoutRoundingToMarginsAndBorderThickness=false" />Okna WPF obejmujące wiele monitorów z różnymi ustawieniami DPI (konfiguracja wielo-DPI) są teraz całkowicie renderowane bez zaciemnionych obszarów. Możesz zrezygnować z tego zachowania, dodając następujący wiersz do sekcji pliku app.config, aby wyłączyć to nowe zachowanie:
<add key="EnableMultiMonitorDisplayClipping" value="true"/>Dodano obsługę automatycznego ładowania odpowiedniego kursora na podstawie ustawienia DPI do System.Windows.Input.Cursor.
Touch jest lepszy
Raporty klientów dotyczące Connect, które wskazują, że dotyk powoduje nieprzewidywalne zachowanie, zostały rozwiązane w programie .NET Framework 4.6. Próg dwukrotnego naciśnięcia aplikacji Windows Store i aplikacji WPF jest teraz taki sam w 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 Windows 8.1 i nowszych wersjach. 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ść na .
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ść 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 . 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 na :
<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 pliku app.config:
<add key="microsoft:WorkflowServices:FilterResumeTimeoutInSeconds" value="60"/>Wartość domyślna to 60 sekund. Jeśli 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 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 . W tym celu dodaj następujący klucz do sekcji pliku app.config:
<add key="Transactions:IncludeDistributedTransactionIdInExceptionMessage" value="true"/>Wartość domyślna to .
sieci komputerowe
Ponowne użycie gniazda
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 .NET korzystanie z nowego zachowania. W poprzednich wersjach 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:
Wartość wyliczenia .
Właściwość .
Domyślnie właściwość jest , chyba że wartość klucza rejestru jest ustawiona na wartość 0x1. Aby włączyć ponowne użycie portu lokalnego w połączeniach HTTP, ustaw właściwość na . Powoduje to, że wszystkie wychodzące połączenia gniazda TCP z HttpClient i HttpWebRequest używają nowej opcji gniazda Windows 10, SO_REUSE_UNICASTPORT, która umożliwia ponowne użycie portu lokalnego.
Deweloperzy piszący aplikację wykorzystującą wyłącznie gniazda mogą określić opcję podczas wywoływania metody, takiej jak , 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ść, , została dodana do klasy , aby lepiej obsługiwać międzynarodowe nazwy domen i PunyCode.
Zmiana rozmiaru kontrolki Windows Forms.
Ta funkcja została rozszerzona w programie .NET Framework 4.6 w celu uwzględnienia typów DomainUpDown, NumericUpDown, DataGridViewComboBoxColumn, DataGridViewColumn oraz ToolStripSplitButton oraz prostokąta określonego przez właściwość Bounds, używanego podczas rysowania UITypeEditor.
Jest to funkcja zgody. Aby ją włączyć, ustaw element na w pliku konfiguracji aplikacji (app.config):
<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>obsługa kodowań stron kodowych
.NET Core obsługuje przede wszystkim kodowanie Unicode, a domyślnie zapewnia ograniczoną obsługę kodowania stron kodu. Możesz dodać obsługę kodowań stron kodowych dostępnych w programie .NET Framework, a nieobsługiwanych w programie .NET Core, rejestrując te kodowania stron kodowych za pomocą metody Encoding.RegisterProvider. Aby uzyskać więcej informacji, zobacz .
.NET Native
Aplikacje platformy uniwersalnej systemu Windows (UWP) 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 Compiling Apps with .NET Native( Aby zapoznać się z omówieniem .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 z Visual Studio 2015 lub nowszym. Aby uzyskać więcej informacji, zobacz
Aby obsługiwać debugowanie .NET aplikacji natywnych, dodano nowe interfejsy i wyliczenia do niezarządzanych interfejsów API debugowania. Aby uzyskać więcej informacji, zobacz Debugowanie (niezarządzana dokumentacja interfejsu API).
Open-source .NET Framework packages
.NET Podstawowe pakiety, takie jak kolekcje niezmienne, interfejsy API SIMD i interfejsy API sieci, takie jak te znajdujące się w przestrzeni nazw System.Net.Http, są teraz dostępne jako pakiety open source w GitHub. Aby uzyskać dostęp do kodu, zobacz .NET w witrynie GitHub. Aby uzyskać więcej informacji i dowiedzieć się, jak przyczyniać się do tych pakietów, zobacz Wprowadzenie do .NET, Strona główna .NET na GitHubie.
Co nowego w programie .NET Framework 4.5.2
Nowe interfejsy API dla aplikacji ASP.NET. Nowe metody i 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ń i ; są bardziej wydajne i niezawodne.
Metoda 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 i 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 (które zgłaszają wyjątki, jeśli nagłówki zostały zapisane), powiodą się.
Zmiana rozmiaru kontrolek Windows Forms. 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 na 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 (i w związku z tym implementujący interfejs ) może użyć nowej metody w celu zażądania następujących elementów:
Podwyższ poziom transakcji do transakcji programu Microsoft Distributed Transaction Coordinator (MSDTC).
Zastąp , czyli trwałą rejestracją, która obsługuje zatwierdzenia jednofazowe.
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 do metody zaimplementowanej przez rejestrację promotable.
Ulepszenia profilowania. Następujące nowe niezarządzane interfejsy API profilowania zapewniają bardziej niezawodne profilowanie:
- Struktura COR_PRF_ASSEMBLY_REFERENCE_INFO
- COR_PRF_HIGH_MONITOR Wyliczenie
- GetAssemblyReferences, metoda
- GetEventMask2, Metoda
- Metoda SetEventMask2
- metody AddAssemblyReference
Poprzednie implementacje 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 .
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.
- Metoda SetWriteableMetadataUpdateMode
- Metoda EnumerateLocalVariablesEx
- GetLocalVariableEx, Metoda
- Metoda GetCodeEx
- GetActiveReJitRequestILCode, Metoda
- GetInstrumentedILMap metoda
Zmiany w śledzeniu zdarzeń. program .NET Framework 4.5.2 umożliwia śledzenie działań zewnętrznych procesów oparte na mechanizmie Event Tracing for Windows (ETW) dla większego zakresu. 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 platformy .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 EnlistmentMetoda może być używana przez rejestrację, która została wcześniej utworzona przez w odpowiedzi na metodę . Prosi 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 nie będzie już przywołyny przez , a wszelkie przyszłe powiadomienia będą wysyłane do dostarczonego interfejsu . Rejestracja, o której mowa, musi działać jako trwała, wspierając rejestrowanie transakcji i odzyskiwanie. Aby uzyskać szczegółowe informacje, zobacz . Ponadto rejestracja musi obsługiwać . Ta metoda może wywołać tylko podczas przetwarzania wywołania . Jeśli tak nie jest, zostanie zgłoszony wyjątek .
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:
Można używać API środowisko wykonawcze systemu Windows w bibliotekach przenośnych przeznaczonych na Windows 8.1, Windows Phone 8.1 i Windows Phone Silverlight 8.1.
Możesz dołączyć XAML (typy Windows.UI.XAML) w bibliotekach przenośnych, kiedy kierujesz się na 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 środowisko wykonawcze systemu Windows (plik winmd) do użycia w aplikacjach ze Sklepu przeznaczonych dla Windows 8.1 i Windows Phone 8.1.
Możesz przekierować bibliotekę klas Windows Store lub Windows Phone Store, podobnie jak przenośną bibliotekę klas.
Aby uzyskać więcej informacji na temat tych zmian, zobacz Portable Class Library.
Zestaw zawartości platformy .NET Framework zawiera teraz dokumentację .NET Native, która jest technologią wstępnego kompilowania i wdrażania aplikacji Windows. .NET Native kompiluje aplikacje bezpośrednio do kodu natywnego, a nie do języka pośredniego (IL), aby uzyskać lepszą wydajność. Aby uzyskać szczegółowe informacje, zobacz Compiling Apps with .NET Native(
Źródło referencyjne .NET Framework Reference Source zapewnia nowe środowisko przeglądania i ulepszone funkcje. Teraz możesz przeszukiwać kod źródłowy platformy .NET Framework w trybie online, pobrać dokumentację odniesienia do przeglądania w trybie offline i śledzić przebieg kodu (w tym poprawki i aktualizacje) podczas debugowania. Aby uzyskać więcej informacji, zobacz wpis w blogu A new look for .NET Reference Source.
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 Visual Studio 2013 r., 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 platformy .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 i w klasie .
Możliwość jawnego kompaktowania dużego sterty obiektów (LOH) podczas odzyskiwania pamięci. Aby uzyskać więcej informacji, zobacz właściwość .
Dodatkowe ulepszenia wydajności, takie jak zawieszenie aplikacji ASP.NET, ulepszenia wielordzeniowego trybu JIT i szybsze uruchamianie aplikacji po aktualizacji platformy .NET Framework. Aby uzyskać szczegółowe informacje, zobacz ogłoszenie .NET Framework 4.5.1 i wpis w blogu o wstrzymaniu aplikacji ASP.NET.
Ulepszenia Windows Forms obejmują:
Zmiana rozmiaru w kontrolkach Windows Forms. 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:
- PropertyGrid
- TreeView
- Niektóre aspekty (zobacz nowe funkcje w wersji 4.5.2 dla uzyskania dodatkowych opcji kontroli)
Aby włączyć tę funkcję, dodaj nowy element do pliku konfiguracji (app.config) i ustaw element na :
<appSettings> <add key="EnableWindowsFormsHighDpiAutoResizing" value="true" /> </appSettings>
Ulepszenia debugowania aplikacji platformy .NET Framework w programie Visual Studio 2013 obejmują:
Wartości zwracane w debugerze Visual Studio. Podczas debugowania aplikacji zarządzanej w Visual Studio 2013 w oknie Autos są wyświetlane zwracane typy i wartości metod. Te informacje są dostępne dla aplikacji klasycznych, Windows Store i 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, Windows Store i 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 Visual Studio 2013, stos wywołań ukrywa kod infrastruktury udostępniany przez kompilatory do obsługi programowania asynchronicznego oraz łączy się w logiczne ramki nadrzędne, co pozwala śledzić wykonywanie programu logicznego w bardziej przejrzysty sposób. 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 części zatytułowanej "Świadome asynchroniczności debugowanie" ogłoszeniu .NET Framework 4.5.1.
Lepsza obsługa wyjątków dla składników środowisko wykonawcze systemu Windows. W Windows 8.1 wyjątki wynikające z aplikacji Windows Store zachowują informacje o błędzie, który spowodował wyjątek, nawet w granicach języka. Możesz przeczytać o tej funkcji w sekcji "tworzenie aplikacji na platformę Windows Store" w ramach ogłoszenia o .NET Framework 4.5.1.
Począwszy od Visual Studio 2013, możesz użyć Managed Profile Guided Optimization Tool (Mpgo.exe) do optymalizacji aplikacji Windows 8.x Store oraz aplikacji desktopowych.
Nowe funkcje w programie ASP.NET 4.5.1 można znaleźć w temacie ASP.NET and Web Tools for Visual Studio 2013 Release Notes.
Co nowego w programie .NET Framework 4.5
Klasy bazowe
Możliwość zmniejszenia liczby ponownych uruchomień systemu przez wykrywanie i zamykanie aplikacji platformy .NET Framework 4 podczas wdrażania. Zobacz Ograniczenie ponownych uruchomień systemu podczas instalacji .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 , który zawiera również inne ograniczenia dotyczące rozmiaru obiektu i rozmiaru tablicy.
Lepsza wydajność dzięki zbieraniu niepotrzebnych danych w tle dla serwerów. Gdy w programie .NET Framework 4.5 używasz serwerowego odzyskiwania pamięci, automatycznie włączone jest odzyskiwanie pamięci w tle. 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 .
Możliwość ograniczenia czasu próby przetworzenia wyrażenia regularnego przez silnik wyrażeń regularnych przed przekroczeniem limitu czasu. Zobacz właściwość .
Możliwość definiowania kultury domyślnej dla domeny aplikacji. Zobacz klasę .
Obsługa kodowania Unicode (UTF-16) przez konsolę. Zobacz klasę .
Obsługa przechowywania wersji danych porządkowania i porównywania ciągów kulturowych. Zobacz klasę .
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 .
Możliwość dostosowania kontekstu odbicia w celu zastąpienia domyślnego zachowania odbicia za pomocą klasy .
Obsługa wersji 2008 standardu Internationalized Domain Names in Applications (IDNA), gdy klasa System.Globalization.IdnMapping jest używana w Windows 8.
Delegowanie porównania ciągów do systemu operacyjnego, który implementuje Unicode 6.0, gdy .NET Framework jest używany w Windows 8. W przypadku działania na innych platformach platforma .NET zawiera własne dane porównania ciągów, które implementują Unicode 5.x. Zobacz klasę i sekcję Uwagi klasy .
Możliwość obliczania kodów skrótów dla ciągów na podstawie domeny aplikacji. Zobacz element.
Obsługa odbicia typu została podzielona między klasy i . Zobacz Reflection w przewodniku .NET Framework for Windows Store Apps.
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 Windows 8.x Store. Ten podzestaw jest dostępny jako pakiet do pobrania z Galerii NuGet. Aby zainstalować pakiet, otwórz projekt w Visual Studio, wybierz menu Zarządzaj pakietami NuGet z Project i wyszukaj pakiet
Microsoft.Composition.
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 .NET Framework 4.5 narzędzie Generator plików zasobów (Resgen.exe) umożliwia utworzenie pliku .resw do użycia w aplikacjach Windows 8.x Store 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 Visual Studio 2013 r., można użyć Mpgo.exe, aby zoptymalizować aplikacje ze sklepu Windows 8.x oraz aplikacje klasyczne.
Przetwarzanie równoległe
.NET Framework 4.5 oferuje 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 What's New for Parallelism in .NET Framework 4.5 in the Parallel Programming with .NET blog (Programowanie równoległe z .NET blogiem).
sieć Web
ASP.NET 4.5 i 4.5.1 dodają powiązanie modelu do formularzy sieci Web, obsługę protokołu WebSocket, obsługę asynchronicznych procedur, ulepszenia wydajności i wiele innych funkcji. Aby uzyskać więcej informacji, zobacz następujące zasoby:
sieci
platforma .NET Framework 4.5 udostępnia nowy interfejs programowania dla aplikacji HTTP. Aby uzyskać więcej informacji, zapoznaj się z nowymi przestrzeniami nazw i .
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 i powiązanych. Aby uzyskać więcej informacji, zobacz nową przestrzeń nazw i klasę .
Ponadto program .NET Framework 4.5 obejmuje następujące ulepszenia sieci:
Obsługa identyfikatora URI zgodnego ze specyfikacją RFC. Aby uzyskać więcej informacji, zobacz i powiązane klasy.
Obsługa analizowania międzynarodowych nazw domen (IDN). Aby uzyskać więcej informacji, zobacz i powiązane klasy.
Obsługa internacjonalizacji adresów e-mail (EAI). Aby uzyskać więcej informacji, zajrzyj do przestrzeni nazw .
Ulepszona obsługa protokołu IPv6. Aby uzyskać więcej informacji, zajrzyj do przestrzeni nazw .
Obsługa gniazda w trybie dwutrybowym. Aby uzyskać więcej informacji, zobacz klasy i .
Windows Presentation Foundation (WPF)
W programie .NET Framework 4.5 Windows Presentation Foundation (WPF) zawiera zmiany i ulepszenia w następujących obszarach:
Nowa kontrolka , 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 , który obsługuje walidację danych synchronicznych i asynchronicznych.
Nowe funkcje klas i .
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 , 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 , 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 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 przy użyciu Internet Information Services (IIS).
Możliwość generowania metadanych w jednym dokumencie WSDL przez dołączenie 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 .
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
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 po raz pierwszy wprowadzone 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, aby program .NET Framework 4.5 zawierał następujące elementy:
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: , i .
Ulepszone funkcje projektanta przepływu pracy, takie jak:
Ulepszone możliwości wyszukiwania przepływu pracy w Visual Studio, w tym Quick Find i Find 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 Visual Basic będą używać wyrażeń 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 Visual Studio 2010 i które mają wyrażenia Visual Basic, są zgodne z projektami przepływu pracy języka C#, które używają wyrażeń języka C#.
Ulepszenia dotyczące wersji:
Nowa klasa , 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 .
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 What's New in Windows Workflow Foundation.
.NET dla aplikacji ze sklepu Windows 8.x
Aplikacje ze Sklepu Windows 8.x są zaprojektowane pod kątem konkretnych formatów i wykorzystują możliwości systemu operacyjnego Windows. Podzestaw platformy .NET Framework 4.5 lub 4.5.1 jest dostępny do tworzenia aplikacji ze sklepu Windows 8.x na potrzeby Windows przy użyciu języka C# lub Visual Basic. Ten podzestaw jest nazywany .NET dla aplikacji Windows 8.x Store i jest omówiony w overview.
Przenośne biblioteki klas
Projekt Portable Class Library w 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 przenośnej biblioteki klas, można wybrać platformy docelowe (takie jak Windows Phone i .NET dla aplikacji na Windows 8.x Store). 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.