Udostępnij za pośrednictwem


Zmiany retargetingu na potrzeby migracji do programu .NET Framework 4.8.x

W tym artykule wymieniono problemy ze zgodnością aplikacji wprowadzone w programie .NET Framework 4.8 i 4.8.1.

.NET Framework 4.8

Rdzeń

Klasy kryptografii zarządzanych nie zgłaszają wyjątku CryptographyException w trybie FIPS

Szczegóły

W programie .NET Framework 4.7.2 i starszych wersjach zarządzane klasy dostawców kryptograficznych, takie jak SHA256Managed zgłaszają CryptographicException, gdy systemowe biblioteki kryptograficzne są skonfigurowane w trybie FIPS. Te wyjątki są zgłaszane, ponieważ wersje zarządzane nie zostały poddane certyfikacji FIPS (Federal Information Processing Standards) 140-2, a także do blokowania algorytmów kryptograficznych, które nie zostały uznane za zatwierdzone na podstawie reguł FIPS. Ponieważ niewielu deweloperów ma swoje maszyny programistyczne w trybie FIPS, te wyjątki są często zgłaszane tylko w systemach produkcyjnych. Aplikacje przeznaczone dla platformy .NET Framework 4.8 i późniejszych wersji automatycznie przełączają się do nowszych, złagodzonych zasad, tak aby w takich przypadkach wyjątek CryptographicException nie był już domyślnie zgłaszany. Zamiast tego zarządzane klasy kryptograficzne przekierowują operacje kryptograficzne do biblioteki kryptograficznej systemu. Ta zmiana zasad skutecznie usuwa potencjalnie mylącą różnicę między środowiskami deweloperskimi a środowiskami produkcyjnymi i sprawia, że składniki natywne i składniki zarządzane działają w ramach tych samych zasad kryptograficznych.

Sugestia

Jeśli to zachowanie jest niepożądane, możesz zrezygnować z niego i przywrócić poprzednie zachowanie, aby w trybie FIPS wystąpił CryptographicException, dodając następujące ustawienie konfiguracji AppContextSwitchOverrides do sekcji <środowiska uruchomieniowego>pliku konfiguracji aplikacji.

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=true" />
</runtime>

Jeśli aplikacja jest przeznaczona dla programu .NET Framework 4.7.2 lub starszego, możesz również wyrazić zgodę na tę zmianę, dodając następujące AppContextSwitchOverrides ustawienie konfiguracji do sekcji środowiska uruchomieniowego pliku konfiguracji aplikacji:

<runtime>
  <AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
Nazwa Wartość
Zakres Edge
Wersja 4.8
Typ Remarketing

Interfejsy API, których dotyczy problem

Formularze systemu Windows

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

Szczegóły

Struktura Windows Forms Framework nadal ulepsza sposób działania 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 interakcji z Narratorem.
  • Zmiany w hierarchii dostępnościowej (poprawa nawigacji w drzewie automatyzacji interfejsu użytkownika).

Sugestia

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

  • Został ponownie skompilowany, aby ukierunkować się na .NET Framework 4.8. Te zmiany ułatwień dostępu są domyślnie włączone w aplikacjach windows Forms przeznaczonych dla programu .NET Framework 4.8.
  • Jest ona przeznaczona dla programu .NET Framework 4.7.2 lub starszej wersji i rezygnuje ze starszych zachowań ułatwień dostępu, dodając następujący przełącznik AppContext do sekcji <runtime> pliku konfiguracji aplikacji i ustawiając go na false, 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;Switch.UseLegacyAccessibilityFeatures.3=false" />
  </runtime>
</configuration>

Należy pamiętać, że aby wyrazić zgodę na funkcje ułatwień dostępu dodane w programie .NET Framework 4.8, należy również wyrazić zgodę na funkcje ułatwień dostępu programu .NET Framework 4.7.1 i 4.7.2. Aplikacje, które są przeznaczone dla programu .NET Framework 4.8 i chcą zachować starsze zachowanie ułatwień dostępu, mogą wyrazić zgodę na korzystanie ze starszych funkcji ułatwień dostępu, jawnie ustawiając ten przełącznik AppContext na true. Włączenie obsługi wywołania etykietki narzędzia klawiatury wymaga dodania wiersza Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false do wartości AppContextSwitchOverrides:

<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false" />

Należy pamiętać, że włączenie tej funkcji wymaga włączenia wyżej wymienionych funkcji ułatwień dostępu programu .NET Framework 4.7.1 — 4.8. Ponadto, jeśli którakolwiek z funkcji ułatwień dostępu nie zostanie włączona, ale funkcja wyświetlania podpowiedzi zostanie włączona, przy pierwszym dostępie do tych funkcji zostanie zgłoszony wyjątek NotSupportedException. Komunikat o wyjątku wskazuje, że podpowiedzi klawiatury wymagają włączenia ulepszeń poziomu 3 w zakresie ułatwień dostępu.

używanie kolorów zdefiniowanych przez system operacyjny w motywach o wysokim kontraście

  • Ulepszone motywy o wysokim kontraście.

ulepszona obsługa narratora

ulepszona obsługa ułatwień dostępu CheckedListBox

  • Ulepszona obsługa narratora dla kontrolki CheckedListBox. Podczas przechodzenia do kontrolki CheckedListBox za pomocą klawiatury Narrator skupia się na elemencie CheckedListBox i to ogłasza.
  • Pusta kontrolka CheckedListBox ma teraz prostokąt fokusu narysowany dla wirtualnego pierwszego elementu, gdy kontrolka staje się skoncentrowana.

Ulepszona obsługa ComboBox w zakresie ułatwień dostępu

  • Włączona obsługa automatyzacji interfejsu użytkownika dla kontrolki ComboBox z możliwością korzystania z powiadomień automatyzacji interfejsu użytkownika i innych funkcji automatyzacji interfejsu użytkownika. Ulepszona obsługa dostępności DataGridView

  • Włączona obsługa automatyzacji interfejsu użytkownika dla kontroli DataGridView z możliwością korzystania z powiadomień automatyzacji interfejsu użytkownika i innych funkcji automatyzacji interfejsu użytkownika.

  • Element automatyzacji interfejsu użytkownika odpowiadający DataGridViewComboBoxEditingControl lub DataGridViewTextBoxEditingControl jest teraz elementem podrzędnym odpowiedniej komórki edycji.

ulepszona obsługa ułatwień dostępu LinkLabel

  • Ulepszona dostępność kontrolki LinkLabel: Narrator informuje, że link jest wyłączony, jeśli odpowiednia kontrolka LinkLabel jest nieaktywna.

Ulepszono dostępność paska postępu

  • Włączona obsługa automatyzacji interfejsu użytkownika dla kontrolki ProgressBar z możliwością korzystania z powiadomień automatyzacji interfejsu użytkownika i innych funkcji automatyzacji interfejsu użytkownika. Deweloperzy mogą teraz używać powiadomień automatyzacji interfejsu użytkownika, które Narrator może ogłosić, aby wskazać postęp. Aby zapoznać się z omówieniem zdarzeń automatyzacji interfejsu użytkownika, w tym zdarzeń powiadomień, zobacz Omówienie zdarzeń automatyzacji interfejsu użytkownika.

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

  • Włączona obsługa automatyzacji interfejsu użytkownika dla kontrolki PropertyGrid z możliwością korzystania z powiadomień automatyzacji interfejsu użytkownika i innych funkcji automatyzacji interfejsu użytkownika.
  • Element automatyzacji interfejsu użytkownika, który odpowiada aktualnie edytowanej właściwości, jest teraz podrzędnym elementem automatyzacji interfejsu użytkownika odpowiadającym elementowi właściwości.
  • Element właściwości automatyzacji interfejsu użytkownika jest teraz elementem podrzędnym odpowiedniego elementu kategorii, jeśli nadrzędna kontrolka PropertyGrid jest ustawiona na widok kategorii.

ulepszona obsługa elementu ToolStrip

  • Włączona obsługa automatyzacji interfejsu użytkownika dla kontrolki ToolStrip z możliwością korzystania z powiadomień automatyzacji interfejsu użytkownika i innych funkcji automatyzacji interfejsu użytkownika.
  • Ulepszona nawigacja przez elementy ToolStrip.
  • W trybie elementów fokus Narratora nie zniknie i nie przechodzi do ukrytych elementów.

ulepszone wskazówki wizualne

  • Pusta kontrolka CheckedListBox teraz wyświetla wskaźnik fokusu po otrzymaniu fokusu. Uwaga: obsługa automatyzacji interfejsu użytkownika jest włączona dla kontrolek w środowisku uruchomieniowym, ale nie jest używana w czasie projektowania. Aby zapoznać się z omówieniem automatyzacji interfejsu użytkownika, zobacz omówienie automatyzacji interfejsu użytkownika .

Wywoływanie wskazówek narzędziowych kontrolek za pomocą klawiatury

  • Etykietka narzędzia sterującego może być teraz wywoływana przez skoncentrowanie kontrolki za pomocą klawiatury. Ta funkcja musi być jawnie włączona dla aplikacji (zobacz sekcję "Jak wyrazić zgodę na te zmiany" lub je wycofać)
Nazwa Wartość
Zakres Major
Wersja 4.8
Typ Ponowne kierowanie

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 to możliwe.
  • Tekst w kontrolkach CheckBox i RadioButton po ich wybraniu 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 to możliwe.
  • Wyłączone i ukierunkowane przyciski używają teraz poprawnego koloru motywu. W poprzednich wersjach programu .NET Framework nie były obsługiwane.
  • Przycisk listy rozwijanej jest teraz widoczny, gdy styl kontrolki ComboBox jest ustawiony na ToolBar.ComboBoxStyleKey. W poprzednich wersjach programu .NET Framework to nie było.
  • Strzałka wskaźnika sortowania w kontrolce DataGrid teraz używa kolorów motywu. We wcześniejszych wersjach .NET Framework tego nie było.
  • Domyślny styl hiperłącza teraz zmienia się na odpowiedni kolor motywu po najechaniu myszką. W poprzednich wersjach .NET Frameworka takiej funkcji nie było.
  • Fokus klawiatury na przyciskach radiowych jest teraz widoczny. W poprzednich wersjach programu .NET Framework nie było to możliwe.
  • Kolumna pola wyboru kontrolki DataGrid używa teraz oczekiwanych kolorów dla informacji zwrotnej dotyczącej skupienia klawiatury. W poprzednich wersjach .NET Framework tak nie było.
  • Wizualizacje fokusu klawiatury są teraz widoczne na kontrolkach ComboBox i ListBox. W poprzednich wersjach programu .NET Framework nie było to możliwe.

Ulepszenia interakcji czytnika ekranu

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

wsparcie LiveRegion

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 innych automatyzacji interfejsu użytkownika klienta, że wprowadzono ważną 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 zrezygnować z nich

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:

  • Docelowa wersja .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 <runtime> pliku konfiguracji aplikacji i ustawienie go na false, 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 automatyzacji interfejsu użytkownika.

Nazwa Wartość
Zakres Major
Wersja 4.7.1
Typ Retargeting (ponowne celowanie w grupy docelowe)

Interfejsy API, których dotyczy problem

Dodaj publiczną właściwość SelectionTextBrush do zaznaczenia w elementach TextBox/PasswordBox bez użycia dekoratora.

Szczegóły

W aplikacjach WPF używających zaznaczenia tekstu opartego naTextBox i PasswordBoxdeweloperzy mogą teraz ustawić nowo dodaną właściwość SelectionTextBrush w celu zmiany renderowania zaznaczonego tekstu. Domyślnie ten kolor zmienia się przy użyciu HighlightTextBrushKey. Jeśli nie włączono zaznaczenia tekstu opartego na dekoratorze, ta właściwość nie ma znaczenia.

Sugestia

Po włączeniu zaznaczenia tekstu bez oparcia na nadmiarowym oznaczeniu można użyć właściwości PasswordBox.SelectionTextBrush i SelectionTextBrush, aby zmienić wygląd zaznaczonego tekstu. Można to osiągnąć przy użyciu języka XAML:

<TextBox SelectionBrush="Red" SelectionTextBrush="White"  SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
Nazwa Wartość
Zakres Major
Wersja 4.8
Typ Retargeting

Interfejsy API, których dotyczy problem

HwndHost teraz poprawnie zmienia rozmiar child-HWND podczas zmian DPI

Szczegóły

W programie .NET Framework 4.7.2 i starszych wersjach, gdy WPF był uruchamiany w trybie obsługującym Per-Monitor, kontrolki hostowane w HwndHost nie były poprawnie ustawiane po zmianie dpi, na przykład podczas przenoszenia aplikacji z jednego monitora do innego. Ta poprawka gwarantuje, że hostowane kontrolki mają odpowiedni rozmiar.

Sugestia

Aby aplikacja korzystała z tych zmian, musi działać na .NET Framework 4.7.2 lub nowszym i musi wyrazić zgodę na to zachowanie, ustawiając następujący AppContext Switch w sekcji <runtime> pliku konfiguracji aplikacji na false, 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 &#39;key1=true/false;key2=true/false  -->
<AppContextSwitchOverrides value="Switch.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
Nazwa Wartość
Zakres Major
Wersja 4.8
Typ Retargeting (powtórne kierowanie reklam)

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 działania InitializeCorrelation
  • Okno definicji zawartości dla działań Receive, 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, gdy zostaną po raz pierwszy zaznaczone.
  • Ikony ostrzeżeń są teraz dostępne za pomocą klawiatury.
  • Przycisk Więcej właściwości w oknie 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 projektanta 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 projektanta przepływu pracy i projektantów działań.
  • Przechodzenie między polami w działaniach ReceiveReply i SendReply.
  • 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ść działania Receive.
  • Typ docelowy działania InvokeMethod.
  • Lista rozwijana dla wyjątków i sekcja Finally w aktywności TryCatch.
  • 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 maszyny stanowej i miejsca docelowe przejść.
  • Adnotacje i łączniki dotyczące działań FlowDecision.
  • 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 Projektancie przepływu pracy.
  • Separator w działaniach Parallel i Pick.
  • Działanie InvokeDelegate.
  • Okno Wybierz typy dla czynności związanych ze słownikiem (Microsoft.Activities.AddToDictionary<TKey,TValue>, Microsoft.Activities.RemoveFromDictionary<TKey,TValue>itp.).
  • Okno Przeglądaj i Wybierz typ platformy .NET.
  • Pasek nawigacyjny w Projektancie Przepływu Pracy.
  • Użytkownicy, którzy wybierają motywy o wysokim kontraście, zobaczą wiele ulepszeń widoczności projektanta przepływu pracy i jego kontrolek, takich jak lepsze współczynniki kontrastu między elementami i bardziej zauważalne pola wyboru używane do elementów koncentracji uwagi.

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:

  • Skompiluj ponownie swoją aplikację, aby była zgodna z .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 jest uruchomiona 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 sekcji <runtime> pliku app.config i ustawić ją na false, 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, jawnie ustawiając ten przełącznik AppContext na true.

Nazwa Wartość
Zakres Małoletni
Wersja 4.7.1
Typ Retargeting

Sumy kontrolne przepływu pracy XAML dla symboli zostały zmienione z SHA1 na SHA256

Szczegóły

Aby obsługiwać debugowanie za pomocą programu Visual Studio, środowisko uruchomieniowe przepływu pracy generuje sumę kontrolną dla pliku XAML przepływu pracy przy użyciu algorytmu tworzenia skrótów. W programie .NET Framework 4.6.2 i starszych wersjach sumy kontrolne przepływu pracy używały algorytmu MD5, co powodowało problemy w systemach z włączoną obsługą standardu FIPS. Począwszy od programu .NET Framework 4.7, domyślny algorytm został zmieniony na SHA1. Począwszy od programu .NET Framework 4.8, domyślny algorytm został zmieniony na SHA256.

Sugestia

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

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

Lub w konfiguracji:

<configuration>
  <runtime>
    <AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
  </runtime>
</configuration>
Nazwa Wartość
Zakres Małoletni
Wersja 4.8
Typ Retargeting (ponowne targetowanie)

Definicje XOML przepływu pracy i klucze pamięci podręcznej SqlTrackingService zmieniły się z MD5 na SHA256

Szczegóły

Środowisko uruchomieniowe przepływu pracy przechowuje w pamięci podręcznej definicje przepływu pracy zdefiniowane w XOML. Usługa SqlTrackingService przechowuje również pamięć podręczną, kluczowaną za pomocą ciągów. Te pamięci podręczne są indeksowane według wartości, które zawierają wartość skrótu kontrolnego (hash). W .NET Framework 4.7.2 i starszych wersjach ten mechanizm skrótu sumy kontrolnej używał algorytmu MD5, co powodowało problemy na systemach z obsługą FIPS. Począwszy od programu .NET Framework 4.8, używany algorytm to SHA256. Nie powinno występować problem ze zgodnością z tą zmianą, ponieważ wartości są ponownie obliczane za każdym razem, gdy środowisko uruchomieniowe przepływu pracy i usługa SqlTrackingService zostaną uruchomione. Udostępniliśmy jednak mechanizmy, aby umożliwić klientom powrót do korzystania ze starszego algorytmu tworzenia skrótów, jeśli to konieczne.

Sugestia

Jeśli ta zmiana stanowi problem podczas wykonywania przepływów pracy, spróbuj ustawić jeden lub oba przełączniki AppContext:

  • Ustaw wartość "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey" na true.
  • Ustaw wartość "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey" na true. W kodzie:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);

Lub w pliku konfiguracji (musi to być w pliku konfiguracji dla aplikacji tworzącej obiekt WorkflowRuntime):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
Nazwa Wartość
Zakres Małoletni
Wersja 4.8
Typ Retargeting (ponowne celowanie)

Sumy kontrolne plików XOML przepływu pracy zostały zmienione z MD5 na SHA256

Szczegóły

Aby obsługiwać debugowanie przepływów pracy opartych na języku XOML w programie Visual Studio, podczas kompilowania projektów przepływu pracy zawierających pliki XOML suma kontrolna zawartości pliku XOML jest uwzględniana w kodzie wygenerowanym jako wartość WorkflowMarkupSourceAttribute.MD5Digest. W programie .NET Framework 4.7.2 i starszych wersjach ten skrót sumy kontrolnej używał algorytmu MD5, co spowodowało problemy z systemami obsługującymi standard FIPS. Począwszy od programu .NET Framework 4.8, używany algorytm to SHA256. Aby zapewnić zgodność z elementem WorkflowMarkupSourceAttribute.MD5Digest, używane są tylko pierwsze 16 bajtów wygenerowanej sumy kontrolnej. Może to spowodować problemy podczas debugowania. Może zajść potrzeba ponownego zbudowania projektu.

Sugestia

Jeśli ponowne kompilowanie projektu nie rozwiąże problemu, spróbuj ustawić przełącznik AppContext "Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum" na wartość true. W kodzie:

System.AppContext.SetSwitch("Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum", true);

Lub w pliku konfiguracji (musi to być w MSBuild.exe.config dla używanego MSBuild.exe):

<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
Nazwa Wartość
Zakres Małoletni
Wersja 4.8
Typ Retargeting (remarketing)

.NET Framework 4.8.1

W programie .NET Framework 4.8.1 nie wprowadzono żadnych problemów ze zgodnością aplikacji.