.NET Compact Framework와 .NET Framework 간의 차이점
업데이트: 2007년 11월
.NET Compact Framework는 전체 .NET Framework의 하위 집합으로 전체 .NET Framework 클래스 라이브러리의 약 30%를 구현하며 모바일 및 포함 개발을 위한 기능과 클래스를 제공합니다.
이 항목에서는 두 .NET Framework 간의 차이점 중 일부에 대해서만 설명하지만, 응용 프로그램을 개발하기 위한 중요한 고려 사항을 제공합니다.
응용 프로그램 도메인
.NET Compact Framework는 현재 여러 응용 프로그램 도메인에서 사용할 수 있도록 어셈블리를 도메인 중립 코드 영역에 로드하는 기능을 지원하지 않습니다. 자세한 내용은 .NET Compact Framework의 응용 프로그램 도메인을 참조하십시오.
배열
일부 언어에서 사용할 수 있는 0 이외의 하한을 CLR(공용 언어 런타임)에서는 사용할 수 없으며, 첫 번째 요소가 0이 아니면 CLR에서 MissingMethodException을 throw합니다.
ASP.NET
.NET Compact Framework는 기본적으로 리치 클라이언트 플랫폼이며 ASP.NET 지원을 제공하지 않습니다. 모바일 장치용 웹 페이지를 개발하려면 ASP.NET 모바일 웹 컨트롤을 사용할 수 있습니다. PC 또는 웹 서비스 공급자용 웹 페이지를 개발하려면 해당 ASP.NET 설명서를 참조하십시오.
어셈블리 및 파일 형식
두 Framework의 응용 프로그램은 어셈블리를 사용하고 두 Framework 모두 .NET Framework 응용 프로그램을 정의하는 메타데이터와 MSIL(Microsoft Intermediate Language)이 포함된 PE 파일(이식 가능한 실행 파일)에 액세스합니다. PE 파일은 다른 어셈블리 파일에서 정의하고 공유하는 프로그래밍 네임스페이스를 참조할 수 있습니다. 자세한 내용은 전체 .NET Framework와의 이진 호환성을 참조하십시오.
어셈블리 및 전역 어셈블리 캐시
현재 .NET Compact Framework는 위성 어셈블리는 지원하지만 다중 모듈 어셈블리는 지원하지 않습니다.
클래스 및 형식
.NET Compact Framework에서 지원하는 .NET Framework 클래스 라이브러리의 하위 집합은 리소스 사용이 제한된 장치에서 실행하도록 디자인된 응용 프로그램에 적합하며, 이름이 동일한 .NET Framework 클래스와 의미가 호환됩니다.
.NET Compact Framework 지원 여부를 확인하는 방법에 대한 자세한 내용은 방법: 클래스 라이브러리에서 .NET Compact Framework의 지원되는 멤버 찾기을 참조하십시오.
COM Interop
.NET Compact Framework와 전체 .NET Framework의 마샬링 차이점 및 COM interop에 대한 자세한 내용은 .NET Compact Framework의 상호 운용성을 참조하십시오.
공용 언어 런타임
두 Framework의 공용 언어 런타임에는 관리 코드 실행, JIT(Just-In-Time) 코드 컴파일, 가비지 수집 등을 사용할 수 있으며 CLS(공용 언어 사양)가 지원됩니다.
두 Framework에는 모두 응용 프로그램을 빌드할 때 사용하거나 파생시킬 수 있는 기본 형식 및 기타 형식이 기본으로 제공됩니다.
.NET Compact Framework 공용 언어 런타임의 크기는 전체 .NET Framework 공용 언어 런타임의 약 12%입니다.
컨트롤
.NET Compact Framework는 전체 .NET Framework에서 제공되는 Windows Forms 컨트롤을 대부분 지원하며 .NET Compact Framework에서만 제공되는 컨트롤도 포함합니다.
Windows Forms 컨트롤은 .NET Compact Framework에만 사용할 수 있도록 빌드되었습니다. 자세한 내용은 .NET Compact Framework의 컨트롤을 참조하십시오.
현재 디렉터리
현재 디렉터리의 기능은 Windows Embedded CE 운영 체제에 표시되지 않습니다. 따라서 .NET Compact Framework는 GetCurrentDirectory 및 SetCurrentDirectory 메서드를 지원하지 않습니다.
.NET Compact Framework는 ProcessStartInfo 개체의 WorkingDirectory 속성을 지원합니다. 이후 시작 및 파일 로드 시에는 실행 중인 실행 파일에 해당 컨텍스트가 유지되지 않습니다.
데이터
.NET Compact Framework는 ADO.NET의 하위 집합 구현을 제공하며 SQL Server Mobile 데이터 공급자를 포함합니다. System.Data.OleDb 네임스페이스는 지원되지 않습니다. 데이터 지원에 대한 자세한 내용은 .NET Compact Framework의 데이터 액세스 및 XML 지원을 참조하십시오.
데이터 형식 및 부동 소수점 정밀도
.NET Compact Framework는 MidpointRounding 열거형을 지원하지 않습니다.
나누기 계산에서 제수가 아주 크거나 부동 소수점 최대값인 경우 또는 제수가 아주 작거나 부동 소수점 최소값인 경우, 정확한 값이 계산되지 않고 0이 반환됩니다.
MIPS 플랫폼에는 Standard for Binary Floating Point Arithmetic(IEEE 754)에 규정된 정밀도가 지원되지 않으므로 예기치 않은 결과가 발생할 수 있습니다. 성능 고려 사항으로 인해 .NET Compact Framework는 이 플랫폼에 대해 부동 소수점 에뮬레이션 기능을 제공하지 않습니다.
대리자
비동기 대리자, 특히 BeginInvoke 및 EndInvoke 메서드는 지원되지 않습니다. 자세한 내용은 대리자를 사용한 비동기 프로그래밍을 참조하십시오.
응용 프로그램 배포
응용 프로그램을 배포하려면 데스크톱 컴퓨터에 연결된 케이블, 적외선 포트 또는 무선 인터넷/인트라넷 연결을 사용하여 어셈블리를 대상 장치에 복사하기만 하면 됩니다. Microsoft Visual Studio 2005에서는 디버깅하는 동안 장치에 직접 배포할 수 있습니다.
진단 추적
.NET Compact Framework에서는 추적을 위한 구성 파일이 지원되지는 않지만 성능 카운터는 사용할 수 있습니다. 자세한 내용은 .NET Compact Framework의 성능 및 진단을 참조하십시오.
삭제된 개체
전체 .NET Framework에서는 삭제된 개체의 속성이나 메서드에 액세스하지 못할 수도 있습니다. 그러나 .NET Framework에서 Text와 같은 일부 속성에는 항상 액세스할 수 있습니다. 두 Framework 간의 구현 차이로 인해 .NET Compact Framework에서 삭제된 개체의 메서드나 속성에 대한 액세스는 거의 항상 실패합니다.
인코딩 및 지역화
호환성 및 크기 효율성을 위해 지역화, 즉 전역화 기능(예: 로캘에 맞는 테이블 정렬 및 날짜 형식)은 내부 운영 체제의 설정을 따릅니다.
.NET Compact Framework는 운영 체제에 따라 다른 방식으로 데이터를 정렬합니다. 그러므로 일부 문화권의 경우 정렬로 인해 예기치 않은 결과가 발생할 수 있습니다.
.NET Compact Framework는 스레드별 CurrentUICulture 설정을 지원하지 않습니다.
지역화 지원에 대한 자세한 내용은 .NET Compact Framework의 인코딩 및 지역화를 참조하십시오.
이벤트
.NET Compact Framework는 GotFocus 및 LostFocus 이벤트를 지원하지만 Activated 및 Deactivated 이벤트는 지원하지 않습니다.
예외 설명 문자열
메모리를 절약하기 위해 .NET Compact Framework에는 System.SR.dll이라는 별도의 DLL에 예외 오류 메시지 문자열이 들어 있습니다.
응용 프로그램을 지역화하는 경우에는 적절한 예외 문자열을 별도로 제공할 수도 있습니다.
파일 이름 및 경로
Windows Embedded CE에서는 파일 이름을 지정할 때 경로 정보를 제외하면 해당 파일이 응용 프로그램 디렉터리가 아니라 장치의 루트 디렉터리에 있는 것으로 간주합니다. 작업을 성공적으로 수행하려면 절대 경로 정보를 지정해야 합니다.
.NET Compact Framework는 전체 .NET Framework와 다른 방식으로 file:// 접두사가 붙은 URI(Uniform Resource Identifier) 문자열을 처리합니다 file://myfile이라는 상대 경로는 \\myfile로 해석됩니다. 앞에 슬래시가 세 개 있는 URI 문자열인 file:///은 루트 디렉터리에서 \myfile로 해석됩니다.
Version 속성을 사용하여 어셈블리의 버전을 가져올 수 있지만 그 기능은 장치 제조업체에 따라 다르기 때문에 보장되지 않습니다.
응용 프로그램이 포함된 디렉터리 이름을 가져오려면 방법: 응용 프로그램 디렉터리 가져오기를 참조하십시오.
고해상도
.NET Compact Framework 2.0 이상 버전에서는 Visual Studio 프로젝트에서 DPI 해상도가 자동으로 처리됩니다. 고해상도에 대한 자세한 내용은 방법: 방향 및 해상도 변경 처리를 참조하십시오.
I/O(입/출력)
장치 운영 체제 간의 차이로 인해 I/O 모델에는 몇 가지 제약 조건과 제한 사항이 있습니다. .NET Compact Framework는 파일 변경 알림을 제공하지 않습니다.
장치 I/O는 RAM에서 발생하므로 파일 및 디렉터리 특성에 액세스하거나 값을 설정할 수 없습니다.
설치 및 CAB 파일
CAB 파일을 사용하여 사용자의 응용 프로그램을 배포하는 Microsoft Windows Installer 응용 프로그램을 만들 수 있습니다.
언어
.NET Compact Framework에서는 Visual Basic 및 Visual C#을 사용한 개발이 지원되지만 현재 C++는 지원되지 않습니다.
Math
일부 Math 메서드가 특정 장치 플랫폼에서 지원되지 않는 경우도 있지만 호환성을 위해 모든 Math 메서드는 API에 포함되어 있습니다.
메모리
.NET Compact Framework는 배터리를 사용하는 시스템에 맞게 최적화되어 있으며 RAM과 CPU를 과다하게 사용하지 않도록 디자인되었습니다. 메모리 절약에 대한 자세한 내용은 .NET Compact Framework의 장치 메모리 관리 및 방법: 성능 향상을 참조하십시오.
네트워킹
.NET Compact Framework는 적외선 연결을 위한 IrDA(Infrared Data Association) 클래스 및 장치에 전달되는 HTTP 요청을 처리하기 위한 웹 수신 클래스를 제공합니다. 이러한 클래스는 .NET Compact Framework에서만 사용할 수 있습니다. 자세한 내용은 .NET Compact Framework의 네트워킹 및 연결을 참조하십시오.
프록시 코드
.NET Compact Framework에서는 웹 서비스 설명 언어 도구(Wsdl.exe)에서 생성된 코드 중 일부만 지원합니다. 지원되지 않는 코드를 확인하려면 방법: Wsdl.exe로 생성된 프록시 사용을 참조하십시오.
리플렉션
.NET Compact Framework는 System.Reflection.Emit 네임스페이스를 지원하지 않습니다.
.NET Compact Framework는 현재 MethodInfo, FieldInfo, PropertyInfo, EventInfo, MemberInfo, MethodBase, ConstructorInfo 및 ParameterInfo와 같은 리플렉션 개체를 비교할 때 같음 연산자(==)를 지원하지 않습니다. 따라서 이러한 리플렉션 개체를 비교할 때는 Equals 메서드 구현을 참조하십시오.
원격
.NET Compact Framework에서는 원격 서비스를 지원하지 않습니다. 다른 방법은 .NET Compact Framework의 메시지 큐를 참조하십시오.
보안
보안 관련 차이점 및 고려 사항은 .NET Compact Framework의 보안에 설명되어 있습니다.
Serialization
크기 및 성능 고려 사항으로 인해 .NET Compact Framework는 BinaryFormatter를 사용한 이진 serialization 또는 SoapFormatter를 사용한 SOAP serialization을 지원하지 않습니다.
그러나 .NET Compact Framework에서는 XML Web services의 SOAP를 사용하여 개체 데이터를 전송하는 경우나 XML에 대한 데이터 집합을 serialize하는 경우에는 serialization을 지원합니다.
크기
.NET Compact Framework의 크기는 전체 .NET Framework 재배포 가능 패키지의 8%입니다. 디스크 사용 크기는 Windows Embedded CE 파일 시스템 압축으로 인해 50% 축소됩니다.
소켓
일부 소켓 옵션이 지원되지 않습니다. 자세한 내용은 소켓 프로그래밍을 참조하십시오.
문자열 조작, 정규식
.NET Compact Framework에서 정규식을 사용하는 응용 프로그램과 전체 .NET Framework에서 정규식을 사용하는 응용 프로그램 간에는 이진 호환이 가능하지 않지만 소스 코드는 호환 가능합니다.
스레드
.NET Compact Framework 응용 프로그램은 최대 다음 네 개의 스레드를 만듭니다.
기본 응용 프로그램 스레드
시스템이나 응용 프로그램에서 예약할 수 있는 다양한 기간 타이머 및 시간 제한을 제어하는 데 사용되는 스레드
Windows Embedded CE에는 없고 Windows XP에는 있는 미디어 감지 동작을 시뮬레이션하는 활성 TCP/IP 인터페이스의 변경 내용을 추적하는 데 사용되는 스레드
개체 종료자를 실행하는 데 사용되는 스레드. 이 스레드는 첫 번째 종료 가능 개체의 가비지가 수집될 때 만들어집니다.
스레딩 기능에 대한 자세한 내용은 .NET Compact Framework의 스레딩을 참조하십시오.
시간 간격
Now 속성은 밀리초가 아닌 초에 해당하는 값만 반환합니다. TickCount 속성을 사용하면 세부 수준의 측정 값을 얻을 수 있습니다.
타이머
System.Timers.Timer 개체의 Start 및 Stop 메서드는 지원되지 않지만 System.Windows.Forms.Timer 개체의 Enabled 속성을 true 또는 false로 설정하여 타이밍을 시작하거나 중지할 수 있습니다.
Visual Basic My
.NET Compact Framework는 Visual BasicMy 기능(My를 사용한 개발 참조)을 지원하지만 다음과 같은 My 개체는 지원하지 않습니다.
My.Application
My.Computer
My.User
My.Settings
웹 서비스
웹 서비스 클라이언트는 wsdl.exe에서 생성하는 어셈블을 직접 실행합니다.
localhost는 응용 프로그램을 실행하는 장치를 참조하기 때문에 장치에서 웹 서비스를 만들 때 localhost를 사용해서는 안 됩니다. 대신 컴퓨터의 이름이나 IP 주소를 사용해야 합니다.
XML
크기 고려 사항으로 인해 .NET Compact Framework는 XML 스키마 유효성 검사를 지원하지 않습니다. XML DOM(문서 개체 모델)은 지원합니다. 자세한 내용은 .NET Compact Framework의 데이터 액세스 및 XML 지원을 참조하십시오.