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
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
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
- System.Net.Security.SslStream
- System.Net.WebRequest
- System.Net.HttpWebRequest
- System.Net.FtpWebRequest
- System.Net.Mail.SmtpClient
- System.Net.Http
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
- DataContractJsonSerializer.WriteObject(Stream, Object)
- DataContractJsonSerializer.WriteObject(XmlDictionaryWriter, Object)
- DataContractJsonSerializer.WriteObject(XmlWriter, Object)
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 nafalse
wartość , 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
- System.Security.Cryptography.Pkcs.CmsSigner
- System.Security.Cryptography.Xml.SignedXml
- System.Security.Cryptography.Xml.Reference
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 nafalse
wartość , 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:
Kontrolki ToolStripSplitButton i ComboBox obsługują wzorzec Rozwiń/Zwiń.
Kontrolka ToolStripMenuItem ma wartość ControlType.MenuItemwłaściwości ControlType .
Kontrolka ToolStripItem obsługuje NameProperty właściwość iwzorzec Rozwiń/Zwiń.
Kontrolka ToolStripDropDownItem obsługuje AccessibleEvents wskazywanie wartości StateChange i NameChange po rozwinięciu lub zwinięciu listy rozwijanej.
Kontrolka ToolStripDropDownButton ma właściwość ControlType o wartości ControlType.MenuItem.
Kontrolka DataGridViewCheckBoxCell obsługuje element TogglePattern.
Kontrolki NumericUpDown i DomainUpDown obsługują NameProperty właściwość i mają właściwość ControlType .ControlType.Spinner
Ulepszenia kontrolki PropertyGrid .NET Framework 4.7.1 dodaje następujące ulepszenia kontrolki PropertyBrowser:Przycisk Szczegóły w oknie dialogowym błędu wyświetlanym, gdy użytkownik wprowadzi nieprawidłową wartość w kontrolce PropertyGrid , obsługuje wzorzec Rozwiń/Zwiń, stan i nazwę powiadomienia o zmianie nazwy oraz właściwość ControlType z wartością ControlType.MenuItem.
Okienko komunikatów wyświetlane po rozwinięciu przycisku Szczegóły okna dialogowego błędu jest teraz dostępne za pomocą klawiatury i umożliwia Narratorowi ogłoszenie zawartości komunikatu o błędzie.
Wiersze AccessibleRole w kontrolce PropertyGrid zostały zmienione z "Wiersz" na "Komórka". Komórka mapuje na kontrolkę UIA ControlType "DataItem", która umożliwia obsługę odpowiednich skrótów klawiaturowych i anonsów Narratora.
Wiersze PropertyGrid kontrolki reprezentujące elementy nagłówka, gdy PropertyGrid kontrolka ma właściwość ustawioną PropertySort na PropertySort.Categorized wartość właściwości ControlType .ControlType.Button
Wiersze PropertyGrid kontrolek reprezentujące elementy nagłówka, gdy kontrolka PropertyGrid ma właściwość ustawioną PropertySort na PropertySort.Categorized obsługę wzorca Rozwiń/Zwiń.
Ulepszona nawigacja za pomocą klawiatury między siatką a paskiem narzędzi nad nią. Naciśnięcie klawisza "Shift-Tab" powoduje teraz wybranie pierwszego przycisku ToolBar zamiast całego paska narzędzi.
PropertyGrid kontrolki wyświetlane w trybie dużego kontrastu będą teraz rysować prostokąt fokusu wokół przycisku ToolBar, który odpowiada bieżącej PropertySort wartości właściwości.
PropertyGrid kontrolki wyświetlane w trybie dużego kontrastu i z właściwością ustawioną PropertySort na , będą teraz wyświetlać PropertySort.Categorized tło nagłówków kategorii w bardzo kontrastowym kolorze.
PropertyGrid kontrolki lepiej rozróżniają elementy ToolBar z fokusem i elementami ToolBar, które wskazują bieżącą wartość PropertySort właściwości. Ta poprawka obejmuje zmianę dużego kontrastu i zmianę scenariuszy niezwiązanych z dużym kontrastem.
PropertyGridcontrol ToolBar items ( elementy ToolBar), które wskazują bieżącą wartość właściwości obsługują TogglePatternwartość PropertySort .
Ulepszona obsługa narratora do rozróżniania wybranego wyrównania w selektorze wyrównania.
Gdy na formularzu jest wyświetlana pusta PropertyGrid kontrolka, teraz będzie ona otrzymywać fokus, gdzie wcześniej nie.
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
- ToolStripDropDownButton.CreateAccessibilityInstance()
- DomainUpDown.DomainUpDownAccessibleObject.Name
- MonthCalendar.AccessibilityObject
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
false
wartość , 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
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
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 nafalse
wartość , 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 nafalse
wartość , 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
true
wartość . - 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
- Wiersze w obiekcie DataGridView można teraz sortować przy użyciu klawiatury. Teraz użytkownik może użyć klawisza F3 w celu sortowania według bieżącej kolumny.
- DataGridView.SelectionMode Gdy właściwość jest ustawiona na DataGridViewSelectionMode.FullRowSelectwartość , nagłówek kolumny zmieni kolor, aby wskazać bieżącą kolumnę jako kartę użytkownika w komórkach w bieżącym wierszu.
- Właściwość DataGridViewCell.DataGridViewCellAccessibleObject.Parent zwraca teraz prawidłową kontrolkę nadrzędną.
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
PropertyGrid Elementy podrzędne kontrolki IsReadOnlyProperty zwracają
true
teraz element dla właściwości tylko wtedy, gdy element PropertyGrid jest włączony.PropertyGrid Elementy podrzędne kontrolki IsEnabledProperty zwracają
Ulepszona nawigacja za pomocą klawiaturyfalse
teraz właściwość tylko wtedy, gdy użytkownik może zmienić element PropertyGrid. Aby zapoznać się z omówieniem automatyzacji interfejsu użytkownika, zobacz omówienie automatyzacja interfejsu użytkownika.ToolStripButton Teraz zezwala na fokus, gdy znajduje się w obiekcie ToolStripPanel , który ma właściwość ustawioną TabStop na
true
wartość .
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 nafalse
wartość , 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 nafalse
wartość , 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 nafalse
wartość , 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 nowymOrderID
elementem . WPF implementuje nowe zachowanie, tworząc kolekcję D w inny sposób: wywołując metodę DataRowView.CreateChildView(DataRelation, Boolean) ADO z argumentem ustawionymfollowParent
natrue
wartość .
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.TextBox
System.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 TransactedCancel
TransactedTerminate
. 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 |