이 문서에서는 .NET Framework 4.8 및 4.8.1도입된 앱 호환성 문제를 나열합니다.
.NET Framework 4.8
핵심
관리되는 암호화 클래스는 FIPS 모드에서 CryptographyException을 throw하지 않습니다.
세부 정보
.NET Framework 4.7.2 및 이전 버전에서는 FIPS 모드로 시스템 암호화 라이브러리가 구성된 경우, SHA256Managed와 같은 관리형 암호화 공급자 클래스가 CryptographicException을 던집니다. 관리되는 버전이 FIPS(연방 정보 처리 표준) 140-2 인증을 받지 않았고 FIPS 규칙에 따라 승인되지 않은 암호화 알고리즘을 차단하기 때문에 이러한 예외가 throw됩니다. FIPS 모드의 개발 머신은 거의 갖지 않으므로 이러한 예외는 프로덕션 시스템에서만 자주 throw됩니다. .NET Framework 4.8 이상 버전을 대상으로 하는 애플리케이션은 자동으로 완화된 최신 정책으로 전환되므로 이러한 경우 CryptographicException 더 이상 기본적으로 throw되지 않습니다. 대신 관리되는 암호화 클래스는 암호화 작업을 시스템 암호화 라이브러리로 리디렉션합니다. 이 정책 변경은 개발자 환경과 프로덕션 환경 간의 잠재적으로 혼동되는 차이를 효과적으로 제거하고 네이티브 구성 요소와 관리되는 구성 요소가 동일한 암호화 정책에 따라 작동하게 합니다.
제안
이 동작이 바람직하지 않은 경우 다음 CryptographicException 구성 설정을 애플리케이션 구성 파일의 섹션에 추가하여 < FIPS 모드에서 throw되도록 이전 동작을 옵트아웃하고 복원할 수 있습니다.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=true" />
</runtime>
애플리케이션이 .NET Framework 4.7.2 이하를 대상으로 하는 경우 다음 AppContextSwitchOverrides 구성 설정을 애플리케이션 구성 파일의 <런타임> 섹션에 추가하여 이 변경을 옵트인할 수도 있습니다.
<runtime>
<AppContextSwitchOverrides value="Switch.System.Security.Cryptography.UseLegacyFipsThrow=false" />
</runtime>
이름 | 값 |
---|---|
범위 | 엣지 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
영향을 받는 API
- System.Security.Cryptography.AesManaged
- System.Security.Cryptography.MD5Cng
- System.Security.Cryptography.MD5CryptoServiceProvider
- System.Security.Cryptography.RC2CryptoServiceProvider
- System.Security.Cryptography.RijndaelManaged
- System.Security.Cryptography.RIPEMD160Managed
- System.Security.Cryptography.SHA1Managed
- System.Security.Cryptography.SHA256Managed
윈도우 폼즈 (Windows Forms)
.NET 4.8용 Windows Forms 컨트롤의 접근성 향상
세부 정보
Windows Forms 프레임워크는 Windows Forms 고객을 더 잘 지원하기 위해 접근성 기술과 함께 작동하는 방식을 지속적으로 개선하고 있습니다. 여기에는 다음과 같은 변경 내용이 포함되었습니다.
- 고대비 모드에서 디스플레이를 개선하기 위한 변경 내용입니다.
- 내레이터와의 상호 작용에 대한 변경 내용입니다.
- 접근성 계층 구조의 변경 내용(UI 자동화 트리를 통한 탐색 개선).
제안
이러한 변경 내용을 옵트인하거나 옵트아웃하는 방법 애플리케이션이 이러한 변경 내용을 활용하려면 .NET Framework 4.8에서 실행해야 합니다. 애플리케이션은 다음 방법 중 하나에서 이러한 변경 내용을 옵트인할 수 있습니다.
- .NET Framework 4.8을 대상으로 다시 컴파일됩니다. 이러한 접근성 변경은 기본적으로 .NET Framework 4.8을 대상으로 하는 Windows Forms 애플리케이션에서 사용하도록 설정됩니다.
- 다음과 같이 .NET Framework 4.7.2 이하 버전을 대상으로 하여 앱 구성 파일의 섹션에 다음
<runtime>
을 추가하고false
으로 설정하여 레거시 접근성 동작을 비활성화합니다.
<?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>
.NET Framework 4.8에 추가된 접근성 기능을 옵트인하려면 .NET Framework 4.7.1 및 4.7.2의 접근성 기능도 옵트인해야 합니다. .NET Framework 4.8을 대상으로 하고 레거시 접근성 동작을 유지하려는 애플리케이션은 이 AppContext 스위치를 true
명시적으로 설정하여 레거시 접근성 기능을 사용하도록 옵트인할 수 있습니다. 키보드 ToolTip 호출 지원을 사용하도록 설정하려면 AppContextSwitchOverrides 값에 Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false
줄을 추가해야 합니다.
<AppContextSwitchOverrides value="Switch.UseLegacyAccessibilityFeatures=false;Switch.UseLegacyAccessibilityFeatures.2=false;Switch.UseLegacyAccessibilityFeatures.3=false;Switch.System.Windows.Forms.UseLegacyToolTipDisplay=false" />
이 기능을 사용하도록 설정하려면 앞서 언급한 .NET Framework 4.7.1 - 4.8의 접근성 기능을 옵트인해야 합니다. 또한, 접근성 기능이 선택되지 않았지만 도구 설명 표시 기능이 선택된 경우, 이러한 기능에 대한 첫 번째 액세스 시 런타임 오류 NotSupportedException가 발생합니다. 예외 메시지는 키보드 도구 설명에서 3단계 접근성 개선이 활성화되어야 한다고 나타냅니다.
고대비 테마에서 OS로 정의된 색상 사용
- 고대비 테마가 개선되었습니다.
내레이터 지원 향상
- DataGridViewColumn의 접근 가능한 이름을 발표할 때, 내레이터가 이제 DataGridViewCell의 정렬 방향도 알립니다.
향상된 CheckedListBox 접근성 지원
- CheckedListBox 컨트롤에 대한 내레이터 지원이 향상되었습니다. 키보드를 사용하여 CheckedListBox 컨트롤로 이동할 때 내레이터는 CheckedListBox 항목에 초점을 맞추고 이를 알려 줍니다.
- 이제 빈 CheckedListBox 컨트롤에는 컨트롤이 포커스가 될 때 가상 첫 번째 항목에 대한 포커스 사각형이 그려집니다.
ComboBox 접근성 지원 향상
UI 자동화 알림 및 기타 UI 자동화 기능을 사용할 수 있도록 ComboBox 컨트롤에 대한 UI 자동화 지원이 활성화되었습니다. 향상된 DataGridView 접근성 지원
UI 자동화 알림 및 기타 UI 자동화 기능을 활용할 수 있도록 DataGridView 컨트롤에 대한 UI 자동화 지원을 활성화했습니다.
DataGridViewComboBoxEditingControl 또는 DataGridViewTextBoxEditingControl에 해당하는 UI 자동화 요소는 이제 해당 편집 셀의 하위 요소입니다.
향상된 LinkLabel 접근성 지원
ProgressBar 접근성 지원 향상
- ProgressBar 컨트롤에 대한 UI 자동화 지원을 사용하도록 설정하여 UI 자동화 알림 및 기타 UI 자동화 기능을 사용할 수 있습니다. 개발자는 이제 내레이터가 진행 상황을 나타내기 위해 알릴 수 있는 UI 자동화 알림을 사용할 수 있습니다. UI 자동화 알림 이벤트를 비롯한 UI 자동화 이벤트 개요는 UI 자동화 이벤트 개요참조하세요.
PropertyGrid의 향상된 접근성 지원
- UI 자동화 알림 및 기타 UI 자동화 기능을 사용할 수 있도록 PropertyGrid 컨트롤에 대한 UI 자동화 지원이 활성화되었습니다.
- 현재 편집된 속성에 해당하는 UI 자동화 요소는 이제 해당 속성 항목 UI 자동화 요소의 자식입니다.
- 부모 PropertyGrid 컨트롤이 범주 보기로 설정된 경우 이제 UI 자동화 속성 항목 요소가 해당 범주 요소의 자식이 됩니다.
향상된 ToolStrip 지원
- UI 자동화 알림 및 기타 UI 자동화 기능을 사용할 수 있도록 ToolStrip 컨트롤에 대한 UI 자동화 지원이 활성화되었습니다.
- ToolStrip 항목을 통한 탐색이 향상되었습니다.
- 항목 모드에서는 내레이터 포커스가 사라지지 않고 숨겨진 항목으로 이동하지 않습니다.
향상된 시각적 신호
- 이제 빈 CheckedListBox 컨트롤은 포커스를 받을 때 포커스 표시기를 표시합니다. 참고: UI 자동화 지원은 런타임에 컨트롤에 대해 사용하도록 설정되어 있지만 디자인 타임에는 사용되지 않습니다. UI 자동화에 대한 개요는 UI 자동화 개요참조하세요.
키보드로 컨트롤의 도구 설명(ToolTips) 호출하기
- 이제 키보드로 UI 컨트롤에 포커스를 지정하여 툴팁을 호출할 수 있습니다. 이 기능은 애플리케이션에 대해 명시적으로 사용하도록 설정해야 합니다("이러한 변경 내용을 옵트인 또는 옵트아웃하는 방법"섹션
참조).
이름 | 값 |
---|---|
범위 | 주요 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
WPF(Windows Presentation Foundation)
WPF의 접근성 향상
세부 정보
고대비 향상
- 이제 Expander 컨트롤에 대한 포커스가 표시됩니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- CheckBox 및 RadioButton 컨트롤이 선택되었을 때의 텍스트가 이제 이전 .NET Framework 버전보다 더 쉽게 보입니다.
- 비활성화된 ComboBox 테두리는 이제 비활성화된 텍스트와 같은 색입니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 비활성화되거나 포커스가 있는 버튼은 이제 올바른 테마 색상을 사용합니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 이제 ComboBox 컨트롤의 스타일이 ToolBar.ComboBoxStyleKey설정되면 드롭다운 단추가 표시됩니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 이제 DataGrid 컨트롤의 정렬 표시기 화살표에서 테마 색을 사용합니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 이제 기본 하이퍼링크 스타일이 마우스 위에 있는 올바른 테마 색으로 변경됩니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 이제 라디오 단추의 키보드 포커스가 표시됩니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 이제 DataGrid 컨트롤의 확인란 열은 예상된 색상을 사용하여 키보드 포커스 피드백을 제공합니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
- 이제 키보드 포커스 시각적 표시가 ComboBox 및 ListBox 컨트롤에 표시됩니다. 이전 버전의 .NET Framework에서는 그렇지 않았습니다.
화면 읽기 프로그램 상호 작용 개선
- Expander 컨트롤은 이제 화면 판독기에서 그룹(확장/축소)으로 올바르게 발표됩니다.
- DataGridCell 컨트롤은 이제 화면 판독기에서 데이터 그리드 셀(지역화)으로 올바르게 발표됩니다.
- 이제 화면 읽기 프로그램은 편집 가능한 ComboBox의 이름을 알려 줍니다.
- PasswordBox 컨트롤은 더 이상 화면 읽기 프로그램에서 "보기에 항목 없음"이라는 안내를 하지 않습니다.
LiveRegion 지원
내레이터와 같은 화면 읽기 프로그램은 일반적으로 현재 포커스가 있는 UI 요소를 설명하여 애플리케이션의 UI(사용자 인터페이스)를 이해하는 데 도움이 됩니다. 그러나 UI 요소가 화면 어딘가에 변경되고 포커스가 없는 경우 사용자에게 알리지 않고 중요한 정보를 놓칠 수 있습니다. LiveRegions는 이 문제를 해결하기 위한 것입니다. 개발자는 이를 사용하여 화면 읽기 프로그램 또는 다른 UI 자동화 클라이언트에 UI 요소에 대한 중요한 변경 사항이 적용되었음을 알릴 수 있습니다. 그러면 화면 읽기 프로그램에서 사용자에게 이 변경 사항을 알리는 방법과 시기를 결정할 수 있습니다. 또한 LiveSetting 속성을 사용하면 화면 읽기 프로그램에서 사용자에게 UI 변경 내용을 알리는 것이 얼마나 중요한지 알 수 있습니다.
제안
이러한 변경 내용을 옵트인하거나 옵트아웃하는 방법
애플리케이션이 이러한 변경 내용을 활용하려면 .NET Framework 4.7.1 이상에서 실행해야 합니다. 애플리케이션은 다음 방법 중 하나에서 이러한 변경 내용을 활용할 수 있습니다.
.NET Framework 4.7.1을 대상으로 설정합니다. 권장되는 방법입니다. 이러한 접근성 변경은 .NET Framework 4.7.1 이상을 대상으로 하는 WPF 애플리케이션에서 기본적으로 사용하도록 설정됩니다.
앱 구성 파일의 섹션에 다음
<runtime>
을 추가하고false
로 설정하여 레거시 접근성 동작에서 제외하는 방법은 다음 예제에서 보여줍니다.<?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>
.NET Framework 4.7.1 이상을 대상으로 하고 레거시 접근성 동작을 유지하려는 애플리케이션은 이 AppContext 스위치를 true
명시적으로 설정하여 레거시 접근성 기능 사용을 옵트인할 수 있습니다.
UI 자동화에 대한 개요는 UI 자동화 개요참조하세요.
이름 | 값 |
---|---|
범위 | 주요 |
버전 | 4.7.1 |
유형 | 대상 다시 지정 |
영향을 받는 API
- AutomationElementIdentifiers.LiveSettingProperty
- AutomationElementIdentifiers.LiveRegionChangedEvent
- System.Windows.Automation.AutomationLiveSetting
- AutomationProperties.LiveSettingProperty
- AutomationProperties.SetLiveSetting(DependencyObject, AutomationLiveSetting)
- AutomationProperties.GetLiveSetting(DependencyObject)
- AutomationPeer.GetLiveSettingCore()
TextBox/PasswordBox 비-데코레이터 선택에 SelectionTextBrush 공용 속성을 추가
세부 정보
WPF 애플리케이션에서 및 TextBox에 대해 PasswordBox을 사용할 때, 개발자는 이제 선택한 텍스트의 렌더링을 변경하기 위해 새로 추가된 SelectionTextBrush 속성을 설정할 수 있습니다. 기본적으로 이 색상은 HighlightTextBrushKey과 함께 변경됩니다. 비 표시기 기반 텍스트 선택을 사용할 수 없는 경우 이 속성은 아무 작업도 수행하지 않습니다.
제안
표시기가 아닌 방식의 텍스트 선택을 사용하도록 설정하면, PasswordBox.SelectionTextBrush 및 SelectionTextBrush 속성을 사용하여 선택한 텍스트의 모양을 변경할 수 있습니다. 이 작업은 XAML을 사용하여 수행할 수 있습니다.
<TextBox SelectionBrush="Red" SelectionTextBrush="White" SelectionOpacity="0.5"
Foreground="Blue" CaretBrush="Blue">
This is some text.
</TextBox>
이름 | 값 |
---|---|
범위 | 주요 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
영향을 받는 API
- TextBoxBase.SelectionTextBrushProperty
- TextBoxBase.SelectionTextBrush
- System.Windows.Controls.TextBox
- System.Windows.Controls.PasswordBox
이제 HwndHost는 DPI가 변경될 때 "자식 HWND"의 크기를 올바르게 조정합니다.
세부 정보
.NET Framework 4.7.2 및 이전 버전에서 WPF가 Per-Monitor 인식 모드에서 실행되었을 때 애플리케이션을 한 모니터에서 다른 모니터로 이동하는 경우와 같이 DPI가 변경된 후 HwndHost 내에서 호스트되는 컨트롤의 크기가 올바르게 조정되지 않았습니다. 이 수정은 호스트된 컨트롤의 크기가 적절하게 조정되도록 합니다.
제안
애플리케이션이 이러한 변경 사항을 활용하려면 .NET Framework 4.7.2 이상에서 실행되어야 하고, 앱 구성 파일의 섹션에서 다음 설정을 <runtime>
으로 설정하여 이러한 동작을 활성화해야 합니다: false
. 다음 예제를 참고하십시오.
<?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.System.Windows.DoNotUsePresentationDpiCapabilityTier2OrGreater=false" />
</runtime>
</configuration>
이름 | 값 |
---|---|
범위 | 주요 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
WF(Windows Workflow Foundation)
WF(Windows Workflow Foundation) 워크플로 디자이너의 접근성 향상
세부 정보
WF(Windows Workflow Foundation) 워크플로 디자이너는 접근성 기술에서 작동하는 방식을 개선하고 있습니다. 이러한 개선 사항에는 다음과 같은 변경 내용이 포함됩니다.
- 탭 순서는 일부 컨트롤에서 왼쪽에서 오른쪽으로, 위에서 아래로 변경됩니다.
- InitializeCorrelation 작업에 대한 상관 관계 데이터를 설정하기 위한 상관 관계 초기화 창
- Receive, Send, SendReply및 ReceiveReply 활동에 대한 콘텐츠 정의 창
- 키보드를 통해 더 많은 함수를 사용할 수 있습니다.
- 활동의 속성을 편집하는 경우, 처음으로 포커스를 둘 때 키보드로 속성 그룹을 축소할 수 있습니다.
- 이제 키보드로 경고 아이콘에 액세스할 수 있습니다.
- 이제 속성 창의 기타 속성 단추에 키보드로 액세스할 수 있습니다.
- 이제 키보드 사용자는 워크플로 디자이너의 인수 및 변수 창에서 헤더 항목에 액세스할 수 있습니다.
- 다음과 같이 포커스가 있는 항목의 가시성이 개선되었습니다:
- 워크플로 디자이너 및 활동 디자이너에서 사용하는 데이터 표에 행 추가
- ReceiveReply 및 SendReply 활동의 필드를 순차적으로 탭하여 이동합니다.
- 변수 또는 인수에 대한 기본값 설정
- 이제 화면 읽기 프로그램이 다음을 올바르게 인식할 수 있습니다.
- 워크플로 디자이너에서 설정된 중단점입니다.
- FlowSwitch<T>, FlowDecision및 CorrelationScope 활동입니다.
- Receive 활동의 내용입니다.
- InvokeMethod 활동의 대상 유형입니다.
- TryCatch 작업의 예외 콤보 상자 및 Finally 섹션입니다.
- 메시지 유형 콤보 상자, 상관 관계 이니셜라이저 추가 창의 분할자, 콘텐츠 정의 창 및 메시징 활동의 CorrelatesOn 정의 창(Receive, Send, SendReply및 ReceiveReply)입니다.
- 상태 기계 전이 및 전이 목적지.
- FlowDecision 활동에 대한 주석 및 커넥터입니다.
- 활동의 상황에 맞는 메뉴(마우스 오른쪽 단추 클릭)입니다.
- 속성 값 편집기, 검색 지우기 단추, 범주별 및 사전순 정렬 단추, 그리고 속성 그리드에서의 식 편집기 대화 상자입니다.
- 워크플로 디자이너의 확대/축소 백분율입니다.
- Parallel 및 Pick 활동의 구분자입니다.
- InvokeDelegate 활동입니다.
- 형식 선택 창 (사전 작업용:
Microsoft.Activities.AddToDictionary<TKey,TValue>
,Microsoft.Activities.RemoveFromDictionary<TKey,TValue>
등). - 찾아보기 및 .NET 유형 선택하기 창
- 워크플로 디자이너의 브레드크럼.
- 고대비 테마를 선택한 사용자는 워크플로 디자이너와 그 컨트롤의 가시성이 다양한 부분에서 개선됨을 볼 수 있습니다. 요소 간의 대비 비율이 향상되고, 포커스 요소를 위한 선택 상자가 더 눈에 띄게 변합니다.
제안
다시 호스팅된 워크플로 디자이너가 있는 애플리케이션이 있는 경우 애플리케이션은 다음 작업 중 하나를 수행하여 이러한 변경 내용을 활용할 수 있습니다.
- .NET Framework 4.7.1을 대상으로 애플리케이션을 다시 컴파일합니다. 이러한 접근성 변경은 기본적으로 사용하도록 설정됩니다.
- 애플리케이션이 .NET Framework 4.7 이하를 대상으로 하지만 .NET Framework 4.7.1에서 실행 중인 경우 다음 AppContext 스위치 app.config 파일의
<runtime>
섹션에 추가하고 다음 예제와 같이false
설정하여 이러한 레거시 접근성 동작을 옵트아웃할 수 있습니다.
<?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>
.NET Framework 4.7.1 이상을 대상으로 하고 레거시 접근성 동작을 유지하려는 애플리케이션은 이 AppContext 스위치를 true
명시적으로 설정하여 레거시 접근성 기능 사용을 옵트인할 수 있습니다.
이름 | 값 |
---|---|
범위 | 사소한 |
버전 | 4.7.1 |
유형 | 대상 다시 지정 |
SHA1에서 SHA256으로 변경된 기호에 대한 워크플로 XAML 체크섬
세부 정보
Visual Studio에서 디버깅을 지원하기 위해 워크플로 런타임은 해시 알고리즘을 사용하여 워크플로 XAML 파일에 대한 체크섬을 생성합니다. .NET Framework 4.6.2 및 이전 버전에서 워크플로 체크섬 해시는 MD5 알고리즘을 사용하여 FIPS 사용 시스템에 문제를 일으켰습니다. .NET Framework 4.7부터 기본 알고리즘이 SHA1로 변경되었습니다. .NET Framework 4.8부터 기본 알고리즘이 SHA256으로 변경되었습니다.
제안
코드가 워크플로 인스턴스를 로드하지 못하거나 체크섬 오류로 인해 적절한 심볼을 찾지 못할 경우, AppContext
스위치 "Switch.System.Activities.UseSHA1HashForDebuggerSymbols"를 true
로 설정해 보세요. 코드에서:
System.AppContext.SetSwitch("Switch.System.Activities.UseSHA1HashForDebuggerSymbols", true);
또는 구성 중:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Activities.UseSHA1HashForDebuggerSymbols=true" />
</runtime>
</configuration>
이름 | 값 |
---|---|
범위 | 사소한 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
워크플로 XOML 정의 및 SqlTrackingService 캐시 키가 MD5에서 SHA256으로 변경됨
세부 정보
워크플로 런타임은 XOML에 정의된 워크플로 정의의 캐시를 유지합니다. 또한 SqlTrackingService는 문자열로 키가 지정된 캐시를 유지합니다. 이러한 캐시는 체크섬 해시 값을 포함하는 값으로 키 지정됩니다. .NET Framework 4.7.2 및 이전 버전에서 이 체크섬 해시는 MD5 알고리즘을 사용하여 FIPS 사용 시스템에 문제를 일으켰습니다. .NET Framework 4.8부터 사용되는 알고리즘은 SHA256입니다. 워크플로 런타임 및 SqlTrackingService가 시작될 때마다 값이 다시 계산되므로 이 변경과 호환성 문제가 없어야 합니다. 그러나 필요한 경우 고객이 레거시 해시 알고리즘의 사용으로 되돌릴 수 있는 단점을 제공했습니다.
제안
이 변경으로 워크플로를 실행할 때 문제가 발생하는 경우 AppContext
스위치 중 하나 또는 둘 다를 설정해 보세요.
- "Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey"를 true로 설정합니다.
- "Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey"를 true로 설정합니다. 코드에서:
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey", true);
System.AppContext.SetSwitch("Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKey", true);
또는 구성 파일(WorkflowRuntime 개체를 만드는 애플리케이션의 구성 파일에 있어야 합니다.)
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForWorkflowDefinitionDispenserCacheKey=true" />
<AppContextSwitchOverrides value="Switch.System.Workflow.Runtime.UseLegacyHashForSqlTrackingCacheKeytrue" />
</runtime>
</configuration>
이름 | 값 |
---|---|
범위 | 사소한 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
워크플로 XOML 파일 체크섬이 MD5에서 SHA256으로 변경됨
세부 정보
Visual Studio에서 XOML 기반 워크플로 디버깅을 지원하기 위해 XOML 파일이 포함된 워크플로 프로젝트가 빌드될 때 XOML 파일의 콘텐츠 체크섬이 WorkflowMarkupSourceAttribute.MD5Digest 값으로 생성된 코드에 포함됩니다. .NET Framework 4.7.2 및 이전 버전에서 이 체크섬 해시는 MD5 알고리즘을 사용하여 FIPS 사용 시스템에 문제를 일으켰습니다. .NET Framework 4.8부터 사용되는 알고리즘은 SHA256입니다. WorkflowMarkupSourceAttribute.MD5Digest와 호환되려면 생성된 체크섬의 처음 16바이트만 사용됩니다. 이로 인해 디버깅하는 동안 문제가 발생할 수 있습니다. 프로젝트를 다시 빌드해야 할 수도 있습니다.
제안
프로젝트를 다시 빌드해도 문제가 해결되지 않으면 AppContext
스위치 "Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum"을 true로 설정해 보세요. 코드에서:
System.AppContext.SetSwitch("Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum", true);
또는 구성 파일에서 (MSBuild.exe을 사용할 때 이는 MSBuild.exe.config 안에 있어야 합니다.)
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Workflow.ComponentModel.UseLegacyHashForXomlFileChecksum=true" />
</runtime>
</configuration>
이름 | 값 |
---|---|
범위 | 사소한 |
버전 | 4.8 |
유형 | 대상 다시 지정 |
.NET Framework 4.8.1
.NET Framework 4.8.1에서는 앱 호환성 문제가 발생하지 않았습니다.
.NET