.NET 버전 관리 방법
.NET 런타임과 .NET SDK는 다른 빈도로 새 기능을 추가합니다. 일반적으로 SDK는 런타임보다 더 자주 업데이트됩니다. 이 문서에서는 런타임 및 SDK 버전 번호를 설명합니다.
.NET은 11월마다 새로운 주 버전을 릴리스합니다. .NET 6 또는 .NET 8과 같은 짝수 번호가 매겨진 릴리스는 LTS(장기 지원)됩니다. LTS 릴리스는 3년 동안 무료 지원과 패치를 가져옵니다. 홀수 번호가 매겨진 릴리스는 표준 기간 지원입니다. 표준 기간 지원 릴리스는 18개월 동안 무료 지원과 패치를 가져옵니다.
버전 관리 정보
.NET 런타임에는 유의적 버전을 따르는 버전 관리에 대한 major.minor.patch 접근 방식이 있습니다.
그러나 .NET SDK는 유의적 버전을 따르지 않습니다. .NET SDK는 더 빠르게 릴리스되며 해당 버전 번호는 정렬된 런타임과 SDK의 자체 부 릴리스 및 패치 릴리스를 모두 전달해야 합니다.
.NET SDK 버전 번호의 처음 두 개 위치는 릴리스된 .NET 런타임 버전과 일치합니다. SDK의 각 버전은 이 런타임 또는 다른 하위 버전에 대한 애플리케이션을 만들 수 있습니다.
SDK 버전 번호의 세 번째 위치는 보조 및 패치 번호를 모두 전달합니다. 부 버전에는 100이 곱해집니다. 마지막 두 자리는 패치 번호를 나타냅니다. 부 버전 1, 패치 버전 2는 102로 표시됩니다. 예를 들어 다음과 같은 런타임 및 SDK 버전 번호 시퀀스를 사용할 수 있습니다.
변경 | .NET 런타임 | .NET SDK(*) | 주의 |
---|---|---|---|
초기 릴리스 | 5.0.0 | 5.0.100 | 초기 릴리스입니다. |
SDK 패치 | 5.0.0 | 5.0.101 | 이번 SDK 패치에서는 런타임이 변경되지 않았습니다. SDK 패치가 SDK 패치의 마지막 숫자를 범프합니다. |
런타임 및 SDK 패치 | 5.0.1 | 5.0.102 | 런타임 패치가 런타임 패치 번호와 범프합니다. SDK 패치가 SDK 패치의 마지막 숫자를 범프합니다. |
SDK 기능 변경 | 5.0.1 | 5.0.200 | 런타임 패치는 변경되지 않았습니다. 새로운 SDK 기능은 SDK 패치의 첫 번째 숫자를 증가시킵니다. |
런타임 패치 | 5.0.2 | 5.0.102 | 런타임 패치가 런타임 패치 번호와 범프합니다. SDK는 변경되지 않습니다. |
앞의 표에서 여러 정책을 볼 수 있습니다.
- 런타임과 SDK는 주 버전과 부 버전을 공유합니다. 지정된 SDK와 런타임의 처음 두 숫자는 일치해야 합니다. 앞의 모든 예는 .NET 5.0 릴리스 스트림의 일부입니다.
- 런타임의 패치 버전은 런타임이 업데이트될 때만 개정됩니다. SDK 패치 번호는 런타임 패치에 대해 업데이트되지 않습니다.
- SDK의 패치 버전은 SDK가 업데이트될 때만 업데이트됩니다. 런타임 패치에는 SDK 패치가 필요하지 않을 수도 있습니다.
참고:
- 런타임 기능 업데이트 전에 SDK에 10개의 기능 업데이트가 있는 경우 버전 번호는 1000 시리즈로 롤링됩니다. 버전 5.0.1000은 버전 5.0.900을 따릅니다. 이 상황은 발생할 것으로 예상되지 않습니다.
- 기능 릴리스가 없는 99 패치 릴리스는 발생하지 않습니다. 릴리스가 이 숫자에 가까워지면 기능 릴리스가 강제 실행됩니다.
dotnet/designs 리포지토리에서 초기 제안서에 자세한 내용을 확인할 수 있습니다.
유의적 버전
.NET 런타임은 유의적 버전(SemVer)을 대략적으로 준수하며, MAJOR.MINOR.PATCH
버전 관리를 사용하고, 버전 번호의 다양한 부분으로 변경의 수준 및 종류를 설명합니다.
MAJOR.MINOR.PATCH[-PRERELEASE-BUILDNUMBER]
선택 사항인 PRERELEASE
및 BUILDNUMBER
부분은 지원되는 릴리스에 포함되지 않으며, 야간 빌드, 소스 대상에서의 로컬 빌드 및 지원되지 않는 미리 보기 릴리스에만 존재합니다.
런타임 버전 번호 변경 이해
MAJOR
는 1년에 한 번 증가하며 다음을 포함할 수 있습니다.- 제품의 중대한 변경 사항 또는 새로운 제품 방향
- API에 호환성이 손상되는 변경이 도입됨. 주요 변경 내용을 받아들이는 데는 높은 장벽이 있습니다.
- 기존 종속성의 최신
MAJOR
버전이 채택된 경우
주 릴리스는 1년에 한 번 발생하며, 짝수 번호가 매겨진 버전은 LTS(장기 지원) 릴리스입니다. 이 버전 관리 체계를 사용하는 첫 번째 LTS 릴리스는 .NET 6입니다. 최신 비 LTS 버전은 .NET 5입니다.
다음 경우에는
MINOR
가 증가합니다.- 공용 API 노출 영역이 추가된 경우
- 새 동작이 추가된 경우
- 기존 종속성의 최신
MINOR
버전이 채택된 경우 - 새 종속성이 도입된 경우
다음 경우에는
PATCH
가 증가합니다.- 버그 수정이 이루어진 경우
- 최신 플랫폼에 대한 지원이 추가된 경우
- 기존 종속성의 최신
PATCH
버전이 채택된 경우 - 위 경우 중 하나에 해당하지 않는 다른 변경 내용이 있는 경우
여러 가지 변경이 이루어진 경우에는 개별 변경의 영향을 받는 가장 높은 요소가 증가되고 다음은 0으로 다시 설정됩니다. 예를 들어 MAJOR
가 증가하면 MINOR.PATCH
는 0으로 다시 설정됩니다. MINOR
가 증가하면 PATCH
는 0으로 다시 설정되지만, MAJOR
는 동일하게 유지됩니다.
파일 이름의 버전 번호
.NET용으로 다운로드한 파일에는 버전(예: dotnet-sdk-5.0.301-win10-x64.exe
)이 들어 있습니다.
미리 보기 버전
미리 보기 버전에는 버전 번호에 -preview.[number].[build]
이 추가됩니다. 예: 6.0.0-preview.5.21302.13
.
서비스 버전
릴리스가 출시된 후에 릴리스 분기는 일반적으로 매일 빌드 만들기를 중지하고 대신 서비스 빌드를 만들기 시작합니다. 서비스 버전에는 -servicing-[number]
이 추가됩니다. 예: 5.0.1-servicing-006924
.
.NET 런타임 호환성
.NET 런타임은 버전 간 높은 수준의 호환성을 유지합니다. .NET 앱은 대체로 새로운 주요 .NET 런타임 버전으로 업그레이드한 후에도 계속 작동해야 합니다.
각 주요 .NET 런타임 버전에는 호환성이 손상되는 변경 내용이 의도적이고 신중하게 조사되고 문서화되어 포함됩니다. 문서화된 호환성이 손상되는 변경이 업그레이드 후 앱에 영향을 미칠 수 있는 문제의 유일한 원인은 아닙니다. 예를 들어, .NET 런타임의 성능 개선(이는 호환성이 손상되는 변경으로 간주되지 않음)으로 인해 앱이 해당 버전에서 작동하지 않게 만드는 잠재적인 앱 스레딩 버그가 노출될 수 있습니다. 새로운 .NET 런타임 주 버전으로 업그레이드한 후 대규모 앱에는 몇 가지 수정이 필요할 것으로 예상됩니다.
기본적으로 .NET 앱은 지정된 .NET 런타임 주 버전에서 실행되도록 구성되므로 새로운 .NET 런타임 주 버전에서 실행되도록 앱을 업그레이드하려면 다시 컴파일하는 것이 좋습니다. 그런 다음 업그레이드 후 앱을 다시 테스트하여 문제를 확인합니다.
앱 다시 컴파일을 통한 업그레이드가 불가능하다고 가정해 보겠습니다. 이 경우 .NET 런타임은 앱이 컴파일된 버전보다 높은 주요 .NET 런타임 버전에서 실행될 수 있도록 추가 설정을 제공합니다. 이러한 설정은 앱을 더 높은 주요 .NET 런타임 버전으로 업그레이드하는 것과 관련된 위험을 변경하지 않으며 업그레이드 후 앱을 다시 테스트해야 합니다.
.NET 런타임은 이전 .NET 런타임 버전을 대상으로 하는 라이브러리 로드를 지원합니다. 최신 주요 .NET 런타임 버전으로 업그레이드된 앱은 이전 .NET 런타임 버전을 대상으로 하는 라이브러리 및 NuGet 패키지를 참조할 수 있습니다. 앱에서 참조하는 모든 라이브러리와 NuGet 패키지의 대상 런타임 버전을 동시에 업그레이드할 필요는 없습니다.