대상 프레임 워크를 .NET 3.5로 설정 한 상태에서 C # 4.0을 사용하여 ArcMap 9.3의 확장을 개발할 수 있습니까? 아니면 C # 3.0 또는 이전 버전이어야합니까?
대상 프레임 워크를 .NET 3.5로 설정 한 상태에서 C # 4.0을 사용하여 ArcMap 9.3의 확장을 개발할 수 있습니까? 아니면 C # 3.0 또는 이전 버전이어야합니까?
답변:
짧은 대답 : 내 경험상 .NET Framework 3.5를 명시 적으로 대상으로하는 한 Visual Studio 2010 (C # 언어 버전 4 포함)에서 ArcGIS 9.3 용 .NET 3.5 기반 코드를 개발하는 데 아무런 문제가 없어야합니다. 여기서 C # 언어 버전은 대부분 관련이 없습니다.
추신 : 이 답변은 버전 9.3과 10을위한 ArcGIS 익스텐션 개발 사이에 존재하는 차이점에 대해서는 다루지 않습니다. (ESRI는 애드 인 모델을 상당히 많이 변경했지만, 여러분이 알고 있다고 가정합니다. .)
더 긴 대답 : C # 언어 버전과 대상 프레임 워크 버전을 구별해야합니다.
.NET Framework는 CLR (Common Language Runtime)과 BCL (Base Class Library)의 두 가지 주요 부분으로 구성되어 있다고 생각할 수 있습니다. 전자는 "가상 머신"이고 후자는 클래스 라이브러리입니다 (MSDN에서 조회 할 수있는 모든 유형 포함).
.NET Frameworks 2부터 3.5까지는 모두 동일한 CLR (버전 2)을 사용합니다. 즉, 실행 환경이 실제로 발전하지 않았습니다. 그러나 진화 한 것은 BCL입니다. .NET 2 컴퓨터에서 .NET 3.5 응용 프로그램을 실행하는 경우 주요 문제는 "바이트 코드"(CIL)가 호환되지 않고 (그렇지 않음) 응용 프로그램이 참조하고 사용할 수 있다는 것입니다. .NET 2 BCL에서 아직 사용할 수없는 유형.
이제 Visual Studio 2010에 .NET Framework 3.5를 대상으로 지정하면 이후의 Framework 버전에서 BCL 형식을 사용하지 않도록해야합니다. 또한 C # 컴파일러의 코드 출력에 CLR 버전 4에서만 사용 가능한 기능이 필요하지 않도록합니다.
C # 언어 버전은이 모든 것과 거의 관련이 없습니다. C # 컴파일러가 소스 코드를 가져 와서 CIL (Common Intermediate Language)이라는 훨씬 낮은 수준의 프로그래밍 언어로 변환하기 위해 실제로 수행하는 작업. 예를 들어, : 특정 C # 언어 구조는 더 이상 CIL에서 인식 할 수 없습니다 yield return
및 yield break
CIL에 존재하지 않습니다. IEnumerator<T>
인터페이스 구현으로 간단하게 변환됩니다 .
요약하자면 : 코드가 컴파일 되 자마자 C # 언어 버전은 관련이 없습니다. 무엇 입니다 중요한 것은 ...
출력 CIL / "바이트 코드"가 대상 .NET Framework와 호환되는지 여부 (.NET 3.5를 대상으로하는 경우 위에서 언급 한 이유로 .NET 2 와도 호환 가능함); 과
코드가 대상 프레임 워크에서 사용 가능한 유형을 참조 / 사용하는지 여부
C # 언어 구문에는 특정 버전의 프레임 워크가 필요하다는 점에서 주목할만한 예외 중 하나는 제네릭이 IIRC에 도입 된 마지막 사례였다)는 C # 키워드 일 수 있습니다 dynamic
. System.Dynamic
네임 스페이스의 유형이 필요한 코드로 컴파일 될 수 있으며 .NET 4 이후에만 사용할 수 있습니다. 그러나 걱정하지 마십시오. .NET 3.5를 대상으로하도록 Visual Studio 2010 프로젝트를 설정 한 경우 특정 .NET Framework 버전에서 사용할 수 없거나 호환되지 않는 항목을 사용하려고하면 컴파일러 오류가 발생합니다.
VS2010은 9.3 개발을 위해 지원되는 IDE가 아닙니다. 어셈블리 참조, 도움말 또는 템플릿 통합을 얻지 못합니다.
그러나 당신은 그것을 작동하게 만들 수 있습니다 : http://forums.arcgis.com/threads/29935-VS2010-with-version-9.3.1