Udostępnij za pośrednictwem


Ponowne pobieranie zmian migracji do programu .NET Framework 4.7.x

W tym artykule wymieniono problemy ze zgodnością aplikacji wprowadzone w programie .NET Framework 4.7, 4.7.1 i 4.7.2.

.NET Framework 4.7

ASP.NET

HttpRuntime.AppDomainAppPath zgłasza wyjątek NullReferenceException

Szczegóły

W programie .NET Framework 4.6.2 środowisko uruchomieniowe zgłasza T:System.NullReferenceException błąd podczas pobierania wartości zawierającej P:System.Web.HttpRuntime.AppDomainAppPath znaki null. W programie .NET Framework 4.6.1 i starszych wersjach środowisko uruchomieniowe zgłasza błąd T:System.ArgumentNullException.

Sugestia

Możesz wykonać jedną z następujących czynności, aby odpowiedzieć na tę zmianę:

  • Obsługa aplikacji T:System.NullReferenceException , jeśli aplikacja jest uruchomiona w programie .NET Framework 4.6.2.
  • Uaktualnij program do programu .NET Framework 4.7, który przywraca poprzednie zachowanie i zgłasza błąd T:System.ArgumentNullException.
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.6.2
Typ Przekierowanie

Dotyczy interfejsów API

Ograniczanie współbieżnych żądań na sesję

Szczegóły

W programie .NET Framework 4.6.2 i starszych ASP.NET wykonuje żądania z tym samym identyfikatorem sesji sekwencyjnie, a ASP.NET zawsze wysyła identyfikator sessionid za pośrednictwem plików cookie domyślnie. Jeśli odpowiedź strony trwa długo, znacznie obniży wydajność serwera, naciskając klawisz F5 w przeglądarce. W poprawce dodaliśmy licznik do śledzenia żądań w kolejce i przerywania żądań po przekroczeniu określonego limitu. Wartość domyślna to 50. Jeśli limit zostanie osiągnięty, w dzienniku zdarzeń zostanie zarejestrowane ostrzeżenie, a w dzienniku usług IIS może zostać zarejestrowana odpowiedź HTTP 500.

Sugestia

Aby przywrócić stare zachowanie, możesz dodać następujące ustawienie do pliku web.config, aby zrezygnować z nowego zachowania.

<appSettings>
    <add key="aspnet:RequestQueueLimitPerSession" value="2147483647"/>
</appSettings>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Sieć

Wartość domyślna elementu ServicePointManager.SecurityProtocol to SecurityProtocolType.System.Default

Szczegóły

Począwszy od aplikacji przeznaczonych dla programu .NET Framework 4.7, wartość domyślna ServicePointManager.SecurityProtocol właściwości to SecurityProtocolType.SystemDefault. Ta zmiana umożliwia interfejsom API sieci programu .NET Framework opartym na protokole SslStream (takim jak FTP, HTTPS i SMTP) dziedziczenie domyślnych protokołów zabezpieczeń z systemu operacyjnego zamiast używania ustalonych wartości zdefiniowanych przez program .NET Framework. Wartość domyślna zależy od systemu operacyjnego i dowolnej niestandardowej konfiguracji wykonywanej przez administratora systemu. Aby uzyskać informacje na temat domyślnego protokołu SChannel w każdej wersji systemu operacyjnego Windows, zobacz Protokoły w protokole TLS/SSL (SSP Schannel).

W przypadku aplikacji przeznaczonych dla starszej wersji programu .NET Framework domyślna wartość ServicePointManager.SecurityProtocol właściwości zależy od wersji docelowej programu .NET Framework. Aby uzyskać więcej informacji, zobacz sekcję Networking ( Sieć) w temacie Retargeting Changes for Migration from .NET Framework 4.5.2 to 4.6 (Zmiany retargeting dotyczące migracji z programu .NET Framework 4.5.2 do 4.6 ).

Sugestia

Ta zmiana dotyczy aplikacji przeznaczonych dla programu .NET Framework w wersji 4.7 lub nowszej. Jeśli wolisz używać zdefiniowanego protokołu zamiast polegać na domyślnym systemie, możesz jawnie ustawić wartość ServicePointManager.SecurityProtocol właściwości. Jeśli ta zmiana jest niepożądana, możesz zrezygnować z niej, dodając ustawienie konfiguracji do <sekcji środowiska uruchomieniowego> pliku konfiguracji aplikacji. W poniższym przykładzie przedstawiono zarówno sekcję, <runtime> jak i przełącznik rezygnacji Switch.System.Net.DontEnableSystemDefaultTlsVersions :

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=true" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7
Typ Przekierowanie

Dotyczy interfejsów API

Usługa SslStream obsługuje alerty TLS

Szczegóły

Po nieudanym uzgadnianiu protokołu TLS wyjątek System.IO.IOException wewnętrzny System.ComponentModel.Win32Exception zostanie zgłoszony przez pierwszą operację odczytu/zapisu we/wy. Kod System.ComponentModel.Win32Exception.NativeErrorCode dla elementu System.ComponentModel.Win32Exception można zamapować na alert TLS ze strony zdalnej przy użyciu kodów błędów Schannel dla alertów TLS i SSL. Aby uzyskać więcej informacji, zobacz RFC 2246: Sekcja 7.2.2 Alerty o błędach.
Zachowanie w programie .NET Framework 4.6.2 lub starszym polega na tym, że kanał transportu (zazwyczaj połączenie TCP) upłynął limit czasu podczas zapisu lub odczytu, jeśli inna strona nie powiodła się uzgadniania, a następnie natychmiast potem odrzucił połączenie.

Sugestia

Aplikacje wywołujące interfejsy API we/wy sieci, takie jak Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) powinny być obsługiwane IOException lub .System.TimeoutException
Funkcja alertów TLS jest domyślnie włączona, począwszy od programu .NET Framework 4.7. Aplikacje przeznaczone dla wersji programu .NET Framework z wersji od 4.0 do 4.6.2 działającej w systemie .NET Framework 4.7 lub nowszym będą miały wyłączoną funkcję w celu zachowania zgodności.
Następujący interfejs API konfiguracji jest dostępny do włączania lub wyłączania funkcji dla aplikacji .NET Framework 4.6 lub nowszych działających na platformie .NET Framework 4.7 lub nowszej.

  • Programowo: Musi być pierwszą rzeczą, jaką aplikacja wykonuje, ponieważ program ServicePointManager zainicjuje tylko raz:

    AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
    
    // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
    AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
    
  • AppConfig:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/>
      <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. -->
    </runtime>
    
  • Klucz rejestru (globalny maszyny): ustaw wartość, aby false włączyć funkcję w programie .NET Framework 4.6 — 4.6.2.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Dotyczy interfejsów API

Zabezpieczenia

CspParameters.ParentWindowHandle oczekuje teraz wartości HWND

Szczegóły

Wartość wprowadzona ParentWindowHandle w programie .NET Framework 2.0 umożliwia aplikacji zarejestrowanie wartości uchwytu okna nadrzędnego, tak aby każdy interfejs użytkownika wymagany do uzyskania dostępu do klucza (na przykład okno dialogowe monitu o podanie numeru PIN lub zgody) otwierało się jako modalne dziecko określonego okna. Począwszy od aplikacji przeznaczonych dla platformy .NET Framework 4.7, aplikacja Windows Forms może ustawić ParentWindowHandle właściwość z kodem takim jak poniżej:

cspParameters.ParentWindowHandle = form.Handle;

W poprzednich wersjach programu .NET Framework oczekiwano System.IntPtr wartości reprezentującej lokalizację w pamięci, w której znajdowała się wartość HWND . Ustawianie właściwości na formularz. Obsługa w systemie Windows 7 i wcześniejszych wersjach nie miała żadnego wpływu, ale w systemie Windows 8 i nowszych wersjach powoduje to wystąpienie błędu "System.Security.Cryptography.CryptographicException: Parametr jest niepoprawny".

Sugestia

Aplikacje przeznaczone dla programu .NET Framework 4.7 lub nowszego, które chcą zarejestrować relację okna nadrzędnego, są zachęcane do korzystania z uproszczonego formularza:

cspParameters.ParentWindowHandle = form.Handle;

Użytkownicy, którzy ustalili, że prawidłową wartością do przekazania była adres lokalizacji pamięci, która zawierała wartość form.Handle , może zrezygnować ze zmiany zachowania, ustawiając przełącznik Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle AppContext na true:

  • Programowe ustawianie przełączników zgodności w obiekcie AppContext zgodnie z opisem w tym miejscu.
  • Dodając następujący wiersz do <runtime> sekcji pliku app.config:
<runtime>
 <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.DoNotAddrOfCspParentWindowHandle=true"/>
</runtime>

Z drugiej strony użytkownicy, którzy chcą wyrazić zgodę na nowe zachowanie w środowisku uruchomieniowym programu .NET Framework 4.7, gdy aplikacja ładuje się w starszych wersjach programu .NET Framework, mogą ustawić przełącznik AppContext na false.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7
Typ Przekierowanie

Dotyczy interfejsów API

Usługa SslStream obsługuje alerty TLS

Szczegóły

Po nieudanym uzgadnianiu protokołu TLS wyjątek System.IO.IOException wewnętrzny System.ComponentModel.Win32Exception zostanie zgłoszony przez pierwszą operację odczytu/zapisu we/wy. Kod System.ComponentModel.Win32Exception.NativeErrorCode dla elementu System.ComponentModel.Win32Exception można zamapować na alert TLS ze strony zdalnej przy użyciu kodów błędów Schannel dla alertów TLS i SSL. Aby uzyskać więcej informacji, zobacz RFC 2246: Sekcja 7.2.2 Alerty o błędach.
Zachowanie w programie .NET Framework 4.6.2 lub starszym polega na tym, że kanał transportu (zazwyczaj połączenie TCP) upłynął limit czasu podczas zapisu lub odczytu, jeśli inna strona nie powiodła się uzgadniania, a następnie natychmiast potem odrzucił połączenie.

Sugestia

Aplikacje wywołujące interfejsy API we/wy sieci, takie jak Read(Byte[], Int32, Int32)/Write(Byte[], Int32, Int32) powinny być obsługiwane IOException lub .System.TimeoutException
Funkcja alertów TLS jest domyślnie włączona, począwszy od programu .NET Framework 4.7. Aplikacje przeznaczone dla wersji programu .NET Framework z wersji od 4.0 do 4.6.2 działającej w systemie .NET Framework 4.7 lub nowszym będą miały wyłączoną funkcję w celu zachowania zgodności.
Następujący interfejs API konfiguracji jest dostępny do włączania lub wyłączania funkcji dla aplikacji .NET Framework 4.6 lub nowszych działających na platformie .NET Framework 4.7 lub nowszej.

  • Programowo: Musi być pierwszą rzeczą, jaką aplikacja wykonuje, ponieważ program ServicePointManager zainicjuje tylko raz:

    AppContext.SetSwitch("TestSwitch.LocalAppContext.DisableCaching", true);
    
    // Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2.
    AppContext.SetSwitch("Switch.System.Net.DontEnableTlsAlerts", true);
    
  • AppConfig:

    <runtime>
      <AppContextSwitchOverrides value="Switch.System.Net.DontEnableTlsAlerts=true"/>
      <!-- Set to 'false' to enable the feature in .NET Framework 4.6 - 4.6.2. -->
    </runtime>
    
  • Klucz rejestru (globalny maszyny): ustaw wartość, aby false włączyć funkcję w programie .NET Framework 4.6 — 4.6.2.

    Key: HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\AppContext\Switch.System.Net.DontEnableTlsAlerts
    - Type: String
    - Value: "true"
    
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Dotyczy interfejsów API

Windows Communication Foundation (WCF)

Serializacja znaków kontrolnych za pomocą klasy DataContractJsonSerializer jest teraz zgodna z programem ECMAScript V6 i V8

Szczegóły

W programie .NET Framework 4.6.2 i starszych wersjach System.Runtime.Serialization.Json.DataContractJsonSerializer nie serializowano niektórych specjalnych znaków kontrolnych, takich jak \b, \f i \t, w sposób zgodny ze standardami ECMAScript V6 i V8. Począwszy od programu .NET Framework 4.7, serializacja tych znaków sterujących jest zgodna z programem ECMAScript V6 i V8.

Sugestia

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7 ta funkcja jest domyślnie włączona. Jeśli to zachowanie nie jest pożądane, możesz zrezygnować z tej funkcji, dodając następujący wiersz do <runtime> sekcji pliku app.config lub web.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Runtime.Serialization.DoNotUseECMAScriptV6EscapeControlCharacter=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Dotyczy interfejsów API

Zabezpieczenia komunikatów programu WCF mogą teraz używać protokołów TLS1.1 i TLS1.2

Szczegóły

Począwszy od programu .NET Framework 4.7, klienci mogą konfigurować protokoły TLS1.1 lub TLS1.2 w zabezpieczeniach komunikatów WCF oprócz protokołów SSL3.0 i TLS1.0 za pośrednictwem ustawień konfiguracji aplikacji.

Sugestia

W programie .NET Framework 4.7 obsługa protokołów TLS1.1 i TLS1.2 w zabezpieczeniach komunikatów WCF jest domyślnie wyłączona. Możesz ją włączyć, dodając następujący wiersz do <runtime> sekcji pliku app.config lub web.config:

<runtime>
<AppContextSwitchOverrides value="Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols=false;Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Windows Presentation Foundation (WPF)

Wywołania elementu System.Windows.Input.PenContext.Disable w systemach z obsługą dotykową mogą zgłaszać wyjątek ArgumentException

Szczegóły

W niektórych okolicznościach wywołania wewnętrznej metody System.Windows.Intput.PenContext.Disable w systemach z obsługą dotykową mogą zgłaszać nieobsługiwane T:System.ArgumentException z powodu ponownego wywołania.

Sugestia

Ten problem został rozwiązany w programie .NET Framework 4.7. Aby zapobiec wyjątkowi, przeprowadź uaktualnienie do wersji programu .NET Framework, począwszy od programu .NET Framework 4.7.

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.6.1
Typ Przekierowanie

NullReferenceException w kodzie obsługi wyjątków z pliku ImageSourceConverter.ConvertFrom

Szczegóły

Błąd w kodzie obsługi wyjątków spowodował ConvertFrom(ITypeDescriptorContext, CultureInfo, Object)System.NullReferenceException , że zamiast zamierzonego wyjątku ( System.IO.DirectoryNotFoundException lub System.IO.FileNotFoundException). Ta zmiana poprawia ten błąd, tak aby metoda zgłaszała teraz właściwy wyjątek.

Domyślnie wszystkie aplikacje przeznaczone dla platformy .NET Framework 4.6.2 i starsze będą nadal zgłaszane System.NullReferenceException w celu zachowania zgodności. Deweloperzy korzystający z programu .NET Framework 4.7 lub nowszego powinni widzieć odpowiednie wyjątki.

Sugestia

Deweloperzy, którzy chcą powrócić do pobierania System.NullReferenceException podczas określania wartości docelowej dla programu .NET Framework 4.7 lub nowszego, mogą dodać/scalić następujące elementy do pliku App.config swojej aplikacji:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Media.ImageSourceConverter.OverrideExceptionWithNullReferenceException=true"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Dotyczy interfejsów API

Alokacja miejsca w siatce WPF do kolumn gwiazdek

Szczegóły

Począwszy od programu .NET Framework 4.7, WPF zastępuje algorytm używany Grid do przydzielania miejsca do *-kolumn. Spowoduje to zmianę rzeczywistej szerokości przypisanej do *-columns w wielu przypadkach:

  • Jeśli co najmniej jedna kolumna *-kolumna ma również minimalną lub maksymalną szerokość, która zastępuje proporcjonalną alokację dla tej kolumny. (Minimalna szerokość może pochodzić z jawnej deklaracji MinWidth lub niejawnego minimum uzyskanego z zawartości kolumny. Maksymalna szerokość można zdefiniować jawnie tylko z deklaracji MaxWidth.
  • Jeśli co najmniej jedna kolumna *-deklaruje bardzo dużą wagę *, większą niż 10^298.
  • Gdy *-wagi są wystarczająco różne, aby napotkać niestabilność zmiennoprzecinkowa (przepełnienie, niedopełnienie, utrata precyzji).
  • Po włączeniu zaokrąglania układu i efektywne wyświetlanie DPI jest wystarczająco wysokie. W pierwszych dwóch przypadkach szerokość wygenerowana przez nowy algorytm może znacznie różnić się od tych generowanych przez stary algorytm; w ostatnim przypadku różnica będzie wynosić co najwyżej jeden lub dwa piksele.

Nowy algorytm naprawia kilka usterek obecnych w starym algorytmie:

  • Łączna alokacja kolumn może przekraczać szerokość siatki. Taka sytuacja może wystąpić, gdy przydzielanie miejsca do kolumny, której udział proporcjonalny jest mniejszy niż minimalny rozmiar. Algorytm przydziela minimalny rozmiar, co zmniejsza ilość miejsca dostępnego dla innych kolumn. Jeśli nie ma kolumn *do przydzielenia, łączna alokacja będzie zbyt duża.

  • Łączna alokacja może nie mieć szerokości siatki. Jest to podwójny problem do #1, powstały podczas przydzielania do kolumny, której udział proporcjonalny jest większy niż jego maksymalny rozmiar, bez *-kolumn pozostawionych do podjęcia luzu.

  • Dwie *-kolumny mogą odbierać alokacje nie proporcjonalne do ich *-wag. Jest to łagodniejsza wersja pliku #1/#2, wynikająca z przydzielenia do *-kolumn A, B i C (w tej kolejności), gdzie udział proporcjonalny B narusza ograniczenie minimalne (lub maksymalne). Jak powyżej, zmienia to miejsce dostępne dla kolumny C, która otrzymuje mniej (lub więcej) proporcjonalną alokację niż A.

  • Kolumny o bardzo dużych wagach (> 10^298) są traktowane tak, jakby miały wagę 10^298. Proporcjonalne różnice między nimi (i między kolumnami z nieco mniejszymi wagami) nie są uznawane.

  • Kolumny o nieskończonych wagach nie są poprawnie obsługiwane. (W rzeczywistości nie można ustawić wagi na Nieskończoność, ale jest to sztuczne ograniczenie. Kod alokacji próbował go obsłużyć, ale wykonywał złe zadanie).

  • Kilka drobnych problemów podczas unikania przepełnienia, niedopełnienia, utraty precyzji i podobnych problemów zmiennoprzecinkowych.

  • Korekty zaokrąglania układu są niepoprawne w wystarczająco dużej rozdzielczości DPI. Nowy algorytm generuje wyniki spełniające następujące kryteria:

    • Rzeczywista szerokość przypisana do *-kolumny nigdy nie jest mniejsza niż minimalna szerokość ani większa niż maksymalna szerokość.
    • Każda kolumna *, która nie ma przypisanej minimalnej lub maksymalnej szerokości, ma przypisaną szerokość proporcjonalną do jej *-wagi. Aby dokładnie określić, czy dwie kolumny są deklarowane odpowiednio o szerokości x* i y* i jeśli żadna kolumna nie otrzyma jej minimalnej lub maksymalnej szerokości, rzeczywiste szerokości v i przypisane do kolumn są w tej samej proporcji: v / w == x / y.
    • Całkowita szerokość przydzielona "proporcjonalnym" *-kolumnom jest równa przestrzeni dostępnej po przydzieleniu do ograniczonych kolumn (stałe, automatyczne i *-kolumny, które są przydzielane ich minimalną lub maksymalną szerokość). Może to być zero, na przykład jeśli suma minimalnych szerokości przekracza dostępną szerokość siatki.
    • Wszystkie te oświadczenia mają być interpretowane w odniesieniu do układu "idealnego". Gdy zaokrąglanie układu jest w mocy, rzeczywiste szerokości mogą się różnić od idealnych szerokości o tyle, ile jeden piksel.

Uwaga

Wszystkie informacje o kolumnach i szerokościach w tym artykule dotyczą również wierszy i wysokości.

Sugestia

Domyślnie aplikacje przeznaczone dla wersji programu .NET Framework, począwszy od programu .NET Framework 4.7, będą widzieć nowy algorytm, podczas gdy aplikacje przeznaczone dla programu .NET Framework 4.6.2 lub starsze wersje będą widzieć stary algorytm.

Aby zastąpić wartość domyślną, użyj następującego ustawienia konfiguracji:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true" />
</runtime>

Wartość true wybiera stary algorytm, false wybiera nowy algorytm.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7
Typ Przekierowanie

Stos dotykowy oparty na wskaźnikach WPF

Szczegóły

Ta zmiana dodaje możliwość włączenia opcjonalnego stosu WPF touch/stylus opartego na WM_POINTER. Deweloperzy, którzy nie włączają jawnie tej funkcji, nie powinni widzieć żadnych zmian w zachowaniu WPF touch/stylus. Bieżące znane problemy z opcjonalnym stosem touch/stylus opartym na WM_POINTER:

  • Brak obsługi pisma odręcznego w czasie rzeczywistym.
  • Mimo że pisma odręczne i StylusPlugins będą nadal działać, będą przetwarzane w wątku interfejsu użytkownika, co może prowadzić do niskiej wydajności.
  • Zmiany zachowania spowodowane zmianami promocji z zdarzeń dotykowych/rysików do zdarzeń myszy
  • Manipulowanie może zachowywać się inaczej
  • Przeciąganie/upuszczanie nie będzie wyświetlać odpowiednich opinii dotyczących wprowadzania dotyku
  • Nie ma to wpływu na dane wejściowe stylu
  • Przeciąganie/upuszczanie nie może być już inicjowane na zdarzeniach dotyku/rysika
  • Może to potencjalnie spowodować, że aplikacja przestanie odpowiadać do momentu wykrycia danych wejściowych myszy.
  • Zamiast tego deweloperzy powinni inicjować przeciąganie i upuszczanie ze zdarzeń myszy.

Sugestia

Deweloperzy, którzy chcą włączyć ten stos, mogą dodać/scalić następujące elementy do pliku App.config swojej aplikacji:

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Input.Stylus.EnablePointerSupport=true"/>
</runtime>
</configuration>

Usunięcie tej wartości lub ustawienie wartości false spowoduje wyłączenie tego opcjonalnego stosu. Należy pamiętać, że ten stos jest dostępny tylko w przypadku Aktualizacja systemu Windows 10 dla twórców i nowszych.

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7
Typ Przekierowanie

Windows Workflow Foundation (WF)

Sumy kontrolne przepływu pracy zostały zmienione z MD5 na SHA1

Szczegóły

Aby obsługiwać debugowanie za pomocą programu Visual Studio, środowisko uruchomieniowe przepływu pracy generuje sumę kontrolną dla wystąpienia przepływu pracy przy użyciu algorytmu tworzenia skrótów. W programie .NET Framework 4.6.2 i starszych wersjach skrót sumy kontrolnej przepływu pracy używał algorytmu MD5, co powodowało problemy w systemach obsługujących standard FIPS. Począwszy od programu .NET Framework 4.7, algorytm to SHA1. Jeśli kod utrwali te sumy kontrolne, będą one niezgodne.

Sugestia

Jeśli kod nie może załadować wystąpień przepływu pracy z powodu błędu sumy kontrolnej, spróbuj ustawić AppContext przełącznik "Switch.System.Activities.UseMD5ForWFDebugger" na wartość true. W kodzie:

System.AppContext.SetSwitch("Switch.System.Activities.UseMD5ForWFDebugger", true);

Lub w konfiguracji:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseMD5ForWFDebugger=true" />
  </runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7
Typ Przekierowanie

.NET Framework 4.7.1

ASP.NET

ulepszenia ułatwień dostępu ASP.NET w programie .NET Framework 4.7.1

Szczegóły

Począwszy od programu .NET Framework 4.7.1, ASP.NET ulepszył sposób pracy ASP.NET kontrolki sieci Web z technologią ułatwień dostępu w programie Visual Studio, aby lepiej obsługiwać klientów ASP.NET. Obejmują one następujące zmiany:

  • Zmiany w implementacji brakujących wzorców ułatwień dostępu interfejsu użytkownika w kontrolkach, takich jak okno dialogowe Dodawanie pola w kreatorze Widok szczegółów lub okno dialogowe Konfigurowanie widoku listy kreatora ListView.
  • Zmiany w celu ulepszenia wyświetlania w trybie dużego kontrastu, takich jak Edytor pól pagera danych.
  • Zmiany w celu ulepszenia środowisk nawigacji za pomocą klawiatury dla kontrolek, takich jak okno dialogowe Pola w kreatorze Edytowanie pól pagera kontrolki DataPager, okno dialogowe Konfigurowanie obiektuKontekstu lub okno dialogowe Konfigurowanie wyboru danych kreatora Konfigurowanie źródła danych.

Sugestia

Jak wyrazić zgodę na te zmiany lub je wycofać, aby program Visual Studio Projektant korzystał z tych zmian, musi działać w programie .NET Framework 4.7.1 lub nowszym. Aplikacja internetowa może korzystać z tych zmian w jeden z następujących sposobów:

  • Zainstaluj program Visual Studio 2017 15.3 lub nowszy, który domyślnie obsługuje nowe funkcje ułatwień dostępu za pomocą następującego przełącznika AppContext.
  • Rezygnacja ze starszych zachowań ułatwień dostępu przez dodanie Switch.UseLegacyAccessibilityFeatures przełącznika AppContext do <runtime> sekcji w pliku devenv.exe.config i ustawienie go na falsewartość , jak pokazano w poniższym przykładzie.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
...
<!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false'  -->
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
...
</runtime>
</configuration>

Aplikacje przeznaczone dla programu .NET Framework 4.7.1 lub nowszego i chcą zachować starsze zachowanie ułatwień dostępu, mogą wyrazić zgodę na korzystanie ze starszych funkcji ułatwień dostępu przez jawne ustawienie tego przełącznika AppContext na true.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

Podstawowe funkcje

Wyjątki wątku w tle SerialPort

Szczegóły

Wątki w tle utworzone ze strumieniami SerialPort nie kończą już procesu, gdy są zgłaszane wyjątki systemu operacyjnego.
W aplikacjach przeznaczonych dla programu .NET Framework 4.7 i starszych wersji proces jest przerywany, gdy w wątku w tle jest zgłaszany wyjątek systemu operacyjnego utworzony ze strumieniem SerialPort .
W aplikacjach przeznaczonych dla programu .NET Framework 4.7.1 lub nowszej wersji wątki w tle czekają na zdarzenia systemu operacyjnego związane z aktywnym portem szeregowym i mogą ulec awarii w niektórych przypadkach, takich jak nagłe usunięcie portu szeregowego.

Sugestia

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7.1 możesz zrezygnować z obsługi wyjątków, jeśli nie jest to pożądane, dodając następujące informacje do <runtime> sekcji app.config pliku:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=true" />
</runtime>

W przypadku aplikacji przeznaczonych dla wcześniejszych wersji programu .NET Framework, ale uruchamianych w programie .NET Framework 4.7.1 lub nowszym, możesz wyrazić zgodę na obsługę wyjątków, dodając następujące informacje do <runtime> sekcji app.config pliku:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.IO.Ports.DoNotCatchSerialStreamThreadExceptions=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

Usługa ServiceBase nie propaguje wyjątków OnStart

Szczegóły

W programie .NET Framework 4.7 i starszych wersjach wyjątki zgłoszone podczas uruchamiania usługi nie są propagowane do obiektu wywołującego elementu ServiceBase.Run.

Począwszy od aplikacji przeznaczonych dla programu .NET Framework 4.7.1, środowisko uruchomieniowe propaguje wyjątki dla ServiceBase.Run usług, które nie mogą się uruchomić.

Sugestia

Po uruchomieniu usługi, jeśli wystąpi wyjątek, ten wyjątek zostanie rozpropagowany. Powinno to pomóc w diagnozowaniu przypadków, w których nie można uruchomić usług.

Jeśli to zachowanie jest niepożądane, możesz zrezygnować z niego, dodając następujący AppContextSwitchOverrides element do runtime sekcji pliku konfiguracji aplikacji:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=true" />

Jeśli aplikacja jest przeznaczona dla starszej wersji niż 4.7.1, ale chcesz mieć to zachowanie, dodaj następujący AppContextSwitchOverrides element do runtime sekcji pliku konfiguracji aplikacji:

<AppContextSwitchOverrides value="Switch.System.ServiceProcess.DontThrowExceptionsOnStart=false" />
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

Zabezpieczenia

Domyślne algorytmy SignedXML i SignedXMS zmieniły się na SHA256

Szczegóły

W programie .NET Framework w wersji 4.7 lub starszej domyślnie wartością SHA1 dla niektórych operacji są podpisaneXML i SignedCMS. Począwszy od programu .NET Framework 4.7.1, algorytm SHA256 jest domyślnie włączony dla tych operacji. Ta zmiana jest konieczna, ponieważ algorytm SHA1 nie jest już uważany za bezpieczny.

Sugestia

Istnieją dwie nowe wartości przełącznika kontekstu służące do kontrolowania, czy algorytm SHA1 (niezabezpieczony) lub SHA256 jest domyślnie używany:

  • Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms
  • Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms Dla aplikacji przeznaczonych dla programu .NET Framework 4.7.1 i nowszych wersji, jeśli użycie algorytmu SHA256 jest niepożądane, możesz przywrócić wartość domyślną SHA1, dodając następujący przełącznik konfiguracji do sekcji środowiska uruchomieniowego pliku konfiguracji aplikacji:
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=true;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=true" />

W przypadku aplikacji przeznaczonych dla platformy .NET Framework 4.7 i starszych wersji możesz zdecydować się na tę zmianę, dodając następujący przełącznik konfiguracji do sekcji środowiska uruchomieniowego pliku konfiguracji aplikacji:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.UseInsecureHashAlgorithms=false;Switch.System.Security.Cryptography.Pkcs.UseInsecureHashAlgorithms=false" />
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

SignedXml.GetPublicKey zwraca rsACng na net462 (lub lightup) bez zmiany retargeting

Szczegóły

Począwszy od programu .NET Framework 4.6.2, konkretny typ obiektu zwrócony przez SignedXml.GetPublicKey metodę został zmieniony (bez dziwactwa) z implementacji CryptoServiceProvider do implementacji Cng. Jest to spowodowane tym, że implementacja zmieniła się z użycia certificate.PublicKey.Key na użycie wewnętrznego certificate.GetAnyPublicKey , które przekazuje do elementu RSACertificateExtensions.GetRSAPublicKey.

Sugestia

Począwszy od aplikacji uruchomionych w programie .NET Framework 4.7.1, możesz użyć implementacji CryptoServiceProvider używanej domyślnie w programie .NET Framework 4.6.1 i starszych wersjach, dodając następujący przełącznik konfiguracji do sekcji środowiska uruchomieniowego pliku konfiguracji aplikacji:

<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.Xml.SignedXmlUseLegacyCertificatePrivateKey=true" />
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.6.2
Typ Przekierowanie

Dotyczy interfejsów API

Windows Communication Foundation (WCF)

Ulepszone ułatwienia dostępu dla niektórych narzędzi zestawu SDK platformy .NET

Szczegóły

W zestawie .NET Framework SDK 4.7.1 narzędzia SvcConfigEditor.exe i SvcTraceViewer.exe zostały ulepszone przez rozwiązywanie różnych problemów z ułatwieniami dostępu. Większość z nich to małe problemy, takie jak nazwa, która nie jest zdefiniowana, lub niektóre wzorce automatyzacji interfejsu użytkownika nie są prawidłowo implementowane. Chociaż wielu użytkowników nie wiedziało o tych nieprawidłowych wartościach, klienci korzystający z technologii pomocniczych, takich jak czytniki zawartości ekranu, znajdą te narzędzia zestawu SDK bardziej dostępne. Z pewnością te poprawki zmieniają niektóre poprzednie zachowania, takie jak kolejność koncentracji uwagi klawiatury. Aby uzyskać wszystkie poprawki ułatwień dostępu w tych narzędziach, możesz wykonać następujące czynności w pliku app.config:

<runtime>
  <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false"/>
</runtime>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.1
Typ Przekierowanie

Windows Forms

Ulepszenia ułatwień dostępu w kontrolkach formularzy systemu Windows

Szczegóły

Windows Forms ulepsza sposób pracy z technologiami ułatwień dostępu, aby lepiej obsługiwać klientów windows Forms. Obejmują one następujące zmiany, począwszy od programu .NET Framework 4.7.1:

  • Zmiany w celu ulepszenia wyświetlania w trybie dużego kontrastu.
  • Zmiany w celu ulepszenia środowiska przeglądarki właściwości. Ulepszenia przeglądarki właściwości obejmują:
  • Lepsza nawigacja za pomocą klawiatury w różnych oknach wyboru listy rozwijanej.
  • Zmniejszona ilość niepotrzebnych zatrzymań kart.
  • Lepsze raportowanie typów kontrolek.
  • Ulepszone zachowanie narratora.
  • Zmiany w celu zaimplementowania brakujących wzorców ułatwień dostępu interfejsu użytkownika w kontrolkach.

Sugestia

Jak wyrazić zgodę na te zmiany lub zrezygnować z tych zmian Aby aplikacja korzystała z tych zmian , musi działać w programie .NET Framework 4.7.1 lub nowszym. Aplikacja może korzystać z tych zmian w jeden z następujących sposobów:

  • Jest on ponownie komilowany w celu kierowania programu .NET Framework 4.7.1. Te zmiany ułatwień dostępu są domyślnie włączone w aplikacjach Windows Forms przeznaczonych dla programu .NET Framework 4.7.1 lub nowszego.
  • Rezygnacja z starszych zachowań ułatwień dostępu przez dodanie następującego przełącznika AppContext do <runtime> sekcji pliku app.config i ustawienia go na falsewartość , jak pokazano w poniższym przykładzie.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

Aplikacje przeznaczone dla programu .NET Framework 4.7.1 lub nowszego i chcą zachować starsze zachowanie ułatwień dostępu, mogą wyrazić zgodę na korzystanie ze starszych funkcji ułatwień dostępu przez jawne ustawienie tego przełącznika AppContext na true.

Aby zapoznać się z omówieniem automatyzacji interfejsu użytkownika, zobacz omówienie automatyzacja interfejsu użytkownika.

Dodano obsługę wzorców i właściwości automatyzacja interfejsu użytkownika

Klienci ułatwień dostępu mogą korzystać z nowych funkcji ułatwień dostępu WinForms przy użyciu typowych, publicznie opisanych wzorców wywołań. Te wzorce nie są specyficzne dla formularzy WinForms. Na przykład klienci ułatwień dostępu mogą wywoływać metodę QueryInterface w interfejsie IAccessible (MAAS), aby uzyskać interfejs IServiceProvider. Jeśli ten interfejs jest dostępny, klienci mogą żądać interfejsu IAccessibleEx za pomocą metody QueryService. Aby uzyskać więcej informacji, zobacz Using IAccessibleEx from a Client (Używanie funkcji IAccessibleEx z klienta). Począwszy od programu .NET Framework 4.7.1, IServiceProvider i IAccessibleEx (jeśli ma to zastosowanie) są dostępne dla obiektów ułatwień dostępu WinForms.

Program .NET Framework 4.7.1 dodaje obsługę następujących wzorców i właściwości automatyzacji interfejsu użytkownika:

Używanie kolorów zdefiniowanych przez system operacyjny w motywach dużego kontrastu

  • Kontrolki Button i CheckBox z ich FlatStyle właściwością ustawioną na FlatStyle.System, która jest stylem domyślnym, teraz używają kolorów zdefiniowanych przez system operacyjny w motywie dużego kontrastu po wybraniu. Wcześniej kolory tekstu i tła nie były kontrastujące i były trudne do odczytania.
  • Kontrolki Button, CheckBox, , RadioButtonLabel, LinkLabeli GroupBox z ich Enabled właściwością ustawioną na wartość false używały koloru cieniowanego do renderowania tekstu w motywach o wysokim kontraście, co skutkuje niskim kontrastem w tle. Teraz te kontrolki używają koloru "Wyłączony tekst" zdefiniowanego przez system operacyjny. Ta poprawka dotyczy kontrolek z FlatStyle właściwością ustawioną na wartość inną niż FlatStyle.System. Te ostatnie kontrolki są renderowane przez system operacyjny.
  • DataGridView teraz renderuje widoczny prostokąt wokół zawartości komórki, która ma bieżący fokus. Wcześniej nie było to widoczne w niektórych motywach wysokiego kontrastu.
  • ToolStripMenuItem kontrolki z ich Enabled właściwością ustawioną na false używają teraz koloru "Wyłączony tekst" zdefiniowanego przez system operacyjny.
  • ToolStripMenuItem kontrolki z ich Checked właściwością ustawioną na true teraz renderują skojarzony znacznik wyboru w kontrastowym kolorze systemu. Wcześniej kolor znacznika wyboru nie był wystarczająco kontrastujący i nie był widoczny w motywach o wysokim kontraście. UWAGA: System Windows 10 zmienił wartości dla niektórych kolorów systemowych o wysokim kontraście. Struktura Windows Forms Framework jest oparta na strukturze Win32. Aby uzyskać najlepsze środowisko, uruchom polecenie w najnowszej wersji systemu Windows i wybierz najnowsze zmiany systemu operacyjnego, dodając plik app.manifest w aplikacji testowej i usuwając komentarz z następującego kodu:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Ulepszona nawigacja za pomocą klawiatury

  • Gdy kontrolka ComboBox ma jej DropDownStyle właściwość ustawioną na ComboBoxStyle.DropDownList i jest pierwszą kontrolką w kolejności tabulacji w formularzu, teraz wyświetla prostokąt fokusu po otwarciu formularza nadrzędnego za pomocą klawiatury. Przed tą zmianą fokus klawiatury był na tej kontrolce, ale wskaźnik koncentracji uwagi nie został renderowany.

Ulepszona obsługa narratora

  • Kontrolka MonthCalendar dodała obsługę technologii pomocniczych w celu uzyskania dostępu do kontroli, w tym możliwość odczytywania wartości kontrolki przez Narratora, gdy wcześniej nie mogła.

  • Kontrolka powiadamia teraz Narratora CheckedListBoxCheckBox.CheckState o zmianie właściwości. Wcześniej Narrator nie otrzymał powiadomienia i w rezultacie użytkownicy nie zostali poinformowani, że CheckState właściwość została zaktualizowana.

  • Kontrolka LinkLabel zmieniła sposób powiadamiania Narratora o tekście w kontrolce. Wcześniej Narrator ogłosił ten tekst dwa razy i odczytał symbole "&" jako prawdziwy tekst, mimo że nie są widoczne dla użytkownika. Zduplikowany tekst został usunięty z anonsów Narratora, a także niepotrzebne symbole "&".

  • DataGridViewCell Typy kontrolek teraz prawidłowo zgłaszają stan tylko do odczytu narratorowi i innym technologiom pomocniczym.

  • Narrator jest teraz w stanie odczytać menu systemowe okien podrzędnych w aplikacjach [Multiple-Document Interface]~/docs/framework/winforms/advanced/multiple-document-interface-mdi-applications.mdi.

  • Narrator może teraz odczytywać ToolStripMenuItem kontrolki z właściwością ustawioną ToolStripItem.Enabled na false. Wcześniej Narrator nie mógł skoncentrować się na wyłączonych elementach menu w celu odczytania zawartości.

Nazwa/nazwisko Wartość
Zakres Główna
Wersja 4.8
Typ Przekierowanie

Dotyczy interfejsów API

Windows Presentation Foundation (WPF)

Ulepszenia ułatwień dostępu w WPF

Szczegóły

Ulepszenia wysokiego kontrastu

  • Fokus kontrolki Expander jest teraz widoczny. W poprzednich wersjach programu .NET Framework nie było.
  • Tekst w pliku CheckBox i RadioButton kontrolki, gdy są zaznaczone, jest teraz łatwiejszy do wyświetlenia niż w poprzednich wersjach programu .NET Framework.
  • Obramowanie wyłączonego ComboBox jest teraz tym samym kolorem co wyłączony tekst. W poprzednich wersjach programu .NET Framework nie było.
  • Wyłączone i ukierunkowane przyciski używają teraz poprawnego koloru motywu. W poprzednich wersjach programu .NET Framework nie były.
  • Przycisk listy rozwijanej jest teraz widoczny, gdy ComboBox styl kontrolki jest ustawiony na wartość ToolBar.ComboBoxStyleKey. W poprzednich wersjach programu .NET Framework nie było.
  • Strzałka wskaźnika sortowania w kontrolce DataGrid używa teraz kolorów motywu. W poprzednich wersjach programu .NET Framework nie było.
  • Domyślny styl hiperłącza teraz zmienia się na prawidłowy kolor motywu na myszy. W poprzednich wersjach programu .NET Framework nie było.
  • Fokus klawiatury na przyciskach radiowych jest teraz widoczny. W poprzednich wersjach programu .NET Framework nie było.
  • Kolumna DataGrid pola wyboru kontrolki używa teraz oczekiwanych kolorów dla opinii fokusu klawiatury. W poprzednich wersjach programu .NET Framework nie było.
  • Wizualizacje fokusu klawiatury są teraz widoczne dla ComboBox kontrolek i .ListBox W poprzednich wersjach programu .NET Framework nie było.

Ulepszenia interakcji czytnika zawartości ekranu

  • Expander Kontrolki są teraz poprawnie ogłaszane jako grupy (rozwijanie/zwijanie) przez czytniki zawartości ekranu.
  • DataGridCell Kontrolki są teraz poprawnie ogłaszane jako komórka siatki danych (zlokalizowane) przez czytniki zawartości ekranu.
  • Czytniki zawartości ekranu będą teraz ogłaszać nazwę edytowalnego ComboBoxelementu .
  • PasswordBox Kontrolki nie są już ogłaszane jako "brak elementu w widoku" przez czytniki zawartości ekranu.

Obsługa regionów na żywo

Czytniki zawartości ekranu, takie jak Narrator, ułatwiają użytkownikom zrozumienie interfejsu użytkownika aplikacji, zwykle przez opisywanie elementu interfejsu użytkownika, który ma obecnie fokus. Jeśli jednak element interfejsu użytkownika zmieni się gdzieś na ekranie i nie ma fokusu, użytkownik może nie być poinformowany i przegapić ważne informacje. LiveRegions mają rozwiązać ten problem. Deweloper może ich używać do informowania czytnika zawartości ekranu lub dowolnego innego klienta automatyzacja interfejsu użytkownika o wprowadzeniu ważnych zmian w elemecie interfejsu użytkownika. Czytnik zawartości ekranu może następnie zdecydować, jak i kiedy poinformować użytkownika o tej zmianie. Właściwość LiveSetting umożliwia również czytnikowi zawartości ekranu określenie, jak ważne jest informowanie użytkownika o zmianie wprowadzonej w interfejsie użytkownika.

Sugestia

Jak wyrazić zgodę na te zmiany lub je wycofać

Aby aplikacja korzystała z tych zmian, musi działać w programie .NET Framework 4.7.1 lub nowszym. Aplikacja może korzystać z tych zmian w jeden z następujących sposobów:

  • Docelowy program .NET Framework 4.7.1. Jest to zalecane podejście. Te zmiany ułatwień dostępu są domyślnie włączone w aplikacjach WPF przeznaczonych dla programu .NET Framework 4.7.1 lub nowszego.

  • Rezygnacja z starszych zachowań ułatwień dostępu przez dodanie następującego przełącznika AppContext w sekcji pliku konfiguracji aplikacji i ustawienie go na falsewartość , jak pokazano w <runtime> poniższym przykładzie.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
      </startup>
      <runtime>
        <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false'  -->
        <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
      </runtime>
    </configuration>
    

Aplikacje przeznaczone dla programu .NET Framework 4.7.1 lub nowszego i chcą zachować starsze zachowanie ułatwień dostępu, mogą wyrazić zgodę na korzystanie ze starszych funkcji ułatwień dostępu przez jawne ustawienie tego przełącznika AppContext na true. Aby zapoznać się z omówieniem automatyzacji interfejsu użytkownika, zobacz automatyzacja interfejsu użytkownika Omówienie.

Nazwa/nazwisko Wartość
Zakres Główna
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

Zdarzenie Selector SelectionChanged i właściwość SelectedValue

Szczegóły

Począwszy od programu .NET Framework 4.7.1, Selector zawsze aktualizuje wartość jego SelectedValue właściwości przed podniesieniem SelectionChanged zdarzenia, gdy jego wybór ulegnie zmianie. Dzięki temu właściwość SelectedValue jest spójna z innymi właściwościami zaznaczenia (SelectedItem i SelectedIndex), które są aktualizowane przed podniesieniem zdarzenia.

W programie .NET Framework 4.7 i starszych wersjach aktualizacja selectedValue miała miejsce przed zdarzeniem w większości przypadków, ale wystąpiła po zdarzeniu, jeśli zmiana wyboru została spowodowana zmianą SelectedValue właściwości.

Sugestia

Aplikacje przeznaczone dla programu .NET Framework 4.7.1 lub nowszego mogą zrezygnować z tej zmiany i korzystać ze starszego zachowania, dodając następujące informacje do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
<AppContextSwitchOverrides
value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>

Aplikacje przeznaczone dla programu .NET Framework 4.7 lub starszego, ale działają w programie .NET Framework 4.7.1 lub nowszym, mogą włączyć nowe zachowanie, dodając następujący wiersz do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

Zdarzenie TabControl SelectionChanged i właściwość SelectedContent

Szczegóły

Począwszy od programu .NET Framework 4.7.1, TabControl wartość jego SelectedContent właściwości zostanie zaktualizowana przed podniesieniem SelectionChanged zdarzenia, gdy jego wybór ulegnie zmianie. W programie .NET Framework 4.7 i starszych wersjach aktualizacja selectedContent miała miejsce po zdarzeniu.

Sugestia

Aplikacje przeznaczone dla programu .NET Framework 4.7.1 lub nowszego mogą zrezygnować z tej zmiany i korzystać ze starszego zachowania, dodając następujące informacje do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=true" />
</runtime>

Aplikacje przeznaczone dla programu .NET Framework 4.7 lub starszego, ale działają w programie .NET Framework 4.7.1 lub nowszym, mogą włączyć nowe zachowanie, dodając następujący wiersz do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.TabControl.SelectionPropertiesCanLagBehindSelectionChangedEvent=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

Domyślny algorytm wyznaczania wartości skrótu dla elementu WPF PackageDigitalSignatureManager to teraz SHA256

Szczegóły

Zapewnia System.IO.Packaging.PackageDigitalSignatureManager funkcje podpisów cyfrowych w odniesieniu do pakietów WPF. W programie .NET Framework 4.7 i starszych wersjach domyślny algorytm (PackageDigitalSignatureManager.DefaultHashAlgorithm) używany do podpisywania części pakietu to SHA1. Ze względu na ostatnie obawy dotyczące zabezpieczeń sha1 ta wartość domyślna została zmieniona na SHA256, począwszy od programu .NET Framework 4.7.1. Ta zmiana ma wpływ na wszystkie podpisywanie pakietów, w tym dokumenty XPS.

Sugestia

Deweloper, który chce wykorzystać tę zmianę podczas określania wersji platformy poniżej programu .NET Framework 4.7.1 lub dewelopera, który wymaga poprzedniej funkcjonalności podczas określania wartości docelowej programu .NET Framework 4.7.1 lub nowszej, może odpowiednio ustawić następującą flagę AppContext. Wartość true spowoduje, że algorytm SHA1 będzie używany jako algorytm domyślny; Wynik false powoduje sha256.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.UseSha1AsDefaultHashAlgorithmForDigitalSignatures=true"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.1
Typ Przekierowanie

Dotyczy interfejsów API

Windows Workflow Foundation (WF)

Ulepszenia ułatwień dostępu w projektancie przepływu pracy programu Windows Workflow Foundation (WF)

Szczegóły

Projektant przepływu pracy programu Windows Workflow Foundation (WF) ulepsza sposób działania z technologiami ułatwień dostępu. Te ulepszenia obejmują następujące zmiany:

  • Kolejność tabulacji została zmieniona na lewą do prawej i od góry do dołu w niektórych kontrolkach:
  • Okno inicjowania korelacji do ustawiania danych korelacji dla InitializeCorrelation działania
  • Okno definicji zawartości dla Receivedziałań , Send, SendReplyi ReceiveReply
  • Więcej funkcji jest dostępnych za pomocą klawiatury:
  • Podczas edytowania właściwości działania grupy właściwości można zwinąć za pomocą klawiatury po raz pierwszy.
  • Ikony ostrzeżeń są teraz dostępne za pomocą klawiatury.
  • Przycisk Więcej właściwości w okno Właściwości jest teraz dostępny za pomocą klawiatury.
  • Użytkownicy klawiatury mogą teraz uzyskiwać dostęp do elementów nagłówka w okienkach Argumenty i zmienne Projektant przepływu pracy.
  • Ulepszona widoczność elementów z fokusem, na przykład w następujących przypadkach:
  • Dodawanie wierszy do siatek danych używanych przez projektantów przepływu pracy Projektant i działań.
  • Tabbing through fields in the and ( Tabbing through fields in the and activities ( Tabbing through fields in the ReceiveReply and SendReply activities ( Tabbing
  • Ustawianie wartości domyślnych zmiennych lub argumentów
  • Czytniki zawartości ekranu mogą teraz poprawnie rozpoznać:
  • Punkty przerwania ustawione w projektancie przepływu pracy.
  • Działania FlowSwitch<T>, FlowDecisioni CorrelationScope .
  • Zawartość Receive działania.
  • Typ docelowy InvokeMethod działania.
  • Pole kombi Wyjątek i sekcja Finally w TryCatch działaniu.
  • Pole kombi Typ komunikatu, rozdzielacz w oknie Dodawanie inicjatorów korelacji, okno Definicja zawartości i okno Koreluj definicję w działaniach obsługi komunikatów (Receive, Send, SendReplyi ReceiveReply).
  • Przejścia i przejścia maszyny stanu.
  • Adnotacje i łączniki dotyczące FlowDecision działań.
  • Menu kontekstowe (kliknij prawym przyciskiem myszy) dla działań.
  • Edytory wartości właściwości, przycisk Wyczyść wyszukiwanie, przyciski Według kategorii i sortowania alfabetycznego oraz okno dialogowe Edytor wyrażeń w siatce właściwości.
  • Procent powiększenia w Projektant przepływu pracy.
  • Separator w Parallel i Pick działania.
  • Działanie InvokeDelegate .
  • Okno Wybieranie typów dla działań słownika (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>itp.).
  • Okno Przeglądaj i Wybierz typ platformy .NET.
  • Linki do stron nadrzędnych w Projektant przepływu pracy.
  • Użytkownicy, którzy wybierają motywy o wysokim kontraście, zobaczą wiele ulepszeń widoczności Projektant przepływów pracy i jego kontrolek, takich jak lepsze współczynniki kontrastu między elementami i bardziej zauważalne pola wyboru używane dla elementów fokusu.

Sugestia

Jeśli masz aplikację z ponownie hostowanym projektantem przepływu pracy, aplikacja może skorzystać z tych zmian, wykonując jedną z następujących akcji:

  • Ponownie skompiluj aplikację w celu kierowania programu .NET Framework 4.7.1. Te zmiany ułatwień dostępu są domyślnie włączone.
  • Jeśli aplikacja jest przeznaczona dla programu .NET Framework 4.7 lub starszego, ale działa w programie .NET Framework 4.7.1, możesz zrezygnować z tych starszych zachowań ułatwień dostępu, dodając następujący przełącznik AppContext do <runtime> sekcji pliku app.config i ustawić go na falsewartość , jak pokazano w poniższym przykładzie.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false" />
  </runtime>
</configuration>

Aplikacje przeznaczone dla programu .NET Framework 4.7.1 lub nowszego i chcą zachować starsze zachowanie ułatwień dostępu, mogą wyrazić zgodę na korzystanie ze starszych funkcji ułatwień dostępu przez jawne ustawienie tego przełącznika AppContext na true.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.1
Typ Przekierowanie

.NET Framework 4.7.2

Podstawowe funkcje

Zezwalaj na dwukierunkowe znaki kontrolek Unicode w identyfikatorach URI

Szczegóły

Unicode określa kilka specjalnych znaków sterujących używanych do określania orientacji tekstu. W poprzednich wersjach programu .NET Framework znaki te zostały niepoprawnie usunięte ze wszystkich identyfikatorów URI, nawet jeśli były obecne w postaci zakodowanej procentowo. Aby lepiej postępować zgodnie z RFC 3987, teraz zezwalamy na te znaki w identyfikatorach URI. Po znalezieniu niekodowanego w identyfikatorze URI są one kodowane procentowo. Po znalezieniu zakodowanych procentowo są one pozostawione zgodnie z rzeczywistym użyciem.

Sugestia

W przypadku aplikacji przeznaczonych dla wersji programu .NET Framework, począwszy od wersji 4.7.2, obsługa znaków dwukierunkowych Unicode jest domyślnie włączona. Jeśli ta zmiana jest niepożądana, możesz ją wyłączyć, dodając następujący przełącznik AppContextSwitchOverrides do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=true" />
</runtime>

W przypadku aplikacji przeznaczonych dla wcześniejszych wersji programu .NET Framework, ale są uruchomione w wersjach, począwszy od programu .NET Framework 4.7.2, obsługa znaków dwukierunkowych Unicode jest domyślnie wyłączona. Można ją włączyć, dodając następujący przełącznik AppContextSwitchOverrides do <runtime> sekcji pliku konfiguracji aplikacji::

<runtime>
<AppContextSwitchOverrides value="Switch.System.Uri.DontKeepUnicodeBidiFormattingCharacters=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Funkcja DeflateStream używa natywnych interfejsów API do dekompresji

Szczegóły

Począwszy od programu .NET Framework 4.7.2, implementacja dekompresji w T:System.IO.Compression.DeflateStream klasie zmieniła się tak, aby domyślnie używać natywnych interfejsów API systemu Windows. Zazwyczaj powoduje to znaczną poprawę wydajności. Wszystkie aplikacje platformy .NET przeznaczone dla platformy .NET Framework w wersji 4.7.2 lub nowszej używają implementacji natywnej. Ta zmiana może spowodować pewne różnice w zachowaniu, które obejmują:

  • Komunikaty o wyjątkach mogą być inne. Jednak zgłaszany typ wyjątku pozostaje taki sam.
  • Niektóre specjalne sytuacje, takie jak brak wystarczającej ilości pamięci do ukończenia operacji, mogą być obsługiwane inaczej.
  • Istnieją znane różnice w analizowaniu nagłówka gzip (uwaga: dotyczy to tylko GZipStream dekompresji):
  • Wyjątki podczas analizowania nieprawidłowych nagłówków mogą być zgłaszane w różnym czasie.
  • Implementacja natywna wymusza, że wartości niektórych flag zarezerwowanych wewnątrz nagłówka gzip (tj. FLG) są ustawione zgodnie ze specyfikacją, co może spowodować zgłoszenie wyjątku, w którym wcześniej nieprawidłowe wartości zostały zignorowane.

Sugestia

Jeśli dekompresja z natywnymi interfejsami API ma negatywny wpływ na zachowanie aplikacji, możesz zrezygnować z tej funkcji, dodając Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression przełącznik do runtime sekcji pliku app.config i ustawiając go na :true

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.IO.Compression.DoNotUseNativeZipLibraryForDecompression=true" />
  </runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Upewnij się, że element System.Uri używa spójnego zestawu znaków zarezerwowanych

Szczegóły

W System.Urisystemie niektóre znaki zakodowane w procentach, które były czasami dekodowane, są teraz spójnie zakodowane w lewo. Dzieje się tak we właściwościach i metodach, które uzyskują dostęp do ścieżki, zapytania, fragmentu lub składników userinfo identyfikatora URI. Zachowanie zmieni się tylko wtedy, gdy obie z następujących wartości są spełnione:

  • Identyfikator URI zawiera zakodowaną formę dowolnego z następujących zastrzeżonych znaków: :, , '(, )! lub *.
  • Identyfikator URI zawiera znak Unicode lub zakodowany bez zastrzeżeń. Jeśli oba powyższe znaki są prawdziwe, zakodowane znaki zarezerwowane są szyfrowane. W poprzednich wersjach programu .NET Framework są one dekodowane.

Sugestia

W przypadku aplikacji przeznaczonych dla wersji programu .NET Framework, począwszy od wersji 4.7.2, nowe zachowanie dekodowania jest domyślnie włączone. Jeśli ta zmiana jest niepożądana, możesz ją wyłączyć, dodając następujący przełącznik AppContextSwitchOverrides do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=true" />
</runtime>

W przypadku aplikacji przeznaczonych dla wcześniejszych wersji programu .NET Framework, ale są uruchomione w wersjach, począwszy od programu .NET Framework 4.7.2, nowe zachowanie dekodowania jest domyślnie wyłączone. Można ją włączyć, dodając następujący przełącznik AppContextSwitchOverrides do <runtime> sekcji pliku konfiguracji aplikacji:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Uri.DontEnableStrictRFC3986ReservedCharacterSets=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Program Resgen odmawia ładowania zawartości z internetu

Szczegóły

Pliki resx mogą zawierać dane wejściowe sformatowane binarnie. Jeśli próbujesz użyć rozszerzenia resgen do załadowania pliku pobranego z niezaufanej lokalizacji, ładowanie danych wejściowych domyślnie zakończy się niepowodzeniem.

Sugestia

Użytkownicy resgen, którzy wymagają ładowania danych binarnych sformatowanych danych wejściowych z niezaufanych lokalizacji, mogą usunąć znacznik sieci Web z pliku wejściowego lub zastosować dziwactwa rezygnacji. Dodaj następujące ustawienie rejestru, aby zastosować ekscentryczną rezygnację dla całej maszyny: [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\SDK] "AllowProcessOfUntrustedResourceFiles"="true"

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Ślady stosu uzyskane podczas korzystania z przenośnych plików PDB zawierają teraz informacje o pliku źródłowym i wierszu, jeśli jest to wymagane

Szczegóły

Począwszy od programu .NET Framework 4.7.2, ślady stosu uzyskane podczas korzystania z przenośnych plików PDB zawierają informacje o pliku źródłowym i wierszu po żądaniu. W wersjach wcześniejszych niż .NET Framework 4.7.2 informacje o pliku źródłowym i wierszu byłyby niedostępne w przypadku korzystania z przenośnych plików PDB, nawet jeśli jawnie zażądano.

Sugestia

W przypadku aplikacji przeznaczonych dla programu .NET Framework 4.7.2 możesz zrezygnować z pliku źródłowego i informacji o wierszu podczas korzystania z przenośnych plików PDB, jeśli nie jest to pożądane, dodając następujące informacje do <runtime> sekcji app.config pliku:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=true" />
</runtime>

W przypadku aplikacji przeznaczonych dla wcześniejszych wersji programu .NET Framework, ale uruchamianych w programie .NET Framework 4.7.2 lub nowszym, możesz wyrazić zgodę na informacje o pliku źródłowym i wierszu podczas korzystania z przenośnych plików PDB, dodając następujące informacje do <runtime> sekcji app.config pliku:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Diagnostics.IgnorePortablePDBsInStackTraces=false" />
</runtime>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Windows Forms

Ulepszenia ułatwień dostępu w kontrolkach formularzy systemu Windows dla platformy .NET 4.7.2

Szczegóły

Platforma Windows Forms Framework ulepsza sposób pracy z technologiami ułatwień dostępu, aby lepiej obsługiwać klientów systemu Windows Forms. Obejmują one następujące zmiany:

  • Zmiany w celu ulepszenia wyświetlania w trybie dużego kontrastu.
  • Zmiany w celu ulepszenia nawigacji za pomocą klawiatury w kontrolkach DataGridView i MenuStrip.
  • Zmiany interakcji z Narratorem.

Sugestia

Jak wyrazić zgodę na te zmiany lub zrezygnować z tych zmian Aby aplikacja korzystała z tych zmian , musi działać w programie .NET Framework 4.7.2 lub nowszym. Aplikacja może korzystać z tych zmian w jeden z następujących sposobów:

  • Jest on ponownie komilowany w celu kierowania programu .NET Framework 4.7.2. Te zmiany ułatwień dostępu są domyślnie włączone w aplikacjach Windows Forms przeznaczonych dla programu .NET Framework 4.7.2 lub nowszego.
  • Jest ona przeznaczona dla programu .NET Framework 4.7.1 lub starszej wersji i rezygnuje ze starszych zachowań ułatwień dostępu, dodając następujący przełącznik AppContext do <runtime> sekcji pliku konfiguracji aplikacji i ustawiając go na falsewartość , jak pokazano w poniższym przykładzie.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
  </startup>
  <runtime>
    <!-- AppContextSwitchOverrides value attribute is in the form of 'key1=true/false;key2=true/false  -->
    <AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false" />
  </runtime>
</configuration>

Należy pamiętać, że aby wyrazić zgodę na funkcje ułatwień dostępu dodane w programie .NET Framework 4.7.2, należy również wyrazić zgodę na funkcje ułatwień dostępu programu .NET Framework 4.7.1. Aplikacje przeznaczone dla programu .NET Framework 4.7.2 lub nowszego i chcą zachować starsze zachowanie ułatwień dostępu, mogą wyrazić zgodę na korzystanie ze starszych funkcji ułatwień dostępu przez jawne ustawienie tego przełącznika AppContext na true.

Używanie kolorów zdefiniowanych przez system operacyjny w motywach dużego kontrastu

  • Strzałka listy rozwijanej teraz ToolStripDropDownButton używa kolorów zdefiniowanych przez system operacyjny w motywie dużego kontrastu.
  • ButtonRadioButton, i CheckBox kontrolki z ustawioną FlatStyle wartością lub FlatStyle.FlatFlatStyle.Popup teraz używają kolorów zdefiniowanych przez system operacyjny w motywie dużego kontrastu po wybraniu. Wcześniej kolory tekstu i tła nie były kontrastujące i były trudne do odczytania.
  • Kontrolki zawarte w obiekcie GroupBox , które mają jej Enabled właściwość ustawioną na , będą teraz używać false kolorów zdefiniowanych przez system operacyjny w motywie dużego kontrastu.
  • Kontrolki ToolStripButton, ToolStripComboBoxi ToolStripDropDownButton mają zwiększony współczynnik kontrastu jaskrawości w trybie dużego kontrastu.
  • DataGridViewLinkCell domyślnie używa kolorów zdefiniowanych przez system operacyjny w trybie dużego kontrastu DataGridViewLinkCell.LinkColor dla właściwości . UWAGA: System Windows 10 zmienił wartości dla niektórych kolorów systemowych o wysokim kontraście. Struktura Windows Forms Framework jest oparta na strukturze Win32. Aby uzyskać najlepsze środowisko, uruchom polecenie w najnowszej wersji systemu Windows i wybierz najnowsze zmiany systemu operacyjnego, dodając plik app.manifest w aplikacji testowej i usuwając komentarz z następującego kodu:
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

Ulepszona obsługa narratora

  • Narrator ogłasza teraz wartość ToolStripMenuItem.ShortcutKeys właściwości podczas ogłaszania tekstu elementu ToolStripMenuItem.
  • Narrator wskazuje teraz, kiedy właściwość ma Enabled ustawioną ToolStripMenuItem wartość false.
  • Narrator przekazuje teraz opinię na temat stanu pola wyboru, gdy ListView.CheckBoxes właściwość jest ustawiona na truewartość .
  • Kolejność fokusu trybu skanowania Narratora jest teraz zgodna z kolejnością wizualizacji kontrolek w oknie dialogowym pobierania ClickOnce.

Ulepszona obsługa ułatwień dostępu dataGridView

Ulepszone podpowiedzi wizualne

  • Kontrolki RadioButton i CheckBox z pustą Text właściwością będą teraz wyświetlać wskaźnik koncentracji uwagi po otrzymaniu fokusu.

Ulepszona obsługa siatki właściwości

Nazwa/nazwisko Wartość
Zakres Główna
Wersja 4.7.2
Typ Przekierowanie

Właściwość ContextMenuStrip.SourceControl zawiera prawidłową kontrolkę w przypadku zagnieżdżonych parametrów ToolStripMenuItems

Szczegóły

W programie .NET Framework 4.7.1 i poprzednich wersjach właściwość niepoprawnie zwraca wartość null, ContextMenuStrip.SourceControl gdy użytkownik otworzy menu z zagnieżdżonych ToolStripMenuItem kontrolek. W programie .NET Framework 4.7.2 lub nowszym SourceControl właściwość jest zawsze ustawiona na rzeczywistą kontrolę źródła.

Sugestia

Jak wyrazić zgodę na te zmiany lub zrezygnować z tych zmian Aby aplikacja korzystała z tych zmian , musi działać w programie .NET Framework 4.7.2 lub nowszym. Aplikacja może korzystać z tych zmian w jeden z następujących sposobów:

  • Jest przeznaczony dla programu .NET Framework 4.7.2. Ta zmiana jest domyślnie włączona w aplikacjach Windows Forms przeznaczonych dla programu .NET Framework 4.7.2 lub nowszego.
  • Jest ona przeznaczona dla programu .NET Framework 4.7.1 lub starszej wersji i rezygnuje ze starszych zachowań ułatwień dostępu, dodając następujący przełącznik AppContext do <runtime> sekcji pliku app.config i ustawiając go na falsewartość , jak pokazano w poniższym przykładzie.
<runtime>
  <AppContextSwitchOverrides value="Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue=false"/>
</runtime>

Aplikacje przeznaczone dla programu .NET Framework 4.7.2 lub nowszego i chcą zachować starsze zachowanie, mogą wyrazić zgodę na użycie starszej wartości kontroli źródła, jawnie ustawiając ten przełącznik AppContext na true.

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Metoda PrivateFontCollection.AddFontFile zwalnia zasoby czcionek

Szczegóły

W programie .NET Framework 4.7.1 i poprzednich wersjach System.Drawing.Text.PrivateFontCollection klasa nie zwalnia zasobów czcionek GDI+ po usunięciu PrivateFontCollectionFont obiektów dodanych do tej kolekcji przy użyciu AddFontFile(String) metody . W programie .NET Framework 4.7.2 lub nowszym Dispose zostanie wydana czcionki GDI+ dodane do kolekcji jako pliki.

Sugestia

Jak wyrazić zgodę na te zmiany lub zrezygnować z tych zmian Aby aplikacja korzystała z tych zmian , musi działać w programie .NET Framework 4.7.2 lub nowszym. Aplikacja może korzystać z tych zmian w jeden z następujących sposobów:

  • Jest on ponownie komilowany w celu kierowania programu .NET Framework 4.7.2. Ta zmiana jest domyślnie włączona w aplikacjach Windows Forms przeznaczonych dla programu .NET Framework 4.7.2 lub nowszego.
  • Jest ona przeznaczona dla programu .NET Framework 4.7.1 lub starszej wersji i rezygnuje ze starszych zachowań ułatwień dostępu, dodając następujący przełącznik AppContext do <runtime> sekcji pliku app.config i ustawiając go na falsewartość , jak pokazano w poniższym przykładzie.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Drawing.Text.DoNotRemoveGdiFontsResourcesFromFontCollection=false"/>
</runtime>

Aplikacje przeznaczone dla programu .NET Framework 4.7.2 lub nowszego i chcą zachować starsze zachowanie, mogą zrezygnować z udostępniania zasobów czcionek przez jawne ustawienie tego przełącznika AppContext na true.

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Akcje upbutton i downbutton domeny systemu WinForm są teraz zsynchronizowane

Szczegóły

W programie .NET Framework 4.7.1 i poprzednich wersjach DomainUpDown akcja kontrolki DomainUpDown.UpButton() jest ignorowana, gdy tekst kontrolki jest obecny, a deweloper musi używać DomainUpDown.DownButton() akcji w kontrolce przed użyciem DomainUpDown.UpButton() akcji. Począwszy od programu .NET Framework 4.7.2 zarówno akcje DomainUpDown.UpButton() , jak i DomainUpDown.DownButton() działają niezależnie w tym scenariuszu i pozostają zsynchronizowane.

Sugestia

Aby aplikacja korzystała z tych zmian, musi działać w programie .NET Framework 4.7.2 lub nowszym. Aplikacja może korzystać z tych zmian w jeden z następujących sposobów:

  • Jest on ponownie komilowany w celu kierowania programu .NET Framework 4.7.2. Ta zmiana jest domyślnie włączona w aplikacjach Windows Forms przeznaczonych dla programu .NET Framework 4.7.2 lub nowszego.
  • Rezygnacja ze starszego zachowania przewijania przez dodanie następującego przełącznika AppContext do <runtime> sekcji pliku konfiguracji aplikacji i ustawienia go na falsewartość , jak pokazano w poniższym przykładzie.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling=false"/>
</runtime>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Dotyczy interfejsów API

Windows Presentation Foundation (WPF)

Fokus klawiatury jest teraz prawidłowo przesuwany w wielu warstwach hostingu WinForms/WPF

Szczegóły

Rozważ aplikację WPF hostująca kontrolkę WinForms, która z kolei hostuje kontrolki WPF. Użytkownicy mogą nie być w stanie wyrejeścić się z warstwy WinForms, jeśli pierwsza lub ostatnia kontrolka w tej warstwie jest WPF System.Windows.Forms.Integration.ElementHost. Ta zmiana rozwiązuje ten problem, a użytkownicy mogą teraz wyprowadzić kartę z warstwy WinForms. Zautomatyzowane aplikacje, które opierają się na fokusie, nigdy nie uciekają przed warstwą WinForms, mogą przestać działać zgodnie z oczekiwaniami.

Sugestia

Deweloper, który chce wykorzystać tę zmianę podczas określania wartości docelowej wersji platformy poniżej platformy .NET 4.7.2, może ustawić następujący zestaw flag AppContext na wartość false, aby zmiana została włączona.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false"/>
</runtime>
</configuration>

Aplikacje WPF muszą wyrazić zgodę na wszystkie wczesne ulepszenia ułatwień dostępu, aby uzyskać późniejsze ulepszenia. Innymi słowy, zarówno Switch.UseLegacyAccessibilityFeatures przełączniki, jak i Switch.UseLegacyAccessibilityFeatures.2 muszą być ustawione DeweloperA, który wymaga poprzedniej funkcjonalności podczas określania wartości docelowej .NET 4.7.2 lub nowszej może ustawić następującą flagę AppContext na wartość true, aby zmiana została wyłączona.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Domyślny algorytm wyznaczania wartości skrótu dla kompilatora znaczników WPF to teraz SHA256

Szczegóły

WPF MarkupCompiler udostępnia usługi kompilacji dla plików znaczników XAML. W programie .NET Framework 4.7.1 i starszych wersjach domyślny algorytm wyznaczania wartości skrótu używany dla sum kontrolnych to SHA1. Ze względu na ostatnie obawy dotyczące zabezpieczeń sha1 ta wartość domyślna została zmieniona na SHA256, począwszy od programu .NET Framework 4.7.2. Ta zmiana ma wpływ na wszystkie generowanie sumy kontrolnej dla plików znaczników podczas kompilacji.

Sugestia

Deweloper, który jest przeznaczony dla programu .NET Framework 4.7.2 lub nowszego i chce przywrócić zachowanie wyznaczania wartości skrótu SHA1, musi ustawić następującą flagę AppContext.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=true"/>
</runtime>
</configuration>

Deweloper, który chce użyć skrótu SHA256 podczas określania wartości docelowej wersji platformy poniżej platformy .NET 4.7.2, musi ustawić poniższą flagę AppContext. Należy pamiętać, że zainstalowana wersja programu .NET Framework musi być 4.7.2 lub nowsza.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Markup.DoNotUseSha256ForMarkupCompilerChecksumAlgorithm=false"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Transparent
Wersja 4.7.2
Typ Przekierowanie

Obsługa zamykania aplikacji WPF AppDomain może teraz wywołać dyspozytor.Invoke w oczyszczeniu słabych zdarzeń

Szczegóły

W programie .NET Framework 4.7.1 i starszych wersjach WPF potencjalnie tworzy System.Windows.Threading.Dispatcher element w wątku finalizatora platformy .NET podczas zamykania aplikacji AppDomain. Rozwiązano ten problem w programie .NET Framework 4.7.2 i nowszych wersjach przez wyczyszczenie słabych zdarzeń z obsługą wątków. W związku z tym WPF może wywołać Dispatcher.Invoke proces oczyszczania. W niektórych aplikacjach ta zmiana chronometrażu finalizatora może potencjalnie spowodować wyjątki podczas zamykania domeny aplikacji lub procesu. Jest to zwykle widoczne w aplikacjach, które nie zamykają prawidłowo dyspozytorów uruchomionych w wątkach roboczych przed procesem lub zamykaniem appDomain. Takie aplikacje powinny odpowiednio zarządzać okresem istnienia dyspozytorów.

Sugestia

W programie .NET Framework 4.7.2 i nowszych wersjach deweloperzy mogą wyłączyć tę poprawkę, aby pomóc złagodzić (ale nie wyeliminować) problemy z chronometrażem, które mogą wystąpić z powodu zmiany oczyszczania. Aby wyłączyć zmianę czyszczenia, użyj następującej flagi AppContext.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.MS.Internal.DoNotInvokeInWeakEventTableShutdownListener=true"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

WPF Zmiana klucza podstawowego podczas wyświetlania danych ADO w scenariuszu wzorca/szczegółów

Szczegóły

Załóżmy, że masz kolekcję ADO elementów typu Order, z relacją o nazwie "OrderDetails", która odnosi się do kolekcji elementów typu Detail za pośrednictwem klucza podstawowego "OrderID". W aplikacji WPF możesz powiązać kontrolkę listy ze szczegółami dla danej kolejności:

<ListBox ItemsSource="{Binding Path=OrderDetails}" >

gdzie element DataContext to Order. WPF pobiera wartość OrderDetails właściwości — kolekcję D wszystkich Detail elementów, których OrderID pasuje do OrderID elementu głównego. Zmiana zachowania pojawia się po zmianie klucza OrderID podstawowego elementu głównego. ADO automatycznie zmienia OrderID każdy rekord, którego dotyczy problem w kolekcji Details (czyli te skopiowane do kolekcji D). Ale co się stanie z D?

  • Stare zachowanie: kolekcja D jest czyszczone. Element główny nie zgłasza powiadomienia o zmianie właściwości OrderDetails. Pole Listy nadal używa kolekcji D, która jest teraz pusta.
  • Nowe zachowanie: Kolekcja D jest niezmieniona. Każdy z jego elementów zgłasza powiadomienie o zmianie właściwości OrderID . Pole ListBox nadal używa kolekcji D i wyświetla szczegóły z nowym OrderIDelementem . WPF implementuje nowe zachowanie, tworząc kolekcję D w inny sposób: wywołując metodę DataRowView.CreateChildView(DataRelation, Boolean) ADO z argumentem ustawionym followParent na truewartość .

Sugestia

Aplikacja pobiera nowe zachowanie przy użyciu następującego przełącznika AppContext.

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Windows.Data.DoNotUseFollowParentWhenBindingToADODataRelation=false"/>
  </runtime>
</configuration>

Przełącz wartość domyślną na true (stare zachowanie) dla aplikacji przeznaczonych dla platformy .NET 4.7.1 lub nowszej oraz do false (nowe zachowanie) dla aplikacji przeznaczonych dla platformy .NET 4.7.2 lub nowszej.

Nazwa/nazwisko Wartość
Zakres Mały
Wersja 4.7.2
Typ Przekierowanie

WPF FocusVisual dla RadioButton i CheckBox są teraz wyświetlane poprawnie, gdy kontrolki nie mają zawartości

Szczegóły

W programie .NET Framework 4.7.1 i starszych wersjach platforma WPF System.Windows.Controls.CheckBox ma System.Windows.Controls.RadioButton niespójne motywy oraz w motywach klasycznych i wysokich kontrastów niepoprawne wizualizacje fokusu. Te problemy występują w przypadkach, gdy kontrolki nie mają żadnego zestawu zawartości. Może to utrudnić przejście między motywami i wizualizacją fokusu. W programie .NET Framework 4.7.2 te wizualizacje są teraz bardziej spójne w motywach i łatwiej widoczne w motywach klasycznych i o wysokim kontraście.

Sugestia

Deweloper przeznaczony dla programu .NET Framework 4.7.2, który chce przywrócić zachowanie w programie .NET 4.7.1, musi ustawić następującą flagę AppContext.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures.2=true;"/>
</runtime>
</configuration>

Deweloper, który chce wykorzystać tę zmianę podczas określania wersji platformy poniżej platformy .NET 4.7.2, musi ustawić następujące flagi AppContext. Należy pamiętać, że wszystkie flagi muszą być odpowiednio ustawione, a zainstalowana wersja programu .NET Framework musi mieć wartość 4.7.2 lub nowszą. Aplikacje WPF są wymagane, aby wyrazić zgodę na wszystkie wcześniejsze ulepszenia ułatwień dostępu, aby uzyskać najnowsze ulepszenia. W tym celu upewnij się, że oba przełączniki AppContext "Switch.UseLegacyAccessibilityFeatures" i "Switch.UseLegacyAccessibilityFeatures.2" są ustawione na wartość false.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Zaznaczenie tekstu WPF TextBox/PasswordBox nie jest zgodne z kolorami systemu

Szczegóły

W programie .NET Framework 4.7.1 i starszych wersjach platforma WPF System.Windows.Controls.TextBoxSystem.Windows.Controls.PasswordBox może renderować tylko zaznaczenie tekstu w warstwie Adorner. W niektórych motywach systemowych byłoby to okludium tekstu, co utrudnia czytanie. W programie .NET Framework 4.7.2 lub nowszym deweloperzy mają możliwość włączenia schematu renderowania wyboru innego niż Adorner, który złagodzi ten problem.

Sugestia

Deweloper, który chce wykorzystać tę zmianę, musi odpowiednio ustawić następującą flagę AppContext. Aby korzystać z tej funkcji, zainstalowana wersja programu .NET Framework musi być 4.7.2 lub nowsza. Aby włączyć wybór nienależący do adoratora, użyj następującej flagi AppContext.

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Text.UseAdornerForTextboxSelectionRendering=false"/>
</runtime>
</configuration>
Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie

Windows Workflow Foundation (WF)

Unikanie niekończącej się rekursji dla elementu IWorkflowInstanceManagement.TransactedCancel i IWorkflowInstanceManagement.TransactedTerminate

Szczegóły

W niektórych okolicznościach podczas anulowania lub zakończenia wystąpienia usługi przepływu pracy lub IWorkflowInstanceManagement.TransactedCancelIWorkflowInstanceManagement.TransactedTerminate interfejsów API wystąpienie przepływu pracy może napotkać przepełnienie stosu z powodu niekończącej się rekursji, gdy Workflow środowisko uruchomieniowe próbuje utrwalyć wystąpienie usługi w ramach przetwarzania żądania. Problem występuje, jeśli wystąpienie przepływu pracy jest w stanie, w którym oczekuje na ukończenie innego zaległego żądania programu WCF do innej usługi. Operacje TransactedCancel i TransactedTerminate tworzą elementy robocze, które są kolejkowane dla wystąpienia usługi przepływu pracy. Te elementy robocze nie są wykonywane w ramach przetwarzania TransactedCancel/TransactedTerminate żądania. Ponieważ wystąpienie usługi przepływu pracy jest zajęte oczekiwaniem na ukończenie innego zaległego żądania programu WCF, utworzony element roboczy pozostaje w kolejce. Operacja zostanie ukończona i kontrolka TransactedCancel/TransactedTerminate zostanie zwrócona z powrotem do klienta. Gdy transakcja skojarzona z TransactedCancel/TransactedTerminate operacją próbuje zatwierdzić, musi utrwałać stan wystąpienia usługi przepływu pracy. Ponieważ jednak istnieje zaległe WCF żądanie dla wystąpienia, środowisko uruchomieniowe przepływu pracy nie może utrwalyć wystąpienia usługi przepływu pracy, a nieskończona pętla rekursji prowadzi do przepełnienia stosu. Ponieważ TransactedCancel i TransactedTerminate tworzy tylko element roboczy w pamięci, fakt, że transakcja istnieje, nie ma żadnego wpływu. Wycofanie transakcji nie powoduje odrzucenia elementu roboczego. Aby rozwiązać ten problem, począwszy od programu .NET Framework 4.7.2, wprowadziliśmy element AppSetting , który można dodać do web.config/app.config usługi przepływu pracy, która informuje go o ignorowaniu transakcji dla i TransactedCancelTransactedTerminate. Dzięki temu transakcja może być zatwierdzana bez oczekiwania na utrwalone wystąpienie przepływu pracy. Element AppSetting dla tej funkcji nosi nazwę microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate. Wartość true wskazuje, że transakcja powinna być ignorowana, co pozwala uniknąć przepełnienia stosu. Wartość domyślna tego ustawienia to false, więc nie ma to wpływu na istniejące wystąpienia usługi przepływu pracy.

Sugestia

Jeśli używasz programu AppFabric lub innego IWorkflowInstanceManagement klienta i występuje przepełnienie stosu w wystąpieniu usługi przepływu pracy podczas próby anulowania lub zakończenia wystąpienia przepływu pracy, możesz dodać następujący kod do <appSettings> sekcji pliku web.config/app.config dla usługi przepływu pracy:

<add key="microsoft:WorkflowServices:IgnoreTransactionsForTransactedCancelAndTransactedTerminate" value="true"/>

Jeśli nie napotkasz problemu, nie musisz tego robić.

Nazwa/nazwisko Wartość
Zakres Edge
Wersja 4.7.2
Typ Przekierowanie