사용할 .NET 버전 선택
이 문서에서는 .NET 도구, SDK 및 런타임에서 버전을 선택하는 데 사용하는 정책을 설명합니다. 이러한 정책은 지정된 버전을 사용하여 애플리케이션을 실행하고 개발자 컴퓨터와 최종 사용자 컴퓨터를 쉽게 업그레이드할 수 있는 균형을 제공합니다. 이러한 정책은 다음을 사용하도록 설정합니다.
- 보안 및 안정성 업데이트를 포함하여 .NET을 쉽고 효율적으로 배포합니다.
- 대상 런타임에 관계없이 최신 도구 및 명령을 사용합니다.
버전 선택이 수행됩니다.
- SDK 명령을 실행할 때 SDK에서 설치된 최신 버전사용합니다.
- 어셈블리를 빌드할 때 대상 프레임워크 모니커가 빌드 시간 API정의합니다.
- .NET 애플리케이션을 실행할 때, 대상 프레임워크에 종속된 앱이 롤 포워드됩니다 .
- 자체 포함 애플리케이션을 게시하는 경우 자체 포함 배포에는 선택한 런타임포함됩니다.
이 문서의 나머지 단계에서는 이러한 네 가지 시나리오를 살펴봅니다.
SDK는 최신 설치된 버전을 사용합니다.
SDK 명령에는 dotnet new
및 dotnet run
포함됩니다. .NET CLI는 모든 dotnet
명령에 대해 SDK 버전을 선택해야 합니다. 다음과 같은 경우에도 기본적으로 컴퓨터에 설치된 최신 SDK를 사용합니다.
- 이 프로젝트는 이전 버전의 .NET 런타임을 대상으로 합니다.
- 최신 버전의 .NET SDK는 미리 보기 버전입니다.
이전 .NET 런타임 버전을 대상으로 하는 동안 최신 SDK 기능 및 향상된 기능을 활용할 수 있습니다. 동일한 SDK 도구를 사용하여 여러 런타임 버전의 .NET을 대상으로 지정할 수 있습니다.
경우에 따라 특정 버전의 SDK를 사용해야 할 수 있습니다. 파일 global.json에서 버전을 지정합니다.
global.json 파일 계층 구조의 아무 곳에나 배치할 수 있습니다. 특정 global.json가 파일 시스템 내의 위치에 따라 어떤 프로젝트에 적용되는지를 제어합니다. .NET CLI는 현재 작업 디렉터리에서 위쪽으로 경로를 반복적으로 탐색하는 global.json 파일을 검색합니다(프로젝트 디렉터리와 동일하지는 않음). 찾은 첫 번째 global.json 파일은 사용된 버전을 지정합니다. 해당 SDK 버전이 설치된 경우 해당 버전이 사용됩니다. global.json 지정된 SDK를 찾을 수 없는 경우 .NET CLI는 일치 규칙을 사용하여 호환되는 SDK를 선택하거나 없는 경우 실패합니다.
다음 예제에서는 global.json 구문을 보여줍니다.
{
"sdk": {
"version": "5.0.0"
}
}
SDK 버전을 선택하는 프로세스는 다음과 같습니다.
-
dotnet
현재 작업 디렉터리에서 위쪽으로 경로를 반복적으로 역방향으로 탐색하는 global.json 파일을 검색합니다. - 첫 번째로 발견된 global.json에 지정된 SDK를
dotnet
가 사용합니다. -
dotnet
global.json 없는 경우 최신 설치된 SDK를 사용합니다.
SDK 버전 선택에 대한 자세한 내용은 global.json 개요 문서의 일치 규칙 및 rollForward 섹션을 참조하세요.
SDK 버전 업데이트
최신 기능, 성능 향상 및 버그 수정을 채택하려면 SDK의 최신 버전으로 정기적으로 업데이트하는 것이 중요합니다. SDK에 대한 업데이트를 쉽게 확인하려면 dotnet sdk check
명령사용합니다. 또한 global.json사용하여 특정 버전을 선택하는 경우 새 버전을 사용할 수 있게 되면 고정된 SDK 버전을 자동으로 업데이트하는 Dependabot과 같은 도구를 고려하세요.
대상 프레임워크 모니커가 빌드 시간 API를 정의합니다.
에 정의된 API에 대해 프로젝트를 대상 프레임워크 모니커(TFM)으로 빌드합니다. 프로젝트 파일에서 대상 프레임워크 지정합니다. 다음 예제와 같이 프로젝트 파일의 TargetFramework
요소를 설정합니다.
<TargetFramework>net8.0</TargetFramework>
여러 TFM에 대해 프로젝트를 빌드할 수 있습니다. 여러 대상 프레임워크를 설정하는 것은 라이브러리에 더 일반적이지만 애플리케이션에서도 수행할 수 있습니다.
TargetFrameworks
속성(복수 TargetFramework
)을 지정합니다. 대상 프레임워크는 다음 예제와 같이 세미콜론으로 구분됩니다.
<TargetFrameworks>net8.0;net47</TargetFrameworks>
지정된 SDK는 제공되는 런타임의 대상 프레임워크로 제한되는 고정된 프레임워크 집합을 지원합니다. 예를 들어 .NET 8 SDK에는 net8.0
대상 프레임워크의 구현인 .NET 8 런타임이 포함됩니다. .NET 8 SDK는 net7.0
, net6.0
및 net5.0
지원하지만 net9.0
이상은 지원하지 않습니다.
net9.0
위해 빌드할 .NET 9 SDK를 설치합니다.
.NET Standard
.NET Standard는 다양한 .NET 구현에서 공유하는 API 표면을 대상으로 지정하는 방법이었습니다. API 표준 자체인 .NET 5 릴리스부터 .NET Standard는 한 가지 시나리오를 제외하고는 관련성이 거의 없습니다. .NET Standard는 .NET 및 .NET Framework를 모두 대상으로 지정할 때 유용합니다. .NET 5는 모든 .NET Standard 버전을 구현합니다.
자세한 내용은 .NET 5 및 .NET Standard 참조하세요.
프레임워크 종속 앱의 전진 업데이트
dotnet run
원본에서 애플리케이션을 실행할 때, 프레임워크 종속 배포dotnet myapp.dll
와 연결하여 실행하거나, 프레임워크 종속 실행 파일myapp.exe
와 연결하여 실행하면, dotnet
실행 파일은 애플리케이션의 호스트 입니다.
호스트는 컴퓨터에 설치된 최신 패치 버전을 선택합니다. 예를 들어 프로젝트 파일에 net5.0
지정하고 5.0.2
설치된 최신 .NET 런타임인 경우 5.0.2
런타임이 사용됩니다.
허용되는 5.0.*
버전이 없으면 새 5.*
버전이 사용됩니다. 예를 들어 net5.0
지정하고 5.1.0
설치한 경우 애플리케이션은 5.1.0
런타임을 사용하여 실행됩니다. 이 동작을 "부 버전 롤 포워드"라고 합니다. 하위 버전도 고려되지 않습니다. 허용되는 런타임이 설치되지 않으면 애플리케이션이 실행되지 않습니다.
5.0을 대상으로 하는 경우의 몇 가지 사용 예제는 동작을 보여 줍니다.
- ✔️ 5.0이 지정됩니다. 5.0.3은 설치된 가장 높은 패치 버전입니다. 5.0.3이 사용됩니다.
- ❌ 5.0이 지정됩니다. 5.0.* 버전이 설치되어 있지 않습니다. 3.1.1은 설치된 가장 높은 런타임입니다. 오류 메시지가 표시됩니다.
- ✔️ 5.0이 지정됩니다. 5.0.* 버전이 설치되어 있지 않습니다. 5.1.0은 설치된 가장 높은 런타임 버전입니다. 5.1.0이 사용됩니다.
- ❌ 3.0이 지정됩니다. 3.x 버전이 설치되어 있지 않습니다. 5.0.0은 설치된 가장 높은 런타임입니다. 오류 메시지가 표시됩니다.
마이너 버전 롤포워드는 최종 사용자에게 영향을 줄 수 있는 부작용이 있을 수 있습니다. 다음 시나리오를 고려합니다.
- 애플리케이션은 5.0이 필요하다고 지정합니다.
- 실행 시 버전 5.0.*은 설치되지 않지만 5.1.0은 설치됩니다. 버전 5.1.0이 사용됩니다.
- 나중에 사용자가 5.0.3을 설치하고 애플리케이션을 다시 실행합니다. 이제 5.0.3이 사용됩니다.
특히 이진 데이터 직렬화와 같은 시나리오에서는 5.0.3 및 5.1.0이 다르게 동작할 수 있습니다.
롤 포워드 동작 제어
기본 롤포워드 동작을 재정의하기 전에 .NET 런타임 호환성수준을 숙지하세요.
애플리케이션에 대한 롤 포워드 동작은 다음과 같은 네 가지 방법으로 구성할 수 있습니다.
<RollForward>
속성을 설정하여 프로젝트 수준 설정:<PropertyGroup> <RollForward>LatestMinor</RollForward> </PropertyGroup>
*.runtimeconfig.json
파일입니다.이 파일은 애플리케이션을 컴파일할 때 생성됩니다. 프로젝트에서
<RollForward>
속성이 설정된 경우*.runtimeconfig.json
파일에서rollForward
설정으로 재현됩니다. 사용자는 이 파일을 편집하여 애플리케이션의 동작을 변경할 수 있습니다.{ "runtimeOptions": { "tfm": "net5.0", "rollForward": "LatestMinor", "framework": { "name": "Microsoft.NETCore.App", "version": "5.0.0" } } }
dotnet
명령의--roll-forward <value>
속성입니다.애플리케이션을 실행할 때 명령줄을 통해 롤 포워드 동작을 제어할 수 있습니다.
dotnet run --roll-forward LatestMinor dotnet myapp.dll --roll-forward LatestMinor myapp.exe --roll-forward LatestMinor
DOTNET_ROLL_FORWARD
환경 변수입니다.
우선 순위
롤 포워드 동작은 앱이 실행될 때 다음 순서로 설정되며, 번호가 높은 항목이 번호가 낮은 항목보다 우선합니다.
- 먼저
*.runtimeconfig.json
구성 파일이 평가됩니다. - 다음으로
DOTNET_ROLL_FORWARD
환경 변수가 고려되어 이전 검사를 재정의합니다. - 마지막으로 실행 중인 애플리케이션에 전달된
--roll-forward
매개 변수는 다른 모든 것을 재정의합니다.
가치
그러나 롤 포워드 설정을 지정하려면 다음 값 중 하나를 사용하여 동작을 설정합니다.
가치 | 묘사 |
---|---|
Minor |
지정하지 않으면 기본 . 요청된 부 버전이 누락된 경우 가장 낮은 상위 부 버전으로 롤 포워드합니다. 요청된 부 버전이 있는 경우 LatestPatch 정책이 사용됩니다. |
Major |
요청된 주 버전이 없는 경우 사용 가능한 다음 상위 주 버전 및 가장 낮은 부 버전으로 롤 포워드합니다. 요청된 주 버전이 있는 경우 Minor 정책이 사용됩니다. |
LatestPatch |
가장 높은 패치 버전으로 업데이트합니다. 이 값은 부 버전 전진 업데이트를 사용하지 않도록 설정합니다. |
LatestMinor |
요청된 부 버전이 있는 경우에도 가장 높은 부 버전으로 롤 포워드합니다. |
LatestMajor |
심지어 요청된 주 버전이 있는 경우에도 가장 높은 주 버전 및 가장 높은 부 버전으로 롤 포워드합니다. |
Disable |
롤 포워드하지 말고 지정된 버전에만 바인딩합니다. 이 정책은 최신 패치로 롤 포워드하는 기능을 사용하지 않도록 설정하기 때문에 일반적인 용도로는 권장되지 않습니다. 이 값은 테스트에만 권장됩니다. |
자체 포함 배포에는 선택한 런타임이 포함됩니다.
자체 포함 배포로 애플리케이션을 게시할 수 있습니다. 이 방법은 .NET 런타임 및 라이브러리를 애플리케이션과 함께 포함합니다. 자체 포함 배포에는 런타임 환경에 대한 종속성이 없습니다. 런타임 버전 선택은 런타임이 아니라 게시 시간에 발생합니다.
게시할 때 발생하는 복원 이벤트는 지정된 런타임 패밀리의 최신 패치 버전을 선택합니다. 예를 들어 dotnet publish
.NET 5 런타임 제품군의 최신 패치 버전인 경우 .NET 5.0.3을 선택합니다. 대상 프레임워크(최신 설치된 보안 패치 포함)는 애플리케이션과 함께 패키지됩니다.
애플리케이션에 대해 지정된 최소 버전이 충족되지 않으면 오류가 발생합니다.
dotnet publish
지정된 major.minor 버전 제품군 내에서 최신 런타임 패치 버전에 바인딩됩니다.
dotnet publish
는 dotnet run
의 롤 포워드 의미를 지원하지 않습니다. 패치 및 자체 포함 배포에 대한 자세한 내용은 .NET 애플리케이션 배포의 런타임 패치 선택 문서를 참조하세요.
자체 포함 배포에는 특정 패치 버전이 필요할 수 있습니다. 다음 예제와 같이 프로젝트 파일에서 최소 런타임 패치 버전(상위 또는 하위 버전)을 재정의할 수 있습니다.
<PropertyGroup>
<RuntimeFrameworkVersion>5.0.7</RuntimeFrameworkVersion>
</PropertyGroup>
RuntimeFrameworkVersion
요소는 기본 버전 정책을 재정의합니다. 자체 포함 배포의 경우 RuntimeFrameworkVersion
정확한 런타임 프레임워크 버전을 지정합니다. 프레임워크 종속 애플리케이션의 경우 RuntimeFrameworkVersion
최소 필요한 런타임 프레임워크 버전을 지정합니다.
참고 항목
- Dependabot에 의해 지원되는 에코시스템 및 리포지토리.
- .NET다운로드 및 설치.
- .NET이 이미설치되어 있는지 확인하는 방법입니다.
- .NET 런타임 및 SDK제거하는 방법입니다.
.NET