ASP .NET MVC의 web.config에서 TargetFramework 설정은 무엇을 의미합니까?


80

ASP.NET MVC 5 웹 응용 프로그램 중 하나에는 다음과 같은 web.config 설정이 있습니다.

<system.web>
  <compilation debug="true" targetFramework="4.6" />
  <httpRuntime targetFramework="4.5" />
  <!--... many other things -->
</system.web>

왜 두 개의 targetFramework 설정이 있는지 명확하지 않으며 4.6을 대상으로 컴파일 한 다음 4.5에서 실행하려고하는 것은 잘못된 것 같습니다.

분명히 나는 ​​뭔가를 놓치고 있지만 무엇입니까?


답변:


57

targetFramework존재 하는 이유는 web.config.NET Framework의 각 버전에 대한 주요 변경 사항간에 호환성 문제를 방지하기위한 것입니다. targetFrameworkon compilation과 의 차이점은 httpRuntime각 개발 및 배포 환경에 속합니다.

MSDN 블로그 에 따르면 :

<compilation targetFramework="4.6" />

컴파일을 수행 할 때 사용되는 .NET Framework의 참조 어셈블리 버전을 선택합니다. (참고 : Visual Studio에서는이 요소가 Web.config에 있어야하지만 자동으로 추론됩니다.)

이 요소는 컴파일 중에 현재 프로젝트에서 종속성 및 관련 어셈블리를 만드는 데 사용되는 어셈블리 버전을 결정합니다.

<httpRuntime targetFramework="4.5" /> 즉, 메모리로로드하기 전에 배포 컴퓨터에서 기존 프로젝트 어셈블리를 다시 컴파일하지 않고 .NET 4.5 런타임 어셈블리를 사용하도록 설계된 현재 프로젝트를 의미합니다.

따라서 대상 컴퓨터에서 사용되는 런타임 파일의 버전에 따라 컴파일 된 프로젝트와 사용 가능한 어셈블리 간의 호환성을 유지하도록 설계된 targetFrameworkin httpRuntime요소에 정의 된 버전 번호가 있다고 결론을 내릴 수 있습니다 .

따라서 귀하의 경우 이것은 잘못된 동작이 아닙니다. 프로젝트 작성자는 유사한 특성 (예 : 버전 4.5)을 가진 대상 컴퓨터에서 사용할 수있는 최저 런타임 버전에 대한 런타임 호환성을 유지하려고합니다. .NET 어셈블리. 버전 4.5와 4.6의 차이는 상대적으로 작으므로이 컨텍스트에서 런타임 버전을 4.5로 낮게 유지합니다.

관련 참조 :

https://msdn.microsoft.com/en-us/library/dn833123(v=vs.110).aspx

https://msdn.microsoft.com/en-us/library/dn833125(v=vs.110).aspx


9
아마도 나일 수도 있습니다. "... 컴파일을 수행 할 때 .NET Framework의 참조 어셈블리의 버전이 사용되는 경우 4.6을 사용했을 때"... NET 4.5를 사용하도록 설계된 ... "을 어떻게 사용할 수 있는지 이해하지 못합니다. ... "
g.pickardou

2
.NET 4.6은 .NET 4.5의 하위 집합 업데이트이므로 약간의 차이가있는 .NET 4.5 어셈블리 참조를 기반으로합니다 (.NET은 버전 2.0부터 이전 버전과의 호환성을 지원함). 실제로 프로젝트는 버전 4.6 어셈블리 참조를 사용하여 컴파일되지만 더 높은 버전을 사용할 수없는 경우 대상 컴퓨터에서 버전 4.5 런타임 참조를 사용할 수 있습니다.
Tetsuya Yamamoto

4
"역방향 호환성"을 언급하고 있습니다. 그러나 정의에 따르면 낮은 버전을 예상하는 것은 높은 버전의 맥락에서 원활하게 작동합니다. (더 높은 버전은 안 반대 "역 호환이 가능하기 때문이다.
g.pickardou

4
msdn에서 그것에 대해 조금 더 설명 할 수있는 좋은 기사를 찾았습니다. blogs.msdn.microsoft.com/webdev/2012/11/19/…
dev

2
이 대답은 너무 틀린 것 같고 응답자가 다시 앞쪽으로 가져 왔습니다. 따라서 4.6의 기능을 사용하고 컴파일하면 대상 서버 (4.5)에 배포 할 때 해당 기능이 이전 버전에 존재하지 않기 때문에 앱이 실패합니다.
joedotnot

9

내 이해 에 따라 다음으로 번역 되기 때문에 <compilation debug="true" targetFramework="4.6" />억압되고 있습니다.<httpRuntime targetFramework="4.5" />httpRuntime

<compilation targetFramework="4.5" />
<machineKey compatibilityMode="Framework45" />
<pages controlRenderingCompatibilityVersion="4.5" />

따라서 위의 설정은 아마도 내가 사실이라고 생각하지 않는 VS에서 직접 수행 한 경우 일부 오해 또는 버그 때문일 것입니다.

이 설정 및 기타 모든 관련 항목이 Microsoft 직원이 작성한 All about <httpRuntime targetFramework> 라는 제목의이 블로그 가 도움이 될 수 있음을 의미하는 방법을 이해하려면 . 그러나 그것의 요점은;

.NET Framework (ASP.NET 포함)는 기존 프레임 워크가 컴퓨터에서 업데이트 될 때 거의 100 % 호환성을 유지하기 위해 노력합니다. 응용 프로그램이 .NET Framework 4에 대해 개발 및 배포 된 경우 4.5에서 계속 작동하도록 최대한 보장하려고합니다. 이는 일반적으로 버전간에 제품에 기발하거나 버그가 있거나 바람직하지 않은 동작을 유지하는 것을 의미합니다.이를 수정하면 해당 동작에 의존하는 애플리케이션에 부정적인 영향을 미칠 수 있습니다.


4
블로그 게시물에서는 web.config에 명시 적으로 설정된 모든 설정이 httpRuntime 설정에 의해 암시 된 설정으로 재정의되지 않을 것이라고 제안합니다. "<httpRuntime targetFramework ="4.5 "/>가 일반적으로 <pages controlRenderingCompatibilityVersion =을 암시하더라도 "4.5"/>, 런타임은 이미 controlRenderingCompatibilityVersion을 명시 적으로 설정했음을 인식하고 설정을 존중합니다. "
code4pi

2
참고로 httpRuntime이 설정되지 않은 상태에서 컴파일이 설정되어 있으면 machinekey 및 pages 설정의 기본값은 4.5가 아니므로 수동으로 설정해야합니다. 이는 레거시 웹 사이트와 .net 핵심 웹 사이트간에 쿠키를 공유하려고 할 때 매우 중요합니다.
Jarvan

Compilation과 HttpRuntime 모두에 대해 targetFramework가 누락 된 경우 해석은 무엇입니까?
Anirudh Goel

Google에서 확인하십시오. 그러나 이러한 속성은 응용 프로그램 및 프레임 워크의 범위를 특정 버전으로 제한하는 데 사용된다고 생각합니다. 그러나 지정하지 않으면 제한이 없다고 가정하고 설치된 최신 버전을 실행하려고합니다. 최근 프레임 워크 기능 (예 : 4.7.2)을 사용할 수있는 다른 앱을 설치하는 동안 일부 앱이 이전 버전 (예 : 4.0)에서 실행될 수 있다고 가정하더라도 이것은 좋은 생각이 아닐 수 있습니다.
Mubashar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.