호환성은 코드가 원래 개발된 구현이 아닌 .NET 구현 버전에서 코드를 컴파일하거나 실행하는 기능을 나타냅니다. 특정 변경은 다음과 같은 6가지 방법으로 호환성에 영향을 줄 수 있습니다.
- 동작 변경
- 이진 호환성
- 원본 호환성
- 디자인 타임 호환성
- 이전 버전과의 호환성
- 호환성 전달 (.NET Core의 목표가 아님)
동작 변경
동작 변경은 멤버의 동작에 대한 변경 사항을 나타냅니다. 변경 내용은 외부에 표시될 수 있습니다(예: 메서드가 다른 예외를 throw할 수 있음) 또는 변경된 구현을 나타낼 수 있습니다(예: 반환 값 계산 방법의 변경, 내부 메서드 호출의 추가 또는 제거 또는 상당한 성능 향상).
동작 변경 내용이 외부에서 표시되고 형식의 공개 계약을 수정하는 경우 이진 호환성에 영향을 주므로 쉽게 평가할 수 있습니다. 구현 변경은 평가하기가 훨씬 더 어렵습니다. 변경의 특성과 API 사용 빈도 및 패턴에 따라 변경의 영향은 심각에서 무해한 것까지 다양할 수 있습니다.
이진 호환성
이진 호환성은 API 소비자가 다시 컴파일하지 않고 최신 버전에서 API를 사용하는 기능을 나타냅니다. 메서드를 추가하거나 형식에 새 인터페이스 구현을 추가하는 것과 같은 변경 내용은 이진 호환성에 영향을 미치지 않습니다. 그러나 소비자가 어셈블리에서 노출하는 동일한 인터페이스에 더 이상 액세스할 수 없도록 어셈블리의 공개 서명을 제거하거나 변경하면 이진 호환성에 영향을 줍니다. 이러한 종류의 변경은 이진 호환되지 않는 변경 .
원본 호환성
원본 호환성은 원본 변경 없이 API의 기존 소비자가 최신 버전에 대해 다시 컴파일할 수 있는 기능을 나타냅니다. 소스 호환되지 않는 변경 소비자가 최신 버전의 API에 대해 성공적으로 빌드하기 위해 소스 코드를 수정해야 할 때 발생합니다.
디자인 타임 호환성
디자인 타임 호환성은 Visual Studio 버전 및 기타 디자인 타임 환경에서 디자인 타임 환경을 유지하는 것을 의미합니다. 여기에는 디자이너의 동작 또는 UI가 포함될 수 있지만 디자인 타임 호환성의 가장 중요한 측면은 프로젝트 호환성에 관한 것입니다. 프로젝트 또는 솔루션은 최신 버전의 디자인 타임 환경에서 열고 사용할 수 있어야 합니다.
이전 버전과의 호환성
이전 버전과의 호환성은 API의 기존 소비자가 동일한 방식으로 동작하면서 새 버전에 대해 실행할 수 있는 기능을 나타냅니다. 동작의 변화와 이진 호환성의 변화는 모두 이전 버전과의 호환성에 영향을 미칩니다. 소비자가 최신 버전의 API에 대해 실행할 때 실행할 수 없거나 다르게 작동하는 경우, 그 API는 이전 버전과 호환되지 않는 .
개발자는 최신 버전의 API에서 이전 버전과의 호환성을 기대하므로 이전 버전과의 호환성에 영향을 주는 변경은 권장되지 않습니다.
전방 호환성
전달 호환성은 API의 기존 소비자가 동일한 동작을 나타내면서 이전 버전에 대해 실행할 수 있는 기능을 나타냅니다. 소비자가 이전 버전의 API에 대해 실행할 수 없거나 다르게 동작한다면, 해당 API는 앞으로 호환이 불가능한것입니다.
이후 호환성을 유지하려면, 두 버전 간의 변경이나 추가가 사실상 불가능합니다. 이는 이러한 변경이 이후 버전을 대상으로 하는 소비자가 이전 버전에서 실행되는 것을 방지하기 때문입니다. 개발자는 최신 API를 사용하는 소비자가 이전 API에 대해 제대로 작동하지 않을 수 있다고 예상합니다.
앞으로 호환성을 유지하는 것은 .NET Core의 목표가 아닙니다.
.NET