.NET 7의 새로운 기능

.NET 7은 .NET 6의 후속 버전이며 통합되고, 현대적이고, 단순하고, ‘빠릅니다.’ .NET 7은 STS(표준 기간 지원) 릴리스(이전의 ‘현재’ 릴리스)로 18개월 동안 지원됩니다.

이 문서에서는 .NET 7의 새로운 기능을 나열하고 각각에 대한 자세한 정보로 연결되는 링크를 제공합니다.

.NET 7용으로 업데이트된 모든 .NET 문서를 찾으려면 .NET 문서: .NET 7 릴리스의 새로운 기능을 참조하세요.

성능

성능은 .NET 7에서 중점을 두는 측면이며 모든 기능은 성능을 염두에 두고 디자인되었습니다. 또한 .NET 7에는 순전히 성능을 목표로 하는 다음과 같은 향상된 기능이 포함되어 있습니다.

  • OSR(온스택 대체)은 계층화된 컴파일을 보완합니다. 런타임은 현재 실행 중인 메서드에 의해 실행된 코드를 실행 중간에(즉, “온스택” 동안) 변경할 수 있습니다. 장기 실행 메서드는 실행 중간에 최적화된 버전으로 전환될 수 있습니다.
  • 이제 PGO(프로필 기반 최적화)가 OSR에서 작동하며 <TieredPGO>true</TieredPGO> 프로젝트 파일에 추가하여 더 쉽게 사용하도록 설정할 수 있습니다. PGO는 대리자와 같은 추가 항목을 계측하고 최적화할 수도 있습니다.
  • Arm64에 대한 코드 생성이 향상되었습니다.
  • 네이티브 AOT는 외부 종속성이 없는 대상 플랫폼의 파일 형식으로 독립 실행형 실행 파일을 생성합니다. IL 또는 JIT 없이 완전히 네이티브이며 빠른 시작 시간과 소형의 자체 포함 배포를 제공합니다. .NET 7에서 네이티브 AOT는 콘솔 앱에 중점을 두며 앱을 트리밍해야 합니다.
  • Blazor WebAssembly, Android 및 iOS 앱을 지원하는 Mono 런타임의 성능이 향상되었습니다.

.NET 7을 매우 빠르게 만드는 많은 성능 중심 기능에 대한 자세한 내용은 Performance improvements in .NET 7(.NET 7의 성능 향상) 블로그 게시물을 참조하세요.

System.Text.Json serialization

.NET 7에는 다음 영역에서 System.Text.Json serialization이 개선되었습니다.

  • 계약 사용자 지정을 사용하면 형식이 직렬화 및 역직렬화되는 방식을 보다 쉽게 제어할 수 있습니다. 자세한 내용은 JSON 계약 사용자 지정을 참조하세요.
  • 사용자 정의 형식 계층 구조를 위한 다형 serialization. 자세한 내용은 파생 클래스의 속성 직렬화를 참조하세요.
  • 역직렬화가 성공하기 위해 JSON 페이로드에 있어야 하는 속성인 필수 멤버에 대한 지원. 자세한 내용은 필수 속성을 참조하세요.

이러한 업데이트 및 기타 업데이트에 대한 내용은 What's new in System.Text.Json in .NET 7(.NET 7의 System.Text.Json에 대한 새로운 기능) 블로그 게시물을 참조하세요.

제네릭 수학

.NET 7 및 C# 11에는 일반적으로 수학 연산을 수행할 수 있는 기능이 개선되었습니다. 즉, 작업 중인 정확한 형식을 알 필요가 없습니다. 예를 들어 두 개의 숫자를 더하는 메서드를 작성하려는 경우 이전에는 각 형식에 대한 메서드의 오버로드를 추가해야 했습니다. 이제 형식 매개 변수가 숫자와 유사한 형식으로 제한되는 단일 제네릭 메서드를 작성할 수 있습니다. 자세한 내용은 제네릭 수학 문서 및 Generic math(제네릭 수학) 블로그 게시물을 참조하세요.

정규식

. NET의 정규식 라이브러리는 .NET 7에서 기능과 성능이 크게 개선되었습니다.

  • 새 옵션 RegexOptions.NonBacktracking을 사용하면 역추적을 방지하고 입력 길이에서 선형 시간 처리를 보장하는 접근 방법을 통해 일치를 사용할 수 있습니다. 역추적되지 않는 엔진은 오른쪽에서 왼쪽으로 검색하는 데 사용할 수 없으며 몇 가지 다른 제한 사항이 있지만 모든 정규식 및 입력에 대해 빠릅니다. 자세한 내용은 역추적되지 않는 모드를 참조하세요.

  • 정규식 원본 생성기는 새로운 기능입니다. 원본 생성기는 컴파일 시간에 ‘사용자’ 패턴에 최적화된 엔진을 빌드하여 처리량 성능 이점을 제공합니다. 내보낸 원본은 프로젝트의 일부이므로 사용자가 보고 디버그할 수 있습니다. 또한 새 원본 생성기 진단 SYSLIB1045를 사용하여 원본 생성기로 변환될 수 있는 Regex를 사용하는 위치를 경고합니다. 자세한 내용은 .NET 정규식 원본 생성기를 참조하세요.

  • 대/소문자를 구분하지 않는 검색의 경우 .NET 7에서는 성능이 크게 개선됩니다. RegexOptions.IgnoreCase를 지정하면 패턴의 각 문자와 입력의 각 문자에서 ToLower를 더 이상 호출하지 않기 때문에 성능이 개선됩니다. 대신 모든 대/소문자 관련 작업은 Regex가 생성될 때 수행됩니다.

  • Regex는 이제 일부 API에 대한 확장 범위를 지원합니다. 이 지원의 일부로 다음과 같은 새 메서드가 추가되었습니다.

이러한 기능 및 기타 개선 사항에 대한 자세한 내용은 Regular expression improvements in .NET 7(.NET 7의 정규식 개선 사항) 블로그 게시물을 참조하세요.

.NET 라이브러리

.NET 라이브러리 API가 많이 개선되었습니다. 일부는 이 문서의 다른 전용 섹션에서 설명합니다. 각각은 다음 표에 요약되어 있습니다.

설명 API 추가 정보
TimeSpan, TimeOnlyDateTimeDateTimeOffset 형식의 마이크로초 및 나노초 지원 - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- 새 DateTime 생성자 오버로드

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- 새 DateTimeOffset 생성자 오버로드

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- 및 기타...
이러한 API는 마이크로초 및 나노초 값을 결정하기 위해 더 이상 "눈금" 값을 계산할 필요가 없음을 의미합니다. 자세한 내용은 .NET 7 Preview 4(.NET 7 미리 보기 4) 블로그 게시물을 참조하세요.
Tar 보관 파일 읽기, 쓰기, 보관 및 추출을 위한 API System.Formats.Tar 자세한 내용은 .NET 7 Preview 4(.NET 7 미리 보기 4) 및 .NET 7 Preview 6(.NET 7 미리 보기 6) 블로그 게시물을 참조하세요.
트래픽을 안전한 수준으로 유지하여 리소스를 보호하기 위한 속도 제한 API RateLimiter및 System.Threading.RateLimiting NuGet 패키지의 다른 항목 자세한 내용은 .NET의 HTTP 처리기 속도 제한Announcing rate limiting for .NET(.NET에 대한 속도 제한 발표)을 참조하세요.
Stream에서 모든 데이터를 읽는 API - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read는 스트림에서 사용할 수 있는 것보다 적은 데이터를 반환할 수 있습니다. 새 ReadExactly 메서드는 요청된 바이트 수를 정확히 읽고 새 ReadAtLeast 메서드는 ‘최소한’ 요청된 바이트 수를 읽습니다. 자세한 내용은 .NET 7 Preview 5(.NET 7 미리 보기 5) 블로그 게시물을 참조하세요.
DateOnly, TimeOnly, Int128, UInt128Half에 대한 새 형식 변환기 System.ComponentModel 네임스페이스에서는 다음이 적용됩니다.

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
형식 변환기는 값 형식을 문자열로 또는 그 반대로 변환하는 데 자주 사용됩니다. 이러한 새 API는 최근에 추가된 형식에 대한 형식 변환기를 추가합니다.
IMemoryCache에 대한 메트릭 지원 - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics()를 사용하면 이벤트 카운터 또는 메트릭 API를 사용하여 하나 이상의 메모리 캐시에 대한 통계를 추적할 수 있습니다. 자세한 내용은 .NET 7 Preview 4(.NET 7 미리 보기 4) 블로그 게시물을 참조하세요.
Unix 파일 권한을 가져오고 설정하는 API - System.IO.UnixFileMode 열거형
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
자세한 내용은 .NET 7 Preview 7(.NET 7 미리 보기 7) 블로그 게시물을 참조하세요.
문자열에 필요한 구문 종류를 나타내는 특성 StringSyntaxAttribute 예를 들어 string 매개 변수에 [StringSyntax(StringSyntaxAttribute.Regex)] 특성을 지정하여 이 매개 변수에 정규식이 필요한 것으로 지정할 수 있습니다.
브라우저 또는 다른 WebAssembly 아키텍처에서 실행할 때 JavaScript와 상호 운용하는 API System.Runtime.InteropServices.JavaScript JavaScript 앱은 .NET 7에서 확장된 WebAssembly 지원을 사용하여 JavaScript에서 .NET 라이브러리를 다시 사용할 수 있습니다. 자세한 내용은 Use .NET from any JavaScript app in .NET 7(.NET 7의 모든 JavaScript 앱에서 .NET 사용)을 참조하세요.

가시성

.NET 7은 가시성이 개선되었습니다. 가시성은 앱이 스케일링되고 기술이 복잡해지면서 앱의 상태를 이해하는 데 도움이 됩니다. .NET의 가시성 구현은 주로 OpenTelemetry를 기준으로 합니다. 향상된 기능은 다음과 같습니다.

자세한 내용은 .NET 7 Preview 4(.NET 7 미리 보기 4) 블로그 게시물을 참조하세요.

.NET SDK

.NET 7 SDK는 CLI 템플릿 환경을 개선합니다. 또한 컨테이너에 게시하고 NuGet을 사용하여 중앙 패키지 관리를 수행할 수 있습니다.

템플릿

dotnet new 명령 및 템플릿 작성 기능이 유용하게 개선되었습니다.

dotnet new

템플릿을 기준으로 새 프로젝트, 구성 파일 또는 솔루션을 만드는 dotnet new CLI 명령은 이제 탐색을 위한 탭 완성 기능을 지원합니다.

  • 사용 가능한 템플릿 이름
  • 템플릿 옵션
  • 허용되는 옵션 값

또한 더 나은 적합성을 위해 install, uninstall, search, listupdate 하위 명령에는 더 이상 -- 접두사가 없습니다.

작성

.NET 7의 새로운 개념인 템플릿 ‘제약 조건’을 사용하여 템플릿이 허용되는 컨텍스트를 정의할 수 있습니다. 제약 조건은 템플릿 엔진이 dotnet new list 같은 명령에 표시해야 하는 템플릿을 결정하는 데 도움을 줍니다. 템플릿을 운영 체제, 템플릿 엔진 호스트(예: .NET CLI 또는 Visual Studio의 새 프로젝트 대화 상자) 및 설치된 워크로드로 제한할 수 있습니다. 템플릿의 구성 파일에서 제약 조건을 정의합니다.

또한 템플릿 구성 파일에서 이제 템플릿 매개 변수가 여러 값을 허용한다는 주석을 달 수 있습니다. 예를 들어 web 템플릿은 여러 형태의 인증을 허용합니다.

자세한 내용은 .NET 7 Preview 6(.NET 7 미리 보기 6) 블로그 게시물을 참조하세요.

컨테이너에 게시

컨테이너는 클라우드에서 다양한 애플리케이션 및 서비스를 배포하고 실행하는 가장 쉬운 방법 중 하나입니다. 컨테이너 이미지는 이제 .NET SDK의 지원되는 출력 형식이며, dotnet publish를 사용하여 컨테이너화된 버전의 애플리케이션을 만들 수 있습니다. 이 기능에 대한 자세한 내용은 Announcing built-in container support for the .NET SDK(.NET SDK에 대한 기본 제공 컨테이너 지원 발표)를 참조하세요. 자습서를 보려면 dotnet publish를 사용하여 .NET 앱 컨테이너화를 참조하세요.

중앙 패키지 관리

이제 NuGet의 CPM(중앙 패키지 관리) 기능을 사용하여 한 위치에서 프로젝트의 일반적인 종속성을 관리할 수 있습니다. 이 기능을 사용하도록 설정하려면 Directory.Packages.props 파일을 리포지토리의 루트에 추가합니다. 이 파일에서 MSBuild 속성 ManagePackageVersionsCentrallytrue로 설정하고 PackageVersion 항목을 사용하여 공통 패키지 종속성에 대한 버전을 추가합니다. 그런 다음, 개별 프로젝트 파일에서 중앙에서 관리되는 패키지를 참조하는 PackageReference 항목에서 Version 특성을 생략할 수 있습니다.

자세한 내용은 중앙 패키지 관리를 참조하세요.

P/Invoke 원본 생성

.NET 7에서는 C#의 플랫폼 호출(P/Invokes)을 위한 원본 생성기를 도입했습니다. 원본 생성기는 static, partial 메서드에서 LibraryImportAttribute를 찾아 마샬링 코드의 컴파일 시간 원본 생성을 트리거합니다. 컴파일 시간에 마샬링 코드를 생성하면 DllImportAttribute를 사용할 때와 마찬가지로 런타임에 IL 스텁을 생성할 필요가 없습니다. 원본 생성기는 애플리케이션 성능을 향상시키고 앱을 AOT(ahead-of-time) 컴파일할 수 있도록 합니다. 자세한 내용은 플랫폼 호출에 대한 원본 생성 원본 생성 P/Invokes에서 사용자 지정 마샬러 사용을 참조하세요.

이 섹션에는 .NET 7 릴리스와 동시에 제공되는 릴리스가 있는 관련 제품에 대한 정보가 포함되어 있습니다.

Visual Studio 2022 버전 17.4

자세한 내용은 Visual Studio 2022의 새로운 기능을 참조하세요.

C# 11

C# 11에는 제네릭 수학, 원시 문자열 리터럴, 파일 범위 형식 및 기타 새로운 기능에 대한 지원이 포함되어 있습니다. 자세한 내용은 C# 11의 새로운 기능을 참조하세요.

F# 7

F# 7에서는 언어를 더 간단하게 만들고 성능 및 새로운 C# 기능과의 상호 운용성을 향상시키기 위한 작업이 진행되고 있습니다. 자세한 내용은 Announcing F# 7(F# 7 발표)을 참조하세요.

.NET MAUI

.NET MAUI(.NET 다중 플랫폼 앱 UI)는 C#과 XAML을 사용하여 네이티브 모바일 및 데스크톱 앱을 만들기 위한 플랫폼 간 프레임워크입니다. Android, iOS, macOS 및 Windows API를 단일 API로 통합합니다. 최신 업데이트에 대한 자세한 내용은 .NET 7용 .NET MAUI의 새로운 기능을 참조하세요.

ASP.NET Core

ASP.NET Core 7.0에는 속도 제한 미들웨어, 최소 API 개선 사항 및 gRPC JSON 코드 변환이 포함됩니다. 모든 업데이트에 대한 내용은 ASP.NET Core 7의 새로운 기능을 참조하세요.

EF Core

Entity Framework Core 7.0에는 JSON 열에 대한 공급자 중립적 지원, 변경 내용 저장을 위한 성능 개선 및 사용자 지정 리버스 엔지니어링 템플릿이 포함됩니다. 모든 업데이트에 대한 내용은 EF Core 7.0의 새로운 기능을 참조하세요.

Windows Forms

.NET용 Windows Forms 7에 많은 작업이 진행되었습니다. 다음 영역에서 개선이 이루어졌습니다.

  • 액세스 가능성
  • 높은 DPI 및 스케일링
  • 데이터 바인딩

자세한 내용은 What's new in Windows Forms in .NET 7(.NET 7용 Windows Forms의 새로운 기능)을 참조하세요.

WPF

.NET 7의 WPF에는 향상된 성능 및 접근성 기능뿐만 아니라 다양한 버그 수정 사항이 포함되어 있습니다. 자세한 내용은 What's new for WPF in .NET 7(.NET 7의 WPF의 새로운 기능) 블로그 게시물을 참조하세요.

Orleans

Orleans(은)는 강력하고 확장 가능한 분산 애플리케이션을 빌드하기 위한 플랫폼 간 프레임워크입니다. Orleans에 대한 최신 업데이트에 대한 자세한 내용은 Orleans3.x에서 7.0 마이그레이션을 참조하세요.

.NET 업그레이드 도우미 및 CoreWCF

이제 .NET 업그레이드 도우미는 서버 쪽 WCF 앱을 WCF의 커뮤니티에서 만든 WCF-.NET(Core) 이식 포트인 CoreWCF로 업그레이드하도록 지원합니다. 자세한 내용은 CoreWCF를 사용하도록 WCF 서버 쪽 프로젝트 업그레이드를 참조하세요.

ML.NET

이제 ML.NET 최신 딥 러닝 기술을 사용하여 사용자 지정 텍스트 분류 모델을 쉽게 학습시킬 수 있는 텍스트 분류 API가 포함되어 있습니다. 자세한 내용은 What's new with AutoML and tooling(AutoML 및 도구의 새로운 기능) 및 Introducing the ML.NET Text Classification API(ML.NET 텍스트 분류 API 소개) 블로그 게시물을 참조하세요.

추가 정보