다음을 통해 공유


.NET 7의 새로운 기능

.NET 7은 .NET 6 후속작으로, 통합되고, 현대적이고, 단순하며, 빠른중 하나입니다. .NET 7은 STS(표준 기간 지원) 릴리스(이전의 현재 릴리스라고 함)로 18개월 동안 지원됩니다.

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

성능

성능은 .NET 7의 핵심 초점이며 모든 기능은 성능을 염두에 두고 설계되었습니다. 또한 .NET 7에는 순전히 성능을 목표로 하는 다음과 같은 향상된 기능이 포함되어 있습니다.

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

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

System.Text.Json 직렬화

.NET 7에는 다음 영역에서 System.Text.Json 직렬화가 개선되었습니다.

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

이러한 업데이트 및 기타 업데이트에 대한 자세한 내용은 .NET 7의 System.Text.Json의 새로운 기능 블로그 게시물을 참조하십시오.

제네릭 수학

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

정규식

. NET의 정규식 라이브러리는 .NET 7에서 상당한 기능 및 성능 향상을 보였습니다.

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

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

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

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

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

.NET 라이브러리

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

묘사 API들 추가 정보
TimeSpan, TimeOnly, DateTimeDateTimeOffset 형식의 마이크로초 및 나노초 지원 - 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 블로그 게시물을 참조하세요.
Tar 보관 파일 읽기, 쓰기, 보관 및 추출을 위한 API System.Formats.Tar 자세한 내용은 .NET 7 Preview 4.NET 7 Preview 6 블로그 게시물을 참조하세요.
트래픽을 안전한 수준으로 유지하여 리소스를 보호하기 위한 속도 제한 API RateLimiter 및 System.Threading.RateLimiting NuGet 패키지의 다른 자세한 내용은 .NET의 HTTP 처리기에 대한 속도 제한 및 .NET의 속도 제한 발표 를 참조하세요.
모든 데이터를 Stream 읽는 API - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read 스트림에서 사용할 수 있는 것보다 적은 데이터를 반환할 수 있습니다. 새 메서드는 요청된 바이트 수를 정확히 읽고, 새 메서드는 요청된 바이트 수를 적어도 읽습니다. 자세한 내용은 .NET 7 Preview 5 블로그 게시물을 참조하세요.
DateOnly, TimeOnly, Int128, UInt128Half 대한 새 형식 변환기 System.ComponentModel 네임스페이스에서 다음을 수행합니다.

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

관찰 가능성

.NET 7은 모니터링 기능개선을 진행합니다. 관찰성은 앱의 크기가 조정되고 기술 복잡성이 증가함에 따라 앱의 상태를 이해하는 데 도움이 됩니다. . NET의 관찰 가능성 구현은 주로 OpenTelemetry중심으로 구축됩니다. 향상된 기능은 다음과 같습니다.

자세한 내용은 .NET 7 Preview 4 블로그 게시물을 참조하세요.

.NET SDK

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

템플릿

dotnet new 명령 및 템플릿 작성에 대한 몇 가지 환영 개선 사항이 적용되었습니다.

dotnet new

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

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

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

저작

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

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

자세한 내용은 .NET 7 Preview 6 블로그 게시물을 참조하세요.

컨테이너에 게시

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

중앙 패키지 관리

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

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

P/Invoke 원본 생성

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

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

Visual Studio 2022 버전 17.4

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

C# 11

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

F# 7

F# 7은 언어를 더 간단하게 만들고 새로운 C# 기능과의 성능 및 상호 운용성을 향상시키기 위한 여정을 계속합니다. 자세한 내용은 F# 7발표 공지를 참조하세요.

.NET MAUI

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

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 7을 위한 Windows Forms에 많은 작업이 들어갔습니다. 다음 영역에서 개선이 이루어졌습니다.

  • 접근성
  • 높은 DPI 및 크기 조정
  • 데이터 바인딩

자세한 내용은 .NET 7의 Windows Forms의 새로운 기능을 참조하세요.

WPF

.NET 7의 WPF에는 성능 및 접근성 향상뿐만 아니라 다양한 버그 수정이 포함되어 있습니다. 자세한 내용은 .NET 7 블로그 게시물에서 WPF의 새로운 기능 참조하세요.

Orleans

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

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

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

ML.NET

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

참조