다음을 통해 공유


버전 관리

소프트웨어 라이브러리는 버전 1.0에서 거의 완료되지 않습니다. 좋은 라이브러리는 시간이 지남에 따라 진화하고, 기능을 추가하고, 버그를 수정하고, 성능을 향상합니다. 기존 사용자를 중단하지 않고 새 버전의 .NET 라이브러리를 릴리스할 수 있어야 합니다.

중대한 변화

버전 간의 호환성이 손상되는 변경 처리에 대한 자세한 내용은 호환성이 손상되는 변경참조하세요.

버전 번호

.NET 라이브러리에는 버전을 지정하는 여러 가지 방법이 있습니다. 이러한 버전은 가장 중요합니다.

NuGet 패키지 버전

NuGet 패키지 버전 NuGet.org Visual Studio NuGet 패키지 관리자에 표시되며 패키지를 사용할 때 소스 코드에 추가됩니다. NuGet 패키지 버전은 사용자가 일반적으로 볼 수 있는 버전 번호이며, 사용 중인 라이브러리 버전에 대해 이야기할 때 이를 참조합니다. NuGet 패키지 버전은 NuGet에서 사용되며 런타임 동작에는 영향을 주지 않습니다.

<PackageVersion>1.0.0-alpha1</PackageVersion>

NuGet 패키지 버전과 결합된 NuGet 패키지 식별자는 NuGet에서 패키지를 식별하는 데 사용됩니다. 예를 들어 Newtonsoft.Json + 11.0.2. 접미사가 있는 패키지는 시험판 패키지이며 테스트에 이상적인 특별한 동작을 가집니다. 자세한 내용은 시험판 패키지 참조하세요.

NuGet 패키지 버전은 개발자에게 가장 눈에 띄는 버전이므로 SemVer(의미 체계 버전 관리)사용하여 업데이트하는 것이 좋습니다. SemVer는 릴리스 간의 변경의 중요성을 나타내며 개발자가 사용할 버전을 선택할 때 정보에 입각한 결정을 내리는 데 도움이 됩니다. 예를 들어, 1.0에서 2.0로 변경할 때 잠재적으로 호환성 문제가 발생할 수 있음을 나타냅니다.

✔️ SemVer 2.0.0 사용하여 NuGet 패키지의 버전을 지정하는 것이 좋습니다.

✔️ 사용자가 일반적으로 볼 수 있는 버전 번호이기 때문에 공용 설명서에서 NuGet 패키지 버전을 사용하세요.

✔️ 비안정적인 패키지를 릴리스할 때 시험판 접미사를 포함하십시오. (API를 미리 보기 또는 실험으로 표시하는 방법에 대한 자세한 내용은 미리 보기 API를 참조하세요.)

사용자는 시험판 패키지를 가져오도록 옵트인해야 하므로 패키지가 완료되지 않았다는 것을 이해합니다.

어셈블리 버전

어셈블리 버전은 런타임에 CLR이 로드할 어셈블리 버전을 선택하는 데 사용하는 버전입니다. 버전 관리를 사용하여 어셈블리를 선택하는 것은 강력한 이름의 어셈블리에만 적용됩니다.

<AssemblyVersion>1.0.0.0</AssemblyVersion>

.NET Framework CLR은 강력한 이름의 어셈블리를 로드하기 위해 정확한 일치를 요구합니다. 예를 들어 Library1, Version=1.0.0.0Newtonsoft.Json, Version=11.0.0.0대한 참조로 컴파일되었습니다. .NET Framework는 그 정확한 버전 11.0.0.0만 로드할 것입니다. 런타임에 다른 버전을 로드하려면 바인딩 리디렉션을 .NET 애플리케이션의 구성 파일에 추가해야 합니다.

강력한 이름과 어셈블리 버전을 결합하면 엄격한 어셈블리 버전로드를 할 수 있습니다. 라이브러리를 강력하게 명명하는 것은 여러 이점을 제공하지만 실행 시 어셈블리를 찾을 수 없다는 오류가 발생할 수 있으며, app.config 또는 web.config에서 바인딩 리디렉션을 재설정해야 할 수 있습니다. .NET(Core)에서는 어셈블리 로드가 더 유연해졌습니다. .NET(Core) 런타임은 런타임에 더 높은 버전의 어셈블리를 자동으로 로드합니다.

✔️ AssemblyVersion에 주 버전만 포함하는 것이 좋습니다.

예를 들어, 라이브러리 1.0과 라이브러리 1.0.1 모두 AssemblyVersion이 1.0.0.0이고, 라이브러리 2.0은 AssemblyVersion이 2.0.0.0입니다. 어셈블리 버전이 자주 변경되지 않으면 바인딩 리디렉션이 줄어듭니다.

✔️ AssemblyVersion 및 NuGet 패키지 버전의 주 버전 번호를 동기화 상태로 유지하는 것이 좋습니다.

AssemblyVersion은 사용자에게 표시되는 일부 정보 메시지(예: 예외 메시지의 어셈블리 이름 및 어셈블리 정규화된 형식 이름)에 포함됩니다. 버전 간의 관계를 유지 관리하면 개발자가 사용 중인 버전에 대한 자세한 정보가 제공됩니다.

❌ 고정 AssemblyVersion이 없습니다.

변환되지 않는 AssemblyVersion은 바인딩 리디렉션이 필요하지 않지만 단일 버전의 어셈블리만 GAC(전역 어셈블리 캐시)에 설치할 수 있음을 의미합니다. 또한 GAC에서 어셈블리를 참조하는 애플리케이션은 다른 애플리케이션이 호환성이 손상되는 변경으로 GAC 어셈블리를 업데이트하는 경우 중단됩니다.

어셈블리 파일 버전

어셈블리 파일 버전은 Windows에서 파일 버전을 표시하는 데 사용되며 런타임 동작에는 영향을 주지 않습니다. 이 버전을 설정하는 것은 선택 사항입니다. Windows 탐색기의 파일 속성 대화 상자에 표시됩니다.

<FileVersion>11.0.2.21924</FileVersion>

Windows 탐색기

✔️ 연속 통합 빌드 번호를 AssemblyFileVersion 수정 버전으로 포함하는 것이 좋습니다.

예를 들어 프로젝트의 버전 1.0.0을 빌드하고 연속 통합 빌드 번호는 99이므로 AssemblyFileVersion은 1.0.0.99입니다.

✔️ 파일 버전에 Major.Minor.Build.Revision 형식을 사용합니다.

파일 버전은 .NET에서 사용되지 않지만 Windows에서는 파일 버전이 Major.Minor.Build.Revision 형식일 예상합니다. 버전이 이 형식을 따르지 않으면 경고가 발생합니다.

어셈블리 정보 버전

어셈블리 정보 버전은 추가 버전 정보를 기록하는 데 사용되며 런타임 동작에는 영향을 주지 않습니다. 이 버전을 설정하는 것은 선택 사항입니다. 원본 링크를 사용하는 경우 이 버전은 NuGet 패키지 버전과 소스 제어 버전을 사용하여 빌드 시 설정됩니다. 예를 들어 1.0.0-beta1+204ff0a 어셈블리가 빌드된 소스 코드의 커밋 해시를 포함합니다. 자세한 내용은 원본 링크참조하세요.

<InformationalVersion>The quick brown fox jumped over the lazy dog.</InformationalVersion>

메모

이전 버전의 Visual Studio에서는 이 버전이 Major.Minor.Build.Revision형식을 따르지 않으면 빌드 경고가 발생합니다. 경고는 무시해도 됩니다.

❌ 어셈블리 정보 버전을 직접 설정하지 마세요.

SourceLink가 NuGet 및 소스 제어 메타데이터를 포함하는 버전을 자동으로 생성하도록 허용합니다.