학습
.NET 6의 새로운 기능
.NET 6은 .NET 5시작된 .NET 통합 계획의 마지막 부분을 제공합니다. .NET 6은 모바일, 데스크톱, IoT 및 클라우드 앱에서 SDK, 기본 라이브러리 및 런타임을 통합합니다. 이 통합 외에도 .NET 6 에코시스템은 다음을 제공합니다.
간소화된 개발: 시작하기가 쉽습니다. C# 10의 새로운 언어 기능은 작성해야 하는 코드의 양을 줄일 있습니다. 또한 웹 스택 및 최소 API를 투자하면 더 작고 빠른 마이크로 서비스를 쉽게 작성할 수 있습니다.
성능 향상: .NET 6은 클라우드에서 실행하는 경우 컴퓨팅 비용을 낮추는 가장 빠른 전체 스택 웹 프레임워크입니다.
Ultimate 생산성: .NET 6 및 Visual Studio 2022는 핫 다시 로드, 새로운 git 도구, 지능형 코드 편집, 강력한 진단 및 테스트 도구 및 더 나은 팀 공동 작업을 제공할 있습니다.
.NET 6은 LTS(장기 지원) 릴리스로 3년 동안
미리 보기 기능은 기본적으로 사용하지 않도록 설정됩니다. 또한 프로덕션에서 사용할 수 없으며 이후 버전에서 제거될 수 있습니다. 새 RequiresPreviewFeaturesAttribute 미리 보기 API에 주석을 추가하는 데 사용되며, 이러한 미리 보기 API를 사용하는 경우 해당 분석기가 경고합니다.
.NET 6은 Visual Studio 2022 이상 버전에서 지원됩니다.
이 문서에서는 .NET 6의 새로운 기능을 모두 다루지 않습니다. 새로운 기능을 모두 보려면, 또한 이 문서에 나열된 기능에 대한 더 많은 정보를 얻으려면 .NET 6 블로그 게시물을 참조하세요.
.NET 6에는 다양한 성능 향상이 포함되어 있습니다. 이 섹션에서는 몇 가지 개선 사항을 나열합니다— FileStream, 프로필 기반 최적화, 및 AOT 컴파일. 자세한 내용은 .NET 6 블로그 게시물의
Windows에서 더 나은 성능과 안정성을 제공하기 위해 .NET 6에 대해 System.IO.FileStream 형식을 다시 작성했습니다. 이제 FileStream Windows에서 비동기 I/O를 만들 때 차단되지 않습니다. 자세한 내용은 .NET 6 블로그 게시물의
PGO(프로필 기반 최적화)는 JIT 컴파일러가 가장 자주 사용되는 형식 및 코드 경로 측면에서 최적화된 코드를 생성하는 위치입니다. .NET 6에는 동적 PGO가 도입되었습니다. 동적 PGO는 계층형 컴파일과 함께 작동하여 계층 0 단계에서 배치되는 추가 계측에 따라 코드를 더욱 최적화합니다. 동적 PGO는 기본적으로 사용하지 않도록 설정되지만 DOTNET_TieredPGO
환경 변수사용하여 사용하도록 설정할 수 있습니다. 자세한 내용은 JIT 성능 향상참조하세요.
.NET 6에는 크로스겐의 후속작인 Crossgen2가 도입되어 제거되었습니다. Crossgen 및 Crossgen2는 앱의 시작 시간을 개선하기 위해 AOT(미리 실행) 컴파일을 제공하는 도구입니다. Crossgen2는 C++가 아닌 C#으로 작성되었으며 이전 버전에서는 불가능했던 분석 및 최적화를 수행할 수 있습니다. 자세한 내용은 Crossgen2대한
.NET 6 릴리스에는 네이티브 Arm64 실행 및 x64 에뮬레이션 모두에 대한 macOS Arm64(또는 "Apple Silicon") 및 Windows Arm64 운영 체제에 대한 지원이 포함되어 있습니다. 또한 x64 및 Arm64 .NET 설치 관리자는 이제 나란히 설치합니다. 자세한 내용은 macOS 11 및 Windows 11에 대한 .NET 지원 (Arm64 및 x64)을 참조하십시오.
핫 리로드는 앱의 소스 코드를 수정하고 그 변경 사항을 실행 중인 앱에 즉시 적용할 수 있는 기능입니다. 이 기능의 목적은 편집 사이에 앱이 다시 시작되지 않도록 하여 생산성을 높이는 것입니다. 핫 다시 로드는 Visual Studio 2022 및 dotnet watch
명령줄 도구에서 사용할 수 있습니다. 핫 다시 로드는 대부분의 .NET 앱 유형과 C#, Visual Basic 및 C++ 소스 코드에서 작동합니다. 자세한 내용은 핫 리로드 블로그 게시물확인하세요.
.NET 다중 플랫폼 앱 UI(.NET MAUI)는 2022년 1분기 릴리스 후보와 2022년 2분기 GA(일반 공급)로 미리 보기있습니다. .NET MAUI를 사용하면 단일 코드베이스를 사용하여 데스크톱 및 모바일 운영 체제용 네이티브 클라이언트 앱을 빌드할 수 있습니다. 자세한 내용은 .NET 다중 플랫폼 앱 UI 블로그 게시물의
C# 10에는 global using
지시문, 파일 범위 네임스페이스 선언 및 레코드 구조체와 같은 혁신이 포함되어 있습니다. 자세한 내용은 C# 언어 버전 기록참조하세요.
이 작업과 함께 C#용 .NET SDK 프로젝트 템플릿은 새로운 언어 기능 중 일부를 사용하도록 현대화되었습니다.
-
async Main
메서드 - 최상위 수준의 문장들
- 대상 형식의 새 식
-
암시적
global using
지시문 - 파일 범위의 네임스페이스
- Nullable 참조 형식
이러한 새 언어 기능을 프로젝트 템플릿에 추가하면 새 코드가 활성화된 기능으로 시작됩니다. 그러나 .NET 6으로 업그레이드할 때 기존 코드는 영향을 받지 않습니다. 이러한 템플릿 변경에 대한 자세한 내용은 .NET SDK: C# 프로젝트 템플릿 현대화 블로그 게시물을 참조하세요.
F# 6은 F# 언어 및 F# Interactive에 몇 가지 개선 사항을 추가합니다. 자세한 내용은 F# 6의 새로운 기능을 참조하세요.
Visual Basic에는 Visual Studio 환경 및 Windows Forms 프로젝트 시작이 개선되었습니다.
.NET SDK의 크기를 더 작게 유지하기 위해 일부 구성 요소는새로운 선택적 dotnet workload
명령을 사용하여 워크로드를 관리할 수 있습니다.
명령 | 묘사 |
---|---|
dotnet 워크로드 검색 | 사용 가능한 워크로드를 검색합니다. |
dotnet 워크로드 설치 | 지정된 워크로드를 설치합니다. |
dotnet 워크로드 제거 | 지정된 워크로드를 제거합니다. |
dotnet 워크로드 업데이트 | 설치된 워크로드를 업데이트합니다. |
dotnet 워크로드 복구 | 설치된 모든 워크로드를 다시 설치하여 끊어진 설치를 복구합니다. |
dotnet 워크로드 목록 | 설치된 워크로드를 나열합니다. |
자세한 내용은 선택적 SDK 워크로드
.NET 6의 System.Text.Json에서 많은 개선이 이루어져, 이제는 "산업용" 직렬화 기술로 자리 잡았습니다.
.NET 6은 System.Text.Json에 대한 새로운 원본 생성기을 추가합니다. 소스 생성은 JsonSerializer와 함께 작동하며 여러 가지 방법으로 구성할 수 있습니다. 성능을 향상시키고 메모리 사용량을 줄이며 어셈블리 트리밍을 용이하게 할 수 있습니다. 자세한 내용은 System.Text.Json 리플렉션 또는 원본 생성을 선택하는 방법 및 System.Text.Json원본 생성을 사용하는 방법을 참조하세요.
기존 읽기 전용 DOM을 보완하는 새 DOM(문서 개체 모델)이 추가되었습니다. 새 API는 일반적인 CLR 개체(POCO) 형식을 사용할 수 없는 경우에 대한 경량화된 serialization 대안을 제공합니다. 또한 큰 JSON 트리의 하위 섹션으로 효율적으로 이동하여 배열을 읽거나 해당 하위 섹션에서 POCO를 역직렬화할 수 있습니다. 쓰기 가능한 DOM을 지원하기 위해 다음과 같은 새 형식이 추가되었습니다.
자세한 내용은 JSON DOM 옵션을 참조하십시오.
이제 System.Text.JsonIAsyncEnumerable<T> 인스턴스를 사용한 직렬화 및 역직렬화를 지원합니다. 비동기 직렬화 메서드는 개체 그래프의 모든 IAsyncEnumerable<T> 인스턴스를 나열한 다음 JSON 배열로 직렬화합니다. 역직렬화를 위해 새 메서드 JsonSerializer.DeserializeAsyncEnumerable<TValue>(Stream, JsonSerializerOptions, CancellationToken) 추가되었습니다. 자세한 내용은 IAsyncEnumerable serialization참조하세요.
유효성 검사와 기본값 설정을 위한 새로운 serialization 인터페이스:
자세한 내용은 콜백참조하세요.
새 속성 순서 지정 특성:
-
자세한 내용은 직렬화된 속성순서 구성을 참조하세요.
"원시" JSON을 작성하는 새 메서드:
-
자세한 내용은 원시 JSON 쓰기을 참조하세요.
스트림에 대한 동기 직렬화 및 역직렬화:
- JsonSerializer.Deserialize(Stream, Type, JsonSerializerOptions)
- JsonSerializer.Deserialize(Stream, Type, JsonSerializerContext)
- JsonSerializer.Deserialize<TValue>(Stream, JsonSerializerOptions)
- JsonSerializer.Deserialize<TValue>(Stream, JsonTypeInfo<TValue>)
- JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerOptions)
- JsonSerializer.Serialize(Stream, Object, Type, JsonSerializerContext)
- JsonSerializer.Serialize<TValue>(Stream, TValue, JsonSerializerOptions)
- JsonSerializer.Serialize<TValue>(Stream, TValue, JsonTypeInfo<TValue>)
serialization 중에 참조 주기가 검색될 때 개체를 무시하는 새 옵션:
-
자세한 내용은 순환 참조 무시을 참고하십시오.
.NET에서 JSON 직렬화 및 역직렬화
.NET 6에는 새 버전의 HTTP인 HTTP/3에 대한 미리 보기 지원이 포함되어 있습니다. HTTP/3은 QUIC라는 새로운 기본 연결 프로토콜을 사용하여 기존 기능 및 성능 문제를 해결합니다. QUIC는 연결을 더 빠르게 설정하고, 연결은 IP 주소와 독립적이므로 모바일 클라이언트가 Wi-Fi와 셀룰러 네트워크 간에 로밍할 수 있습니다. 자세한 내용은 에서 HttpClient로 HTTP/3을 사용하는 방법을 참조하세요.을 확인해 보세요.
ASP.NET Core에는 최소 API, Blazor WebAssembly 앱용 AOT(Ahead-Of-Time) 컴파일 및 단일 페이지 앱의 향상된 기능이 포함되어 있습니다. 또한 이제 Blazor 구성 요소를 JavaScript에서 렌더링하고 기존 JavaScript 기반 앱과 통합할 수 있습니다. 자세한 내용은 ASP.NET Core 6의 새로운 기능을 참조하세요.
.NET 6은 소프트웨어의 성능 및 동작을 분석하는 데 도움이 되는 도구, API 및 SDK 컬렉션인 OpenTelemetry대한 향상된 지원을 제공합니다. System.Diagnostics.Metrics 네임스페이스의 API는 OpenTelemetry 메트릭 API 사양를 구현합니다. 예를 들어 다양한 메트릭 시나리오를 지원하는 네 가지 계측 클래스가 있습니다. 계측 클래스는 다음과 같습니다.
.NET 6은 CET(제어 흐름 적용 기술) 및 "쓰기 전용 실행"(W^X)의 두 가지 주요 보안 완화에 대한 미리 보기 지원을 추가합니다.
CET는 일부 최신 Intel 및 AMD 프로세서에서 사용할 수 있는 인텔 기술입니다. 일부 제어 흐름 하이재킹 공격으로부터 보호하는 기능을 하드웨어에 추가합니다. .NET 6은 Windows x64 앱용 CET를 지원하며 명시적으로 사용하도록 설정해야 합니다. 자세한 내용은 Intel CET 섀도 스택과의 호환성에 대한 .NET 6을 참조하세요.
W^X는 .NET 6이 있는 모든 운영 체제에서 사용할 수 있지만 Apple Silicon에서 기본적으로만 사용하도록 설정됩니다. W^X는 메모리 페이지를 쓰기 가능하고 실행 가능하도록 동시에 허용하지 않음으로써 가장 간단한 공격 경로를 차단합니다.
독립형 배포의 트리밍이 향상되었습니다. .NET 5에서는 사용되지 않는 어셈블리만 잘립니다. .NET 6은 사용되지 않는 형식 및 멤버의 트리밍도 추가합니다. 또한 런타임에 사용되는 코드를 제거할 수 있는 경우를 경고하는 트리밍 경고는 이제 기본적으로 설정되어 있습니다. 자세한 내용은 자체 포함 배포 및 실행 파일 트리밍을 참조하세요.
.NET 6 SDK에는 API 호환성, 플랫폼 호환성, 트리밍 안전성, 문자열 연결 및 분할에서 범위 사용, 더 빠른 문자열 API 및 더 빠른 컬렉션 API와 관련된 몇 가지 새로운 코드 분석기가 포함되어 있습니다. 새(및 제거된) 분석기의 전체 목록은 Analyzer 릴리스 - .NET 6참조하세요.
플랫폼 호환성 분석기OperatingSystem 클래스의 Is<Platform>
메서드(예: OperatingSystem.IsWindows())를 플랫폼 가드로 인식합니다. 사용자 지정 플랫폼 가드를 허용하기 위해 .NET 6에는 지원되거나 지원되지 않는 플랫폼 이름으로 필드, 속성 또는 메서드에 주석을 추가하는 데 사용할 수 있는 두 가지 새로운 특성이 도입되었습니다.
Application.SetDefaultFont(Font) 애플리케이션 전체에서 기본 글꼴을 설정하는 .NET 6의 새로운 메서드입니다.
C# Windows Forms 앱용 템플릿은 global using
지시문, 파일 범위 네임스페이스 및 nullable 참조 형식을 지원하도록 업데이트되었습니다. 또한 상용구 코드를 줄이고 Windows Forms 디자이너가 기본 설정 글꼴로 디자인 화면을 렌더링할 수 있도록 하는 애플리케이션 부트스트랩 코드를 포함합니다. 부트스트랩 코드는 Application.EnableVisualStyles()같은 다른 구성 메서드에 대한 호출을 내보내는 소스 생성 메서드인 ApplicationConfiguration.Initialize()
대한 호출입니다. 또한 ApplicationDefaultFont MSBuild 속성을 통해 기본이 아닌 글꼴을 설정하는 경우 ApplicationConfiguration.Initialize()
가 SetDefaultFont(Font)호출을 생성한다.
자세한 내용은 Windows Forms의 새로운 기능 블로그 게시물을 참조하세요.
.NET SDK의 모든 소스를 포함한 소스 tarball은 이제 .NET SDK 빌드의 결과물입니다. Red Hat과 같은 다른 조직에서는 이 원본 tarball을 사용하여 자체 버전의 SDK를 빌드할 수 있습니다.
.NET 6에 추가 OS 관련 TFM(대상 프레임워크 모니커)이 추가되었습니다(예: net6.0-android
, net6.0-ios
및 net6.0-macos
). 자세한 내용은 .NET 5+ OS별 TFM
미리 보기는 .NET 6에서 제네릭 형식에 연산자를 사용할 수 있는 기능입니다. .NET 6에는 C# 10의 새로운 미리 보기 기능인 static abstract
인터페이스 멤버를 활용하는 다양한 인터페이스가 도입되었습니다. 이러한 인터페이스는 다른 연산자에 해당합니다. 예를 들어 IAdditionOperators
+
연산자를 나타냅니다. 인터페이스는 System.Runtime.Experimental NuGet 패키지에서 사용할 수 있습니다. 자세한 내용은 일반 수학 블로그 게시물을 참조하세요.
NuGet 라이브러리 개발자인 경우 새로운 패키지 유효성 검사 도구 사용하면 패키지가 일관되고 올바른 형식인지 확인할 수 있습니다. 다음을 확인하여 여부를 결정할 수 있습니다.
- 패키지 버전 간에 호환성을 깨뜨리는 변경 사항이 있습니다.
- 패키지에는 모든 런타임별 구현에 대해 동일한 공용 API 집합이 있습니다.
- 대상 프레임워크나 런타임 적용 가능성에 어떠한 간격이 있습니까?
자세한 내용은 패키지 유효성 검사 블로그 게시물을 참조하세요.
.NET 6에는 코드를 검사하고 Null 허용 여부 정보를 제공하는 다음과 같은 새로운 API가 도입되었습니다.
- System.Reflection.NullabilityInfo
- System.Reflection.NullabilityInfoContext
- System.Reflection.NullabilityState
이러한 API는 리플렉션 기반 도구 및 serializer에 유용합니다.
다음 표와 같이 여러 확장 네임스페이스가 .NET 6에서 개선되었습니다.
Namespace | 개선 |
---|---|
Microsoft.Extensions.DependencyInjection |
CreateAsyncScope은 IAsyncDisposable 서비스를 등록하는 서비스 공급자에 대해 using 문을 안전하게 사용할 수 있도록 합니다. |
Microsoft.Extensions.Hosting | 새로운 ConfigureHostOptions 메서드는 애플리케이션 설정을 간소화합니다. |
Microsoft.Extensions.Logging |
Microsoft.Extensions.Logging에는 성능이 우수한 로깅 API를 위한 새로운 소스 생성기가 있습니다.
partial 로깅 메서드에 새 LoggerMessageAttribute를 추가하면 소스 생성기가 트리거됩니다. 컴파일 시 생성기는 기존 로깅 솔루션보다 런타임에 일반적으로 더 빠른 partial 메서드의 구현을 생성합니다. 자세한 내용은 컴파일 타임 로깅 소스 생성을 참조하세요. |
.NET 6에는 수많은 LINQ 메서드가 추가되었습니다. 다음 표에 나열된 대부분의 새 메서드에는 System.Linq.Queryable 형식에 동일한 메서드가 있습니다.
.NET 6에는 System.DateOnly 및 System.TimeOnly두 구조체가 추가되었습니다. 각각 DateTime의 날짜 부분과 시간 부분을 나타냅니다. DateOnly 생일 및 기념일에 유용하며, TimeOnly 매일 경보 및 주간 업무 시간에 유용합니다.
이제 표준 시간대 데이터가 설치된 운영 체제에서 IANA(Internet Assigned Numbers Authority) 또는 Windows 표준 시간대 ID를 사용할 수 있습니다. 시스템에서 요청된 표준 시간대를 찾을 수 없는 경우 windows 표준 시간대에서 IANA 표준 시간대로 입력을 자동으로 변환하도록 TimeZoneInfo.FindSystemTimeZoneById(String) 메서드가 업데이트되었습니다. 또한 한 표준 시간대 형식에서 다른 표준 시간대 형식으로 수동으로 변환해야 하는 경우 시나리오에 대해 새 메서드 TryConvertIanaIdToWindowsId(String, String) 및 TryConvertWindowsIdToIanaId 추가되었습니다.
몇 가지 다른 표준 시간대 개선 사항도 있습니다. 자세한 내용은 .NET 6
새 PriorityQueue<TElement,TPriority> 클래스는 값과 우선 순위가 모두 있는 항목의 컬렉션을 나타냅니다. 항목은 우선 순위가 증가하는 순서로 큐에서 삭제됩니다. 즉, 우선 순위 값이 가장 낮은 항목이 먼저 큐에서 삭제됩니다. 이 클래스는 최소 힙 데이터 구조를 구현합니다.
- F# 6 새로운 기능
- EF Core 6의 새로운 기능
- ASP.NET Core 6의 새로운 기능은 무엇인가?
- .NET 6 릴리스 정보
- Visual Studio 2022 릴리스 정보
- 블로그: .NET 6 발표
- 블로그: 새 System.Text.Json 원본 생성기 사용해 보세요.
.NET 피드백
.NET은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.