2012-05-04 17 views
1

リファレンスアセンブリを理解しようとしていて、CLRがこれらをどのように処理しているのか、実際には何種類の.NET CLRが実際に再生されているのかちょっと混乱しています。CLRの相違点

APIがwinmdファイルによって投影され、後で参照アセンブリによって.NETで処理される.NET Metroプロファイルを見ると、どのバージョン/種類のCLRがこれを処理していますか?

これは、SilverlightプロファイルとWindows Phoneプロファイルで同じような仕組みになっているため、同じCLRがそれぞれに読み込まれますが、ターゲットとするAPIによってのみ公開されます。

意味がありますか?

答えて

5

デスクトップ、モバイル、携帯電話、Xbox、Silverlight、Microの各プラットフォームに対応しています。そして今年後半になるともう一つ、ARMパッドがあります。しかし、それは重要ではありません。あなたのプログラムは、CLRではなく参照アセンブリに対して構築されます。あなたのプログラムが作るすべての呼び出しはフレームワークメソッド呼び出しであり、決してCLR関数を直接呼び出すことはありません。

したがって、プロファイル、c:\ program files \ referenceアセンブリに格納されている参照アセンブリのコレクションがあります。彼らはおおむねプラットフォームの境界に沿って落ちますが、追加のバリエーションがあります。デスクトップアプリケーションのように、フル、クライアント、またはメトロプロファイルをターゲットにすることができます。 WinRTターゲティングを有効にする参照アセンブリの重要な機能は、の種類をリダイレクトできます。その魔法は[TypeForwardedTo] attributeによって実装されています。あなたはメトロプロファイル用の.NET APIを対象とする場合

だから、あなたの参照アセンブリはFramework\.NETCoreサブディレクトリから来て、あなたはの別のセットにすべてのタイプをリダイレクトするのMscorlib.dll参照アセンブリへの参照を持っていますWinRT投影を実装するアセンブリコアのものはSystem.Runtime.dllとSystem.Runtime.WindowsRuntime.dllなどです。ポータブルクラスライブラリ機能を有効にするのと同じメカニズム。詳細はhereです。

+0

ありがとうございます!したがって、リファレンスアセンブリは、実際にはプログラムをビルドするときにのみコンパイル時に使用されますか?この背後にあるメカニズムは、私がターゲットとするプロファイルに含まれていない関数/タイプを呼び出す/参照しないことを保証します。例えば。 Silverlight? – danielovich

+0

正確に。また、「偶然による型の使用はしない」だけではなく、実行時に型を代入することもできます。 –

+0

Silverlightのリファレンスアセンブリを見ると、mscorlib(例として)はMetroまたはPortableプロファイルのmscorlibよりもサイズが大きくなります。もちろん、完全なフレームワークよりも小さい。しかし、それは、Silverlightプロファイルに関して、.NETの賢明さとは別の話だからですか? – danielovich