2008-08-13 3 views
11

CLR이 실제로 변경되지 않았으므로 잘보아야합니다.C# 3.0으로 컴파일 된 C# 2.0 코드 소비 어셈블리

C# 2.0 코드 을 실행하는 상자에는 .NET 3.5이 출시 된이 있습니다.

배경은 우리가 요청한 다양한 작업 항목을 완료하기 위해 (거의 플러그인과 같은) 어셈블리를 동적으로로드하는 Windows 서비스 (VS2005로 빌드 된 .NET 2.0 EXE, 배포 된 150 개 서버)가 있다는 것입니다. 새로운 버전의 버스 로직을 출시 할 때마다 어셈블리를 FTP 서버에 드롭하고 Windows 서비스는 최신 버전을 확인하고 잡아 저장하는 방법을 알고 있습니다. 새로운 어셈블리는 이제 VS2008을 사용하고 .NET 2.0을 대상으로 구축되었습니다. 그러나 우리는 LINQ와 같은 C# 3.0 언어 기능을 활용하고 Windows 서비스의 새 버전을 빌드하고 배포하지 않고 .NET 3.5에 대해 어셈블리를 대상으로 삼기를 원합니다.

답변

7

C# 3 및 .Net 3.5는 새 어셈블리를 추가하지만 IL은 변경되지 않습니다.

이 닷넷이 어셈블리는, 컴파일 및 C# 3를 사용할 수 있다는 것을 의미한다만큼 당신을 System.Linq 또는 System.Core

yield, var 참조 다른 Linq에 또는 아무것도를 사용하지 않는 한, 람다 구문, anon 유형 및 초기화 프로그램은 모두 컴파일러의 영리성입니다. 그들이 생산하는 IL은 상호 호환성이 있습니다.

새 어셈블리를 3.5로 참조 할 수 있으면 모두 잘 작동합니다.

은 ASP.Net의 새로운 버전이 없습니다 - 그것은 여전히 ​​2.0.50727해야합니다 -하지만 당신은 여전히이 흥미로운 물건입니다 3.5

1

에 대한 컴파일해야한다. 나는 어제 LinqBridge을보고 있었는데,이 포럼에있는 누군가가 나에게 제안하고 비슷한 일을하고있다.

Microsoft는 2.0 CLR에서 요구하는 것과 동일한 IL을 생성하기 위해 모두 컴파일 할 때 2.0, 3.0 및 3.5라는 프레임 워크를 명명했습니다. 2.0 버전을 추가하는 것이 더 의미가 있다고 생각했을 것입니다. 다른 버전의 런타임, 컴파일러 및 언어가 있다는 사실을 사람들에게 알리기가 쉽지 않다고 생각합니다.

2

수율 VAR, 람다 구문 아논 유형 및 initialisers 모든 컴파일러 영리함이다. 그들이 생산하는 IL은 상호 호환성이 입니다.

마이너 니 픽링 포인트이지만 수익률은 어쨌든 2.0 피쳐입니다.

관련 문제