ArcObjects 9.3 용 C # 버전


10

대상 프레임 워크를 .NET 3.5로 설정 한 상태에서 C # 4.0을 사용하여 ArcMap 9.3의 확장을 개발할 수 있습니까? 아니면 C # 3.0 또는 이전 버전이어야합니까?


대상 프레임 워크 3.5 인 경우 확장이있는 C # 2.0을 사용하고 있습니다. ArcEngine 10은 .NET 3.5를 대상으로해야하므로 일부 4.0 제품을 놓칠 수 있습니다. 내 앱에서 wpf 일정 컨트롤을 사용하고 싶었지만 4.0이기 때문에 할 수 없었습니다. 그래서 나는 winforms를 사용해야했습니다.
패트릭

C # 4.0을 사용하여 대상 프레임 워크가 3.5로 설정된 ArcMap 10의 확장을 개발하고 있었으므로 프레임 워크가 3.5를 유지하는 한 이전 버전과 호환되는지 궁금합니다. ArcMap 10 확장을 C # 2.0으로 변경하여 코드를 많이 편집하지 않고도 ArcMap 9로 다시 컴파일 할 수 있습니까? C # 3.0은 ArcMap 9에서 작동합니까?
Mike Rogers

답변:


13

짧은 대답 : 내 경험상 .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 returnyield breakCIL에 존재하지 않습니다. 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 버전에서 사용할 수 없거나 호환되지 않는 항목을 사용하려고하면 컴파일러 오류가 발생합니다.


1
@SeaJunk, 이것은 완전하지 않습니다. ArcGIS 9.3 / VS2010 용 ESRI SDK 확장이 없더라도 ArcGIS 어셈블리를 참조하지 않고 코드 작성을 시작하지 않습니다. 즉, 여전히 그 IDE를 사용하는 것이 가능하지만 더 불편합니다. 더 많은 수동 작업 (구성 요소 등록 등)이있을 수도 있지만 다시 AFAIK가 가능합니다.
stakx

죄송합니다 네, 그냥 최대 :) 보았다
SeaJunk

좋은 설명을 제공했지만 세 가지 기능 (CLR, BCL 및 C #)의 기능이 서로 영향을 미치기 때문에 관계는 조금 더 복잡합니다.
Petr Krebs

부수적으로, CLR과 C #의 진화에 관한 흥미로운 재미있는 사실은 거의 없습니다. 예를 들어 제네릭 형식 매개 변수에 대한 공분산 및 반공란은 CLR 2.0에 도입되었지만 언어에서 지원하기 시작했을 때 C # 4까지는 아니 었습니다. C # 3에 도입 된 LINQ는 우연히도 좋은 예입니다. 확장 방법에 의존하며, System.Runtime.CompilerServices.ExtensionAttribute를 사용하여 C # 2에서 시뮬레이션 할 수 있습니다.
Petr Krebs

1
Eric Lippert의 블로그 ( blogs.msdn.com/b/ericlippert )는 .NET / C #의 다양한 어두운 구석과 디자인 결정에 대한 훌륭한 자료입니다.
Petr Krebs

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.