.NET Framework의 버전 호환성Version compatibility in the .NET Framework

이전 버전과의 호환성은 특정 버전의 플랫폼용으로 개발된 앱이 해당 플랫폼의 다음 버전에서도 실행되는 것을 의미합니다.Backward compatibility means that an app that was developed for a particular version of a platform will run on later versions of that platform. .NET Framework는 이전 버전과의 호환성을 최대한 지원하려고 합니다. 한 버전의 .NET Framework용으로 작성된 소스 코드는 다음 버전의 .NET Framework에서 컴파일되어야 하며, 한 버전의 .NET Framework에서 실행되는 이진 파일은 다음 버전의 .NET Framework에서 동일하게 작동해야 합니다.The .NET Framework tries to maximize backward compatibility: Source code written for one version of the .NET Framework should compile on later versions of the .NET Framework, and binaries that run on one version of the .NET Framework should behave identically on later versions of the .NET Framework.

앱의 버전 호환성Version compatibility for apps

기본적으로 앱은 빌드에 사용된 .NET Framework 버전에서 실행됩니다.By default, an app runs on the version of the .NET Framework that it was built for. 해당 버전이 없고 앱 구성 파일에 지원되는 버전이 정의되지 않은 경우 .NET Framework 초기화 오류가 발생할 수 있습니다.If that version isn't present and the app configuration file doesn't define supported versions, a .NET Framework initialization error may occur. 이 경우 앱을 실행하지 못합니다.In this case, the attempt to run the app will fail.

앱이 실행되는 특정 버전을 정의하려면 하나 이상의 <supportedRuntime> 요소를 앱의 구성 파일에 추가합니다.To define the specific versions on which your app runs, add one or more <supportedRuntime> elements to your app's configuration file. <supportedRuntime> 요소에는 지원되는 런타임 버전이 나열됩니다. 우선 순위가 가장 높은 버전이 처음에 지정되고 우선 순위가 가장 낮은 버전이 마지막에 지정됩니다.Each <supportedRuntime> element lists a supported version of the runtime, with the first specifying the most preferred version and the last specifying the least preferred version.

<configuration>
   <startup>
      <supportedRuntime version="v2.0.50727" />
      <supportedRuntime version="v4.0" />
   </startup>
</configuration>

자세한 내용은 방법: NET Framework 4 또는 4.x를 지원하도록 앱 구성을 참조하세요.For more information, see How to: Configure an App to Support .NET Framework 4 or 4.x.

구성 요소의 버전 호환성Version compatibility for components

앱에서는 실행되는 .NET Framework의 버전을 자체적으로 제어할 수 있지만, 구성 요소는 제어할 수 없습니다.An app can control the version of the .NET Framework on which it runs, but a component can't. 구성 요소 및 클래스 라이브러리는 특정 앱의 컨텍스트에서 로드되므로 앱이 실행되는 .NET Framework 버전에서 자동으로 실행됩니다.Components and class libraries are loaded in the context of a particular app, and that's why they automatically run on the version of the .NET Framework that the app runs on.

이러한 제한 사항 때문에 구성 요소에서 호환성 보장은 특히 중요합니다.Because of this restriction, compatibility guarantees are especially important for components. .NET Framework 4부터 System.Runtime.Versioning.ComponentGuaranteesAttribute 특성을 해당 구성 요소에 적용하여 구성 요소가 여러 버전 간 호환성을 유지해야 하는 수준을 지정할 수 있습니다.Starting with the .NET Framework 4, you can specify the degree to which a component is expected to remain compatible across multiple versions by applying the System.Runtime.Versioning.ComponentGuaranteesAttribute attribute to that component. 여러 도구에서는 이 특성을 사용하여 이후 버전의 구성 요소에서 호환성 보장을 잠재적으로 위반할 수 있는 가능성을 검색할 수 있습니다.Tools can use this attribute to detect potential violations of the compatibility guarantee in future versions of a component.

이전 버전과의 호환성과 .NET FrameworkBackward compatibility and the .NET Framework

.NET Framework 4.5 이상 버전은 이전 버전의 .NET Framework로 빌드된 앱과 호환됩니다.The .NET Framework 4.5 and later versions are backward-compatible with apps that were built with earlier versions of the .NET Framework. 즉, 이전 버전으로 빌드된 앱과 구성 요소는 수정하지 않아도 .NET Framework 4.5 이상 버전에서 작동합니다.In other words, apps and components built with previous versions will work without modification on the .NET Framework 4.5 and later versions. 그러나 앱은 기본적으로 해당 앱을 위해 개발된 공용 언어 런타임 버전에서 실행되기 때문에 .NET Framework 4.5 이상 버전에서 앱을 실행하려면 구성 파일을 제공해야 할 수 있습니다.However, by default, apps run on the version of the common language runtime for which they were developed, so you may have to provide a configuration file to enable your app to run on the .NET Framework 4.5 or later versions. 자세한 내용은 이 문서 앞부분의 앱의 버전 호환성 섹션을 참조하십시오.For more information, see the Version compatibility for apps section earlier in this article.

실제 상황에서 .NET Framework의 외견상 중요하지 않은 변경 사항 및 프로그래밍 기술 변경 사항에 의해 이 호환성이 손상될 수 있습니다.In practice, this compatibility can be broken by seemingly inconsequential changes in the .NET Framework and changes in programming techniques. 예를 들어 .NET Framework 4.5 성능 향상 기능이 이전 버전에서 발생하지 않은 경합 상태를 발생시킬 수 있습니다.For example, performance improvements in the .NET Framework 4.5 can expose a race condition that did not occur on earlier versions. 마찬가지로 .NET Framework 어셈블리에 하드 코드된 경로 사용, 특정 버전의 .NET Framework와 같음 비교 수행, 리플렉션을 사용한 전용 필드 값 가져오기는 이전 버전과 호환되지 않습니다.Similarly, using a hard-coded path to .NET Framework assemblies, performing an equality comparison with a particular version of the .NET Framework, and getting the value of a private field by using reflection are not backward-compatible practices. 또한 각 .NET Framework 버전에는 일부 앱 및 구성 요소의 호환성에 영향을 줄 수 있는 버그 수정 내용 및 보안 관련 변경 사항이 포함되어 있습니다.In addition, each version of the .NET Framework includes bug fixes and security-related changes that can affect the compatibility of some apps and components.

앱이나 구성 요소가 .NET Framework 4.5(해당 포인트 릴리스 .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2 또는 4.8 포함)에서 제대로 작동하지 않는 경우 다음 검사 목록을 사용합니다.If your app or component doesn't work as expected on the .NET Framework 4.5 (including its point releases, the .NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, or 4.8), use the following checklists:

호환성 및 Side-By-Side 실행Compatibility and side-by-side execution

문제에 대한 적합한 해결 방법을 찾지 못한 경우 .NET Framework 4.5(또는 해당 포인트 릴리스 중 하나)가 버전 1.1, 2.0 및 3.5와 side-by-side 실행된다는 것과 버전 4.5는 버전 4를 대체하는 내부 업데이트임을 기억하십시오.If you can't find a suitable workaround for your issue, remember that the .NET Framework 4.5 (or one of its point releases) runs side by side with versions 1.1, 2.0, and 3.5, and is an in-place update that replaces version 4. 버전 1.1, 2.0 및 3.5를 대상으로 하는 앱의 경우 대상 컴퓨터에 적절한 .NET Framework 버전을 설치하여 앱을 가장 적합한 환경에서 실행할 수 있습니다.For apps that target versions 1.1, 2.0, and 3.5, you can install the appropriate version of the .NET Framework on the target machine to run the app in its best environment. Side-by-Side 실행에 대한 자세한 내용은 Side-by-Side 실행을 참조하십시오.For more information about side-by-side execution, see Side-by-Side Execution.

참고 항목See also