検証可能なタイプ セーフ コードの作成
タイプ セーフなコードとは、適切に定義された、許可されている方法でだけ、型にアクセスするコードのことです。 たとえば、有効なオブジェクト参照を例として考えると、タイプ セーフなコードは、実際のフィールド メンバーに対応する固定オフセットが指すメモリ位置にアクセスします。 しかし、オブジェクトがパブリックに公開するフィールドが属しているメモリの範囲外の、任意のオフセットが指すメモリ位置にアクセスするコードは、タイプ セーフとは言えません。
JIT (Just-in-time) コンパイルでは、検証と呼ばれるプロセスが実行され、コードが調べられてタイプ セーフかどうかが判断されます。 検証の結果タイプ セーフであることが証明されたコードは、検証可能なタイプ セーフ コードと呼ばれます。 検証プロセスやコンパイラに制約があるため、検証可能なタイプ セーフ コードではなくても、コードがタイプ セーフである場合はあります。 タイプ セーフではない言語もあり、Microsoft Visual C++ などの一部の言語コンパイラは、検証可能なタイプ セーフ マネージ コードを生成できません。 使用している言語コンパイラが検証可能なタイプ セーフ コードを生成するかどうかを確認するには、そのコンパイラのドキュメントを参照してください。 特定の言語構成要素を使用しない場合にだけ検証可能なタイプ セーフ コードを生成するコンパイラを使用する場合は、Windows Software Development Kit (SDK) の PEVerify ツールを使用して、作成したコードが検証可能なタイプ セーフ コードかどうかを確認できます。
検証可能なタイプ セーフ コード以外のコードは、セキュリティ ポリシーによって検証を省略することを許可されている場合にだけ、実行を試行できます。 ただし、タイプ セーフは、アセンブリを分離するためのランタイムの機構において重要な要素であるため、コードがタイプ セーフの規則に違反している場合には、信頼度の高いセキュリティを確保することはできません。 既定では、タイプ セーフでないコードは、その発生元がローカル コンピューターである場合にだけ実行できます。 したがって、モバイル コードはタイプ セーフであることが必要です。