다음을 통해 공유


.NET Framework에서 .NET Core로 마이그레이션하기 위한 주요 변경 내용

.NET Framework에서 .NET Core 버전 1.0~3.1로 앱을 마이그레이션하는 경우, 이 문서에 나열된 주요 변경 사항이 영향을 미칠 수 있습니다. 호환성이 손상되는 변경은 범주별로 그룹화되고 해당 범주 내에서 도입된 .NET Core 버전별로 그룹화됩니다.

메모

이 문서는 .NET Framework와 .NET Core 간의 호환성이 손상되는 변경의 전체 목록이 아닙니다. 우리가 인지하게 되는 가장 중요한 변경 사항들이 여기에 추가됩니다.

핵심 .NET 라이브러리

.NET 8

IDispatchImplAttribute API가 제거되었습니다

.NET Core 2.1

UseShellExecute의 기본값 변경

ProcessStartInfo.UseShellExecute은(는) .NET Core에서 false을(를) 기본값으로 가지고 있습니다. .NET Framework에서 기본값은 true.

설명 변경

Process.Start을 사용하면 애플리케이션을 직접 시작할 수 있습니다. 예를 들어, 페인트를 실행하는 Process.Start("mspaint.exe") 같은 코드를 사용할 수 있습니다. 또한 ProcessStartInfo.UseShellExecutetrue설정된 경우 연결된 애플리케이션을 간접적으로 시작할 수 있습니다. .NET Framework에서 ProcessStartInfo.UseShellExecute의 기본값은 true입니다. 이 말은, 만약 .txt 파일이 해당 편집기에서 연결되어 있다면, Process.Start("mytextfile.txt") 같은 코드는 메모장을 시작합니다. .NET Framework에서 앱을 간접적으로 시작하지 않으려면 ProcessStartInfo.UseShellExecute을(를) false로 명시적으로 설정해야 합니다. .NET Core에서 ProcessStartInfo.UseShellExecute 기본값은 false. 즉, 기본적으로 연결된 애플리케이션은 Process.Start호출할 때 시작되지 않습니다.

System.Diagnostics.ProcessStartInfo의 다음 속성은 ProcessStartInfo.UseShellExecutetrue일 경우에만 작동합니다.

이 변경 내용은 성능상의 이유로 .NET Core에서 도입되었습니다. 일반적으로 Process.Start 애플리케이션을 직접 시작하는 데 사용됩니다. 앱을 직접 실행하면 Windows 셸을 포함할 필요가 없으며 그에 따른 성능 비용도 발생하지 않습니다. 이 기본 사례를 더 빠르게 만들기 위해, .NET Core는 ProcessStartInfo.UseShellExecute의 기본값을 false로 변경합니다. 필요한 경우 느린 경로를 옵트인할 수 있습니다.

도입된 버전

2.1

메모

이전 버전의 .NET Core에서는 Windows용으로 UseShellExecute 구현되지 않았습니다.

앱이 이전 동작을 사용하는 경우, ProcessStartInfo 개체에서 UseShellExecute을/를 true로 설정한 후 Process.Start(ProcessStartInfo)를 호출하십시오.

범주

핵심 .NET 라이브러리

영향을 받는 API


.NET Core 1.0

FileSystemInfo.Attributes에서 발생한 UnauthorizedAccessException

.NET Core에서 호출자가 파일 특성 값을 설정하려고 하지만 쓰기 권한이 없는 경우 UnauthorizedAccessException 예외가 발생합니다.

설명 변경

.NET Framework에서 호출자가 FileSystemInfo.Attributes의 파일 속성 값을 설정하려고 하지만 쓰기 권한이 없는 경우 ArgumentException이(가) 발생합니다. .NET Core에서는 UnauthorizedAccessException가 대신 던져집니다. .NET Core에서는 호출자가 잘못된 파일 특성을 설정하려고 하면 여전히 ArgumentException 예외가 발생합니다.

도입된 버전

1.0

필요에 따라 ArgumentException를 대신하여 또는 추가로 UnauthorizedAccessException을 'catch'하도록 catch 문을 수정합니다.

범주

핵심 .NET 라이브러리

영향을 받는 API


손상된 상태 예외 처리는 지원되지 않습니다.

.NET Core에서 손상된 프로세스 상태 예외 처리는 지원되지 않습니다.

설명 변경

이전에는 손상된 프로세스 상태 예외를 관리 코드 예외 처리기에서, 예를 들어, C#의 try-catch 문을 사용하여 catch하고 처리할 수 있었습니다.

.NET Core 1.0부터는 관리 코드에서 손상된 프로세스 상태 예외를 처리할 수 없습니다. 공용 언어 런타임은 손상된 프로세스 상태 예외를 관리 코드에 제공하지 않습니다.

도입된 버전

1.0

손상된 프로세스 상태 예외를 처리하지 않도록 대신 예외를 발생시키는 상황을 해결하세요. 손상된 프로세스 상태 예외를 처리해야 하는 경우 C 또는 C++ 코드로 예외 처리기를 작성합니다.

범주

핵심 .NET 라이브러리

영향을 받는 API


UriBuilder 속성은 더 이상 앞에 문자를 붙이지 않습니다.

UriBuilder.Fragment은 더 이상 선행 # 문자를 앞에 추가하지 않으며, UriBuilder.Query도 이미 있는 경우 선행 ? 문자를 추가하지 않습니다.

설명 변경

.NET Framework에서 UriBuilder.FragmentUriBuilder.Query 속성은 저장되는 값 앞에 항상 각각 # 또는 ? 문자를 추가합니다. 문자열에 이러한 선행 문자 중 하나가 이미 포함된 경우 이 동작으로 인해 저장된 값에 여러 # 또는 ? 문자가 발생할 수 있습니다. 예를 들어 UriBuilder.Fragment 값은 ##main될 수 있습니다.

.NET Core 1.0부터 이러한 속성은 문자열의 시작 부분에 이미 있는 경우 더 이상 # 또는 ? 문자를 저장된 값 앞에 추가하지 않습니다.

도입된 버전

1.0

속성 값을 설정할 때 이러한 선행 문자를 더 이상 명시적으로 제거할 필요가 없습니다. 값을 추가할 때마다 선행 # 또는 ?을 제거할 필요가 없기 때문에 이 기능이 특히 유용합니다.

예를 들어 다음 코드 조각은 .NET Framework와 .NET Core 간의 동작 차이를 보여줍니다.

var builder = new UriBuilder();
builder.Query = "one=1";
builder.Query += "&two=2";
builder.Query += "&three=3";
builder.Query += "&four=4";

Console.WriteLine(builder.Query);
  • .NET Framework에서 결과 출력은 ????one=1&two=2&three=3&four=4입니다.
  • .NET Core에서 출력은 ?one=1&two=2&three=3&four=4입니다.

범주

핵심 .NET 라이브러리

영향을 받는 API


Process.StartInfo는 시작하지 않은 프로세스에 대해 InvalidOperationException을 throw합니다.

코드가 시작하지 않은 프로세스의 Process.StartInfo 속성을 읽으면 InvalidOperationException이 발생합니다.

설명 변경

.NET Framework에서 코드가 시작하지 않은 프로세스의 Process.StartInfo 속성에 액세스하면 더미 ProcessStartInfo 개체가 반환됩니다. 더미 개체는 EnvironmentVariables제외한 모든 속성에 대한 기본값을 포함합니다.

.NET Core 1.0부터 사용자가 시작하지 않은 프로세스(즉, Process.Start을 호출하여) 대해 Process.StartInfo 속성을 읽으면 InvalidOperationException 예외가 발생합니다.

도입된 버전

1.0

코드가 시작되지 않은 프로세스의 Process.StartInfo 속성에 액세스하지 마세요. 예를 들어 Process.GetProcesses반환된 프로세스에 대해서는 이 속성을 읽지 마세요.

범주

핵심 .NET 라이브러리

영향을 받는 API


암호화

.NET Core 2.1

SignedCms.ComputeSignature의 부울 매개 변수가 존중됩니다.

.NET Core에서는 SignedCms.ComputeSignature(CmsSigner, Boolean) 메서드의 부울 silent 매개 변수가 존중됩니다. 이 매개 변수가 true설정되면 PIN 프롬프트가 표시되지 않습니다.

설명 변경

.NET Framework에서는 SignedCms.ComputeSignature(CmsSigner, Boolean) 메서드의 silent 매개 변수가 무시되고 공급자가 요구하는 경우 PIN 프롬프트가 항상 표시됩니다. .NET Core에서는 silent 매개 변수가 적용되며 true설정하면 공급자가 요구하는 경우에도 PIN 프롬프트가 표시되지 않습니다.

CMS/PKCS #7 메시지에 대한 지원은 버전 2.1에서 .NET Core에 도입되었습니다.

도입된 버전

2.1

데스크톱 애플리케이션은 필요한 경우 PIN 프롬프트가 표시되도록 SignedCms.ComputeSignature(CmsSigner, Boolean)을 호출하고 부울 매개 변수를 false로 설정해야 합니다. 결과 동작은 .NET Framework에서의 조용한 컨텍스트가 비활성화되어 있는지 여부에 관계없이 동일합니다.

범주

암호화

영향을 받는 API


MSBuild

.NET Core 3.0

리소스 매니페스트 파일 이름 변경

.NET Core 3.0부터 MSBuild는 기본적으로 리소스 파일에 대해 다른 매니페스트 파일 이름을 생성합니다.

도입된 버전

3.0

설명 변경

.NET Core 3.0 이전에는 프로젝트 파일의 EmbeddedResource 항목에 대해 LogicalName, ManifestResourceName또는 DependentUpon 메타데이터가 지정되지 않은 경우 MSBuild는 패턴 <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources매니페스트 파일 이름을 생성했습니다. RootNamespace 프로젝트 파일에 정의되지 않은 경우 기본적으로 프로젝트 이름으로 설정됩니다. 예를 들어 루트 프로젝트 디렉터리의 Form1.resx 리소스 파일에 대해 생성된 매니페스트 이름은 MyProject.Form1.resources.

.NET Core 3.0부터, 리소스 파일이 같은 이름의 원본 파일(Form1.resx 및 Form1.cs )과 같은 위치에 배치된 경우, MSBuild는 원본 파일의 형식 정보를 사용하여 패턴 에 따라 매니페스트 파일 이름을 생성합니다. 네임스페이스와 클래스 이름은 공동 배치된 소스 파일의 첫 번째 형식에서 추출됩니다. 예를 들어 Form1.cs 소스 파일과 함께 배치된 Form1.resx 리소스 파일의 생성된 매니페스트 이름은 MyNamespace.Form1.resources입니다. 중요한 점은 파일 이름의 첫 번째 부분이 이전 버전의 .NET Core(MyProject대신 myNamespace )와 다르다는 것입니다.

메모

프로젝트 파일의 EmbeddedResource 항목에 지정된 LogicalName, ManifestResourceName또는 DependentUpon 메타데이터가 있는 경우 이 변경 내용은 해당 리소스 파일에 영향을 주지 않습니다.

이 호환성이 손상되는 변경은 .NET Core 프로젝트에 EmbeddedResourceUseDependentUponConvention 속성을 추가하여 도입되었습니다. 기본적으로 리소스 파일은 .NET Core 프로젝트 파일에 명시적으로 나열되지 않으므로 생성된 .resources 파일의 이름을 지정하는 방법을 지정하는 DependentUpon 메타데이터가 없습니다. EmbeddedResourceUseDependentUponConvention이 기본값인 true로 설정될 때, MSBuild는 함께 배치된 소스 파일을 찾아 해당 파일에서 네임스페이스와 클래스 이름을 추출합니다. EmbeddedResourceUseDependentUponConventionfalse로 설정하면, MSBuild는 이전의 방식에 따라 RootNamespace 및 상대 파일 경로를 결합하여 매니페스트 이름을 생성합니다.

대부분의 경우 개발자 쪽에서 아무 작업도 필요하지 않으며 앱이 계속 작동해야 합니다. 그러나 이 변경으로 앱이 중단되면 다음 중 하나를 수행할 수 있습니다.

  • 새 매니페스트 이름을 예상하도록 코드를 변경합니다.

  • 프로젝트 파일에서 EmbeddedResourceUseDependentUponConvention을(를) false으로 설정하여 새 명명 규칙에서 벗어납니다.

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

범주

MSBuild

영향을 받는 API

해당 없음


네트워킹

.NET Core 2.0

WebClient.CancelAsync가 항상 즉시 취소되지는 않습니다.

.NET Core 2.0부터 WebClient.CancelAsync() 호출해도 응답이 가져오기 시작한 경우 즉시 요청을 취소하지 않습니다.

설명 변경

이전에는 WebClient.CancelAsync() 호출하면 요청이 즉시 취소되었습니다. .NET Core 2.0부터 WebClient.CancelAsync() 호출은 응답을 아직 가져오지 않은 경우에만 즉시 요청을 취소합니다. 응답을 가져오기 시작한 경우 전체 응답을 읽은 후에만 요청이 취소됩니다.

이 변경은 WebClient API가 사용 중단되고 HttpClient이 선호되기 때문에 구현되었습니다.

도입된 버전

2.0

사용이 중단된 System.Net.WebClient대신 System.Net.Http.HttpClient 클래스를 사용하세요.

범주

네트워킹

영향을 받는 API


Windows Forms

Windows Forms 지원은 버전 3.0에서 .NET Core에 추가되었습니다. Windows Forms 앱을 .NET Framework에서 .NET Core로 마이그레이션하는 경우 여기에 나열된 주요 변경 내용이 앱에 영향을 줄 수 있습니다.

.NET Core 3.1

제거된 컨트롤

.NET Core 3.1부터 일부 Windows Forms 컨트롤을 더 이상 사용할 수 없습니다.

설명 변경

.NET Core 3.1부터 다양한 Windows Forms 컨트롤을 더 이상 사용할 수 없습니다. 더 나은 디자인과 지원을 제공하는 대체 컨트롤이 .NET Framework 2.0에 도입되었습니다. 사용되지 않는 컨트롤은 이전에 디자이너 도구 상자에서 제거되었지만 여전히 사용할 수 있었습니다.

다음 형식은 더 이상 사용할 수 없습니다.

도입된 버전

3.1

제거된 각 컨트롤에는 권장되는 대체 컨트롤이 있습니다. 다음 표를 참조하세요.

제거된 제어(API) 권장 교체 제거된 관련된 API
콘텍스트 메뉴 컨텍스트 메뉴 스트립
DataGrid DataGridView DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
메인 메뉴 메뉴 스트립
메뉴 ToolStripDropDown, ToolStripDropDownMenu 메뉴 항목 컬렉션
메뉴 항목 ToolStripMenuItem
도구 모음 툴스트립 툴바 외관
도구 모음 버튼 ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

범주

Windows Forms

영향을 받는 API


툴팁이 표시되면 CellFormatting 이벤트가 발생하지 않습니다.

이제 DataGridView는 마우스로 가리킬 때와 키보드로 선택할 때 셀의 텍스트 및 오류 관련 도구 설명을 표시합니다. 도구 설명이 표시되면 DataGridView.CellFormatting 이벤트가 발생하지 않습니다.

설명 변경

.NET Core 3.1 이전에는 ShowCellToolTips 속성이 true로 설정된 DataGridView의 셀이 마우스를 올려놓으면 셀의 텍스트와 오류에 대한 툴팁이 표시되었습니다. 키보드를 통해 셀을 선택할 때 도구 설명이 표시되지 않았습니다(예: Tab 키, 바로 가기 키 또는 화살표 탐색 사용). 사용자가 셀을 편집하고 있을 때, DataGridView이 여전히 편집 모드에 있는 동안 ToolTipText 속성을 설정하지 않은 셀 위로 마우스를 가져가면, 셀의 텍스트를 셀에 표시할 수 있도록 서식을 지정하는 CellFormatting 이벤트가 발생합니다.

.NET Core 3.1부터 접근성 표준을 충족하기 위해, ShowCellToolTips 속성이 true로 설정된 DataGridView에는 셀을 마우스로 가리키거나 키보드로 선택할 때 셀의 텍스트와 오류에 대한 도구 설명이 표시됩니다. 이 변경의 결과로, 가 편집 모드에 있는 동안 속성 집합이 없는 셀을 마우스로 가리키면 이벤트는 발생하지 않습니다. . 호버링된 셀의 내용이 셀에 표시되는 대신 툴팁으로 표시되기 때문에 이벤트가 발생하지 않습니다.

도입된 버전

3.1

DataGridView 편집 모드에 있는 동안 CellFormatting 이벤트에 종속된 코드를 리팩터링합니다.

범주

Windows Forms

영향을 받는 API

없음


.NET Core 3.0

기본 컨트롤 글꼴이 Segoe UI 9 pt로 변경됨

설명 변경

.NET Framework에서 Control.DefaultFont 속성은 Microsoft Sans Serif 8.25 pt으로 설정되었습니다. 다음 이미지는 기본 글꼴을 사용하는 창을 보여줍니다.

.NET Framework 기본 컨트롤 글꼴

.NET Core 3.0부터 기본 글꼴은 Segoe UI 9 pt(SystemFonts.MessageBoxFont동일한 글꼴)로 설정됩니다. 이러한 변경으로 인해 폼과 컨트롤의 크기는 새 기본 글꼴의 더 큰 크기를 반영하여 약 27% 더 커집니다. 예를 들어:

.NET Core 기본 컨트롤 글꼴

이 변경은 Windows UX(사용자 환경) 지침에 맞추어 조정되었습니다.

도입된 버전

3.0

양식 및 컨트롤의 크기가 변경되어 애플리케이션이 올바르게 렌더링되는지 확인합니다.

단일 폼의 원래 글꼴을 유지하려면 기본 글꼴을 Microsoft Sans Serif 8.25 pt으로 설정하세요. 예를 들어:

public MyForm()
{
    InitializeComponent();
    Font = new Font(new FontFamily("Microsoft Sans Serif"), 8.25f);
}

또는 다음 방법 중 하나를 사용하여 전체 애플리케이션의 기본 글꼴을 변경할 수 있습니다.

  • ApplicationDefaultFont MSBuild 속성을 "Microsoft Sans Serif, 8.25pt"로 설정합니다. Visual Studio에서 디자이너의 새 설정을 사용할 수 있으므로 이 방법을 사용하는 것이 좋습니다.

    <PropertyGroup>
      <ApplicationDefaultFont>Microsoft Sans Serif, 8.25pt</ApplicationDefaultFont>
    </PropertyGroup>
    
  • Application.SetDefaultFont(Font)을 호출하여.

    class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.SetHighDpiMode(HighDpiMode.SystemAware);
            Application.SetDefaultFont(new Font(new FontFamily("Microsoft Sans Serif"), 8.25f));
            Application.Run(new Form1());
        }
    }
    

범주

  • Windows Forms

영향을 받는 API

없음.


폴더 탐색기 대화 상자 현대화

.NET Core용 Windows Forms 애플리케이션에서 FolderBrowserDialog 컨트롤이 변경되었습니다.

설명 변경

.NET Framework에서 Windows Forms는 FolderBrowserDialog 컨트롤에 다음 대화 상자를 사용합니다.

.NET Framework의 FolderBrowserDialogControl

.NET Core 3.0에서 Windows Forms는 Windows Vista에서 도입된 최신 COM 기반 컨트롤을 사용합니다.

.NET Core FolderBrowserDialogControl

도입된 버전

3.0

대화 상자가 자동으로 업그레이드됩니다.

원래 대화 상자를 유지하려면 다음 코드 조각과 같이 대화 상자를 표시하기 전에 FolderBrowserDialog.AutoUpgradeEnabled 속성을 false 설정합니다.

var dialog = new FolderBrowserDialog();
dialog.AutoUpgradeEnabled = false;
dialog.ShowDialog();

범주

Windows Forms

영향을 받는 API


Windows Forms의 일부 형식에서 SerializableAttribute 제거됨

일부 Windows Forms 클래스에서, 알려진 이진 직렬화 시나리오가 없는 경우에 SerializableAttribute이 제거되었습니다.

설명 변경

다음 형식들은 .NET Framework에서는 SerializableAttribute으로 데코레이팅되었지만, .NET Core에서는 이 특성이 제거되었습니다.

지금까지 이 serialization 메커니즘에는 심각한 유지 관리 및 보안 문제가 있었습니다. 형식에 대한 SerializableAttribute 유지 관리한다는 것은 해당 형식이 버전 간 직렬화 변경 및 잠재적으로 프레임워크 간 직렬화 변경에 대해 테스트되어야 한다는 것을 의미합니다. 이렇게 하면 이러한 형식을 발전하기가 더 어려워지고 유지 관리 비용이 많이 들 수 있습니다. 이러한 형식에는 알려진 이진 serialization 시나리오가 없기 때문에 속성을 제거해도 영향이 최소화됩니다.

자세한 내용을 보려면 이진 직렬화에 대한 을 참조하세요.

도입된 버전

3.0

직렬화 가능으로 표시된 이러한 형식에 의존하는 코드를 업데이트하십시오.

범주

Windows Forms

영향을 받는 API

  • 없음

AllowUpdateChildControlIndexForTabControls 호환성 스위치가 지원되지 않음

Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 호환성 스위치는 .NET Framework 4.6 이상 버전의 Windows Forms에서 지원되지만 .NET Core 또는 .NET 5.0 이상에서는 지원되지 않습니다.

설명 변경

.NET Framework 4.6 이상 버전에서 탭을 선택하면 컨트롤 컬렉션이 다시 정렬됩니다. Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 호환성 스위치를 사용하면 이 동작이 바람직하지 않은 경우 애플리케이션에서 이 순서를 건너뛸 수 있습니다.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.AllowUpdateChildControlIndexForTabControls 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API

  • 없음

DomainUpDown.UseLegacyScrolling 호환성 스위치가 지원되지 않습니다.

.NET Framework 4.7.1에서 도입된 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.7.1부터 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 호환성 스위치를 사용하여 개발자는 DomainUpDown.DownButton()DomainUpDown.UpButton() 작업을 각각 독립적으로 옵트아웃할 수 있습니다. 스위치는 컨텍스트 텍스트가 있는 경우 DomainUpDown.UpButton() 무시되는 레거시 동작을 복원했으며, 개발자는 DomainUpDown.UpButton() 작업 전에 컨트롤에서 DomainUpDown.DownButton() 작업을 사용해야 합니다. 자세한 내용은 <AppContextSwitchOverrides> 요소참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.DomainUpDown.UseLegacyScrolling 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API


DoNotLoadLatestRichEditControl 호환성 스위치가 지원되지 않음

.NET Framework 4.7.1에서 도입된 Switch.System.Windows.Forms.UseLegacyImages 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.6.2 및 이전 버전에서 RichTextBox 컨트롤은 Win32 RichEdit 컨트롤 v3.0을 인스턴스화하고.NET Framework 4.7.1을 대상으로 하는 애플리케이션의 경우 RichTextBox 컨트롤은 RichEdit v4.1(msftedit.dll)을 인스턴스화합니다. Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl 호환성 스위치는 .NET Framework 4.7.1 이상 버전을 대상으로 하는 애플리케이션이 새 RichEdit v4.1 컨트롤을 옵트아웃하고 이전 RichEdit v3 컨트롤을 대신 사용할 수 있도록 하기 위해 도입되었습니다.

.NET Core 및 .NET 5.0 이상 버전에서는 Switch.System.Windows.Forms.DoNotLoadLatestRichEditControl 스위치가 지원되지 않습니다. RichTextBox 컨트롤의 새 버전만 지원됩니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API


DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 전환이 지원되지 않음

.NET Framework 4.6.1에서 도입된 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 스위치는 .NET Core 및 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.6.1부터 Ctrl + A 바로 가기 키를 선택하면 TextBox 컨트롤에서 모든 텍스트가 선택되도록 설정되었습니다. .NET Framework 4.6 및 이전 버전에서는 Textbox.ShortcutsEnabledTextBox.Multiline 속성이 모두 true로 설정된 경우, Ctrl + A 바로 가기 키를 사용해도 모든 텍스트가 선택되지 않았습니다. Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 호환성 스위치는 원래 동작을 유지하기 위해 .NET Framework 4.6.1에 도입되었습니다. 자세한 내용은 TextBox.ProcessCmdKey참조하세요.

.NET Core 및 .NET 5.0 이상 버전에서는 Switch.System.Windows.Forms.DoNotSupportSelectAllShortcutInMultilineTextBox 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

윈도우 폼

영향을 받는 API

  • 없음

DontSupportReentrantFilterMessage 호환성 스위치가 지원되지 않음

.NET Framework 4.6.1에서 도입된 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 호환성 스위치는 .NET Core 및 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.6.1부터 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 호환성 스위치는 사용자 지정 IMessageFilter.PreFilterMessage 구현을 사용하여 Application.FilterMessage 메시지를 호출할 때 가능한 IndexOutOfRangeException 예외를 해결합니다. 자세한 내용은 문제 해결: 사용자 지정 IMessageFilter.PreFilterMessage 구현을 참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.DontSupportReentrantFilterMessage 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API


EnableVisualStyleValidation 호환성 스위치가 지원되지 않음

Switch.System.Windows.Forms.EnableVisualStyleValidation 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework에서 Switch.System.Windows.Forms.EnableVisualStyleValidation 호환성 스위치를 사용하면 애플리케이션이 숫자 형식으로 제공된 시각적 스타일의 유효성 검사를 옵트아웃할 수 있습니다.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.EnableVisualStyleValidation 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API

  • 없음

UseLegacyContextMenuStripSourceControlValue 호환성 전환이 지원되지 않음

.NET Framework 4.7.2에서 도입된 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.7.2부터 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 호환성 스위치를 사용하면 개발자가 소스 제어에 대한 참조를 반환하는 ContextMenuStrip.SourceControl 속성의 새 동작을 옵트아웃할 수 있습니다. 속성의 이전 동작은 null반환하는 것이었습니다. 자세한 내용을 보려면 <AppContextSwitchOverrides> 요소을(를) 참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.UseLegacyContextMenuStripSourceControlValue 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

Windows Forms

영향을 받는 API


UseLegacyImages 호환성 스위치가 지원되지 않음

.NET Framework 4.8에서 도입된 Switch.System.Windows.Forms.UseLegacyImages 호환성 스위치는 .NET Core 또는 .NET 5.0 이상의 Windows Forms에서 지원되지 않습니다.

설명 변경

.NET Framework 4.8부터 Switch.System.Windows.Forms.UseLegacyImages 호환성 스위치는 높은 DPI 환경의 ClickOnce 시나리오에서 가능한 이미지 크기 조정 문제를 해결했습니다. true설정하면 스위치를 사용하여 스케일이 100%을 초과하는 것으로 설정된 DPI 스케일이 높은 디스플레이에서 레거시 이미지 스케일링을 복원할 수 있습니다. 자세한 내용은 GitHub의 .NET Framework 4.8 릴리스 정보 참조하세요.

.NET Core 및 .NET 5.0 이상에서는 Switch.System.Windows.Forms.UseLegacyImages 스위치가 지원되지 않습니다.

도입된 버전

3.0

스위치를 제거합니다. 스위치는 지원되지 않으며 대체 기능을 사용할 수 없습니다.

범주

윈도우 폼

영향을 받는 API

  • 없음

About 및 SplashScreen 템플릿이 손상됨

Visual Studio에서 생성된 About.vbSplashScreen.vb 파일에는 .NET Core 3.0 및 3.1을 사용할 수 없는 My 네임스페이스의 형식에 대한 참조가 포함되어 있습니다.

도입된 버전

3.0

설명 변경

.NET Core 3.0 및 3.1에는 전체 Visual Basic My 지원이 포함되어 있지 않습니다. Visual Studio의 Visual Basic Windows Forms 앱에서 AboutSplashScreen 양식 템플릿은 사용할 수 없는 My.Application.Info 유형의 속성을 참조합니다.

Visual Basic My 지원이 .NET 5에서 개선되어 프로젝트를 .NET 5 이상으로 업그레이드했습니다.

-또는-

앱에서 AboutSplashScreen 형식의 컴파일러 오류를 수정합니다. System.Reflection.Assembly 클래스를 사용하여 My.Application.Info 형식에서 제공하는 정보를 가져옵니다. 두 형태의 직접 포트는 여기에서 사용할 수 있습니다.

샘플 코드이며 최적이 아닌 코드입니다. 양식 로드 시간을 줄이기 위해 특성 목록을 캐시해야 합니다.

정보

Imports System.Reflection

Public NotInheritable Class About

    Private Sub about_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Set the title of the form.
        Dim applicationTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(applicationTitle) Then
            applicationTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        Me.Text = String.Format("About {0}", applicationTitle)
        ' Initialize all of the text displayed on the About Box.
        ' TODO: Customize the application's assembly information in the "Application" pane of the project
        '    properties dialog (under the "Project" menu).
        Me.LabelProductName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyProductAttribute)()?.Product, "")
        Me.LabelVersion.Text = String.Format("Version {0}", Assembly.GetExecutingAssembly().GetName().Version)
        Me.LabelCopyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
        Me.LabelCompanyName.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCompanyAttribute)()?.Company, "")
        Me.TextBoxDescription.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyDescriptionAttribute)()?.Description, "")
    End Sub

    Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click
        Me.Close()
    End Sub

End Class

SplashScreen

Imports System.Reflection

Public NotInheritable Class SplashScreen

    Private Sub SplashScreen1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Set up the dialog text at runtime according to the application's assembly information.  

        'TODO: Customize the application's assembly information in the "Application" pane of the project
        '  properties dialog (under the "Project" menu).

        'Application title
        Dim appTitle As String = Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyTitleAttribute)()?.Title

        If String.IsNullOrEmpty(appTitle) Then
            appTitle = System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().GetName().Name)
        End If

        ApplicationTitle.Text = appTitle

        Dim versionValue = Assembly.GetExecutingAssembly().GetName().Version

        'Format the version information using the text set into the Version control at design time as the
        '  formatting string.  This allows for effective localization if desired.
        '  Build and revision information could be included by using the following code and changing the
        '  Version control's designtime text to "Version {0}.{1:00}.{2}.{3}" or something similar.  See
        '  String.Format() in Help for more information.
        '
        '    Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor, versionValue.Build, versionValue.Revision)

        Version.Text = System.String.Format(Version.Text, versionValue.Major, versionValue.Minor)

        'Copyright info
        Copyright.Text = If(Assembly.GetExecutingAssembly().GetCustomAttribute(Of AssemblyCopyrightAttribute)()?.Copyright, "")
    End Sub

End Class

범주

비주얼 베이직 윈도우즈 폼 (Visual Basic Windows Forms)

영향을 받는 API

없음


Microsoft.VisualBasic.ApplicationServices 네임스페이스의 형식을 사용할 수 없습니다.

Microsoft.VisualBasic.ApplicationServices 네임스페이스의 형식을 사용할 수 없습니다.

도입된 버전

.NET Core 3.0

설명 변경

Microsoft.VisualBasic.ApplicationServices 네임스페이스의 형식은 .NET Framework에서 사용할 수 있었습니다. .NET Core 3.0 - 3.1에서는 사용할 수 없습니다.

불필요한 어셈블리 종속성 또는 후속 릴리스에서의 호환성 문제를 일으킬 수 있는 변경을 방지하기 위해 형식들이 제거되었습니다.

이 네임스페이스는 .NET 5에 추가되어 프로젝트를 .NET 5 이상으로 업그레이드합니다.

-또는-

코드가 Microsoft.VisualBasic.ApplicationServices 형식 및 해당 멤버의 사용에 따라 달라지는 경우 .NET 클래스 라이브러리에서 해당 형식 또는 멤버를 사용할 수 있습니다. 예를 들어 일부 System.EnvironmentSystem.Security.Principal.WindowsIdentity 멤버는 Microsoft.VisualBasic.ApplicationServices.User 클래스의 속성에 해당하는 기능을 제공합니다.

범주

Visual Basic

영향을 받는 API


Microsoft.VisualBasic.Devices 네임스페이스의 형식을 사용할 수 없습니다.

Microsoft.VisualBasic.Devices 네임스페이스의 형식을 사용할 수 없습니다.

도입된 버전

.NET Core 3.0

설명 변경

Microsoft.VisualBasic.Devices 네임스페이스의 형식은 .NET Framework에서 사용할 수 있었습니다. .NET Core 3.0 - 3.1에서는 사용할 수 없습니다.

불필요한 어셈블리 종속성이나 후속 릴리스에서 호환성을 깨뜨리는 변경을 방지하기 위해 타입이 제거되었습니다.

이 네임스페이스는 .NET 5에 추가되어 프로젝트를 .NET 5 이상으로 업그레이드합니다.

-또는-

코드가 Microsoft.VisualBasic.Devices 형식 및 해당 멤버의 사용에 따라 달라지는 경우 .NET 클래스 라이브러리에서 해당 형식 또는 멤버를 사용할 수 있습니다. 예를 들어 Microsoft.VisualBasic.Devices.Clock 클래스에 해당하는 기능은 System.DateTimeSystem.Environment 형식에서 제공되며 System.IO.Ports 네임스페이스의 형식에서 Microsoft.VisualBasic.Devices.Ports 클래스에 해당하는 기능을 제공합니다.

범주

Visual Basic

영향을 받는 API


Microsoft.VisualBasic.MyServices 네임스페이스의 형식을 사용할 수 없습니다.

Microsoft.VisualBasic.MyServices 네임스페이스의 형식을 사용할 수 없습니다.

도입된 버전

.NET Core 3.0

설명 변경

Microsoft.VisualBasic.MyServices 네임스페이스의 형식은 .NET Framework에서 사용할 수 있었습니다. .NET Core 3.0 - 3.1에서는 사용할 수 없습니다.

불필요한 어셈블리 종속성 또는 후속 릴리스의 호환성이 손상되는 변경을 방지하기 위해 형식이 제거되었습니다.

이 네임스페이스는 .NET 5에 추가되어 프로젝트를 .NET 5 이상으로 업그레이드합니다.

-또는-

코드가 Microsoft.VisualBasic.MyServices 형식 및 해당 멤버의 사용에 따라 달라지는 경우 .NET 클래스 라이브러리에 해당 형식과 멤버가 있습니다. 다음은 Microsoft.VisualBasic.MyServices 형식을 해당하는 .NET 클래스 라이브러리 형식에 매핑하는 것입니다.

Microsoft.VisualBasic.MyServices 형식 .NET 클래스 라이브러리 형식
ClipboardProxy WPF 애플리케이션에 대한 System.Windows.Clipboard, Windows Forms 애플리케이션용 System.Windows.Forms.Clipboard
FileSystemProxy System.IO 네임스페이스의 형식
RegistryProxy Microsoft.Win32 네임스페이스의 레지스트리 관련 형식
SpecialDirectoriesProxy Environment.GetFolderPath

범주

Visual Basic

영향을 받는 API


또한 참조