.NET Compact Framework と .NET Framework の相違点
更新 : 2007 年 11 月
.NET Compact Framework は、完全な .NET Framework のサブセットです。完全な .NET Framework クラス ライブラリの約 30% が実装され、モバイルおよび Embedded 開発に固有の機能とクラスも含まれています。
ここでは、2 つの Framework の相違点をすべて説明するのではなく、アプリケーションの開発に必要な重要な相違点だけを示します。
アプリケーション ドメイン
現在、.NET Compact Framework では、複数のアプリケーション ドメインで使用されるアセンブリをドメイン中立のコード領域に読み込む機能がサポートされていません。詳細については、「.NET Compact Framework のアプリケーション ドメイン」を参照してください。
配列
いくつかの言語では 0 以外の下限がサポートされますが、共通言語ランタイム (CLR) ではこれがサポートされず、最初の要素が 0 以外の場合は MissingMethodException がスローされます。
ASP.NET
.NET Compact Framework は、基本的にリッチ クライアント プラットフォームであり、ASP.NET をサポートしません。モバイル デバイス用の Web ページを開発するには、ASP.NET モバイル Web コントロールを使用できます。パーソナル コンピュータ用または Web サービス プロバイダ用の Web ページを開発するには、ASP.NET の資料を参照してください。
アセンブリとファイル形式
両方の Framework のアプリケーションは、アセンブリを使用します。どちらの Framework も、ポータブル実行可能 (PE: Portable Executable) ファイルにアクセスします。このファイルには、Microsoft Intermediate Language (MSIL) と .NET Framework アプリケーションを定義するメタデータが含まれています。PE ファイルは、他のアセンブリ ファイルによって定義および共有されるプログラミング名前空間を参照できます。詳細については、「完全な .NET Framework とのバイナリ互換性」を参照してください。
アセンブリとグローバル アセンブリ キャッシュ
現在、.NET Compact Framework は、マルチモジュール アセンブリをサポートしませんが、サテライト アセンブリはサポートします。
クラスと型
.NET Compact Framework は、.NET Framework クラス ライブラリのサブセットをサポートします。このサブセットは、リソースが限られているデバイスでの実行のためにデザインされるアプリケーションに適しています。また、.NET Framework の同じ名前のクラスとセマンティクス上の互換性があります。
.NET Compact Framework でのサポートを確認する方法については、「方法 : .NET Compact Framework のクラス ライブラリでサポートされているメンバを探す」を参照してください。
COM 相互運用
COM 相互運用および .NET Compact Framework と .NET Framework におけるマーシャリングの相違点については、「.NET Compact Framework の相互運用性」を参照してください。
共通言語ランタイム
両方の Framework の共通言語ランタイムは、マネージ コード実行、Just-In-Time (JIT) コード コンパイル、およびガベージ コレクションを活用しています。また、共通言語仕様 (CLS: Common Language Specification) もサポートしています。
どちらの Framework にも、プリミティブ型やその他の型が組み込まれており、アプリケーションのビルド時に使用および派生できます。
.NET Compact Framework の共通言語ランタイムは、完全な .NET Framework 共通言語ランタイムの約 12% のサイズです。
コントロール
.NET Compact Framework は、完全な .NET Framework で用意されているほとんどの Windows フォーム コントロールをサポートします。また、.NET Compact Framework 固有のコントロールもあります。
Windows フォーム コントロールは、.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 など) へのアクセスはほとんどの場合に成功します。2 つの 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 は、file:// で始まる Uniform Resource Identifier (URI) 文字列を、完全な .NET Framework とは異なる方法で処理します。たとえば file://myfile という相対パス指定は、\\myfile として解決されます。file:///myfile (スラッシュ 3 つ) という URI 文字列は、ルート ディレクトリ内の \myfile として解決されます。
Version プロパティを使ってアセンブリのバージョンを取得できますが、サポートされているかどうかはデバイス メーカーによって異なるため、保証されません。
アプリケーションが格納されているディレクトリ名を取得するには、「方法 : アプリケーション ディレクトリを取得する」を参照してください。
高解像度
.NET Compact Framework 2.0 以降のバージョンでは、DPI 解像度は Visual Studio プロジェクトで自動的に処理されます。高解像度の詳細については、「方法 : 画面の向きと解像度を変更する」を参照してください。
入出力 (I/O)
デバイスのオペレーティング システムが異なるため、I/O モデルに制約があります。.NET Compact Framework にはファイルの変更通知がありません。
デバイス I/O は RAM で発生するため、ファイルやディレクトリの属性を設定またはアクセスできません。
インストールおよび CAB ファイル
アプリケーションを配布するために、CAB ファイルを使用し、Microsoft Windows インストーラ アプリケーションを作成できます。
言語
Compact では Visual Basic および Visual C# を使った開発がサポートされますが、C++ は現在サポートされていません。
Math
すべての数値演算メソッドがすべてのデバイス プラットフォームでサポートされているわけではありませんが、互換性のために、API には含まれています。
メモリ
.NET Compact Framework は、バッテリ駆動システム用に最適化されており、RAM および CPU サイクルを頻繁に使用することを回避します。メモリを節約する方法について、詳しくは「.NET Compact Framework でのデバイス メモリ管理」および「方法 : パフォーマンスを向上させる」を参照してください。
ネットワーキング
.NET Compact Framework には、赤外線接続のための IrDA (Infrared Data Association) クラスや、デバイスに対する HTTP 要求のサービスのための Web 待機クラスが用意されています。これらのクラスは .NET Compact Framework でのみ使用できます。詳細については、「.NET Compact Framework でのネットワーキングと接続性」を参照してください。
プロキシ コード
.NET Compact Framework では、Web サービス記述言語ツール (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 のセキュリティ」を参照してください。
シリアル化
サイズとパフォーマンス上の理由で、.NET Compact Framework は BinaryFormatter を使用するバイナリ シリアル化や、SoapFormatter を使用する SOAP シリアル化をサポートしません。
しかし、.NET Compact Framework は XML Web サービスで SOAP を使用したオブジェクト データの送信と、データセットの XML へのシリアル化をサポートします。
サイズ
.NET Compact Framework のサイズは、.NET Framework の再頒布可能パッケージの 8% です。Windows Embedded CE ファイル システムの圧縮機能のために、ディスク上のサイズは 50% 小さくなります。
ソケット
ソケット オプションの一部はサポートされません。詳細については、「ソケット プログラミング」を参照してください。
文字列の操作、正規表現
.NET Compact Framework の正規表現を使用するアプリケーションは、完全な .NET Framework の正規表現を使用するアプリケーションとのバイナリ互換性がありません。ただし、ソース コードの互換性はあります。
スレッド
.NET Compact Framework アプリケーションは、最大で次の 4 つのスレッドを作成します。
メインのアプリケーション スレッド。
システムやアプリケーションによってスケジュール設定される、さまざまなタイマと期限切れを制御するためのスレッド。
アクティブな TCP/IP インターフェイスの変更を追跡するためのスレッド (Windows XP にあり、Windows Embedded CE にないメディア対応の動作をシミュレート)。
オブジェクトのファイナライザを実行するときに使用されるスレッド。このスレッドは、ファイナライズ可能な最初のオブジェクトがガベージ コレクションされるときに作成されます。
スレッドのサポートの詳細については、「.NET Compact Framework のスレッド処理」を参照してください。
時間間隔
Now プロパティから返される値は、秒単位のみです。ミリ秒単位ではありません。さらに精度の高い値を得るには、TickCount プロパティを使用します。
タイマ
System.Timers.Timer オブジェクトの Start メソッドと Stop メソッドはサポートされていませんが、System.Windows.Forms.Timer オブジェクトの Enabled プロパティを true または false に設定することで、タイマを開始/停止できます。
Visual Basic の My
.NET Compact Framework は、Visual Basic の My 機能 (「My による開発」を参照) をサポートしていますが、次の My オブジェクトはサポートしません。
My.Application
My.Computer
My.User
My.Settings
Web サービス
Web サービス クライアントは、wsdl.exe によって直接生成されたアセンブリを実行します。
デバイス上に Web サービスを作成するために localhost を使用しないでください。localhost はアプリケーションを実行するデバイスのことだからです。正しくは、コンピュータ名か IP アドレスを使用します。
XML
サイズの問題があるため、.NET Compact Framework は XML スキーマの検証をサポートしません。XML DOM (Document Object Model) はサポートされていません。詳細については、「.NET Compact Framework でのデータ アクセスと XML サポート」を参照してください。