2014-08-28 4 views
0

우리의 prod 및 dev 컴퓨터는 .Net 4.5를 실행하지만 빌드 서버는 .Net 4.0입니다. 우리는 .Net 4.0과 4.0을 사용하는 머신에서의 빌드의 영향을 평가하려고 시도하는 임씨를 목표로 삼고 있습니다. 런타임에 찌르다가 4.5 어셈블리를 사용할 것이라고 알고 있지만 ...C#의 변경 사항 - 커버 아래

Ive는 VS 2012의 주요 변경 사항에 대한 MS의 문서를 읽었지만이 기능이 어떻게 작동하는지 이해하려고합니다. 람다 예제에서 문제를 재현 할 수 있습니다. 4.0 및 4.5 서버에서 응용 프로그램을 실행하면 동일한 동작을 보입니다. 나는 런타임이 4.5에있는 문제점을 고칠 것이라고 생각했을 것이다. http://msdn.microsoft.com/en-us/library/vstudio/hh678682(v=vs.110).aspx.

나는 또한 4.5과 호환성 문제에 대해 읽고 : http://msdn.microsoft.com/en-us/library/hh367887%28v=vs.110%29.aspx

컴파일 시간 나는 그것을 C에서 참조를 사용 믿습니다 : \의 Program Files (x86) \ 참조 어셈블리 \ 마이크로 소프트 \ Framework.NETFramework \ V4 .0 및 런타임에서은 C : \ Windows \ Microsoft.NET \ Framework \ v4.0.30319를 사용합니다.

VS는 2010 년과 2012 년 사이에 어떻게 다르게 동작합니까? 다른 MSBuild.exe 또는 다른 CSC.exe를 사용하기 때문에 VS가 발생합니까? 필자는 프로세스 모니터를 통해이를 실행하지만 프로그램 파일에서 MSBuild를 보여주기 때문에 분명하지 않지만 찾을 수는 없습니다.

답변

2

람다 예제에서 문제를 재현 할 수 있습니다. 4.0 및 4.5 서버에서 응용 프로그램을 실행하면 동일한 동작을 보입니다. 그것은 foreach 루프에서 반복 변수를 캡처에 올 때 당신이 C#에서 행동의 변화를 의미하는 경우

, 즉 전혀 프레임 워크 문제가 아니다. 그것은 컴파일러 차이점입니다. C# 5 컴파일러를 사용하면 새로운 동작을 얻게됩니다. C# 4 컴파일러를 사용하면 이전 동작을 얻게됩니다. .NET 2.0을 목표로하고 .NET 2.0 만있는 시스템에 대해 실행할 수 있으며 C# 5 컴파일러로 컴파일하면 새로운 동작을 계속 얻을 수 있습니다.

이제 빌드 서버에 .NET 4.0 만 설치되어 있으면 C# 4 컴파일러가 사용됩니다. 기본적으로, 옵션은 다음과 같습니다

  • 는 C# 5 동작을 취득,
  • 가 빌드 서버에 .NET 4.5을 설치 루프 내부에 선언 된 변수에 반복 변수를 복사 이전 해결 방법을 사용하기

그러나이 문제는 매우 구체적입니다. 다른 호환성 문제에는 다른 요구 사항이있을 수 있습니다.