反射によってmscorlib 2.0.5.0(別名シルバーmscorlib)に上のタイプを取得しますか?
-
09-09-2019 - |
質問
私は私のお気に入りのプログラミングのlangauge NemerleにSilverlightのサポートを追加しようとしています。
Nemerleは、コンパイル手順で、主に2つのステップでの反射を介して、すべてのタイプをロード
1-)のアセンブリをロードするためにAssembly.LoadFromを使用します 2-)Usese Assembly.GetTypes()タイプを取得する
次に、コンパイルの最後にはReflection.Emitで解決タイプを発するます。
この手順では、Silverlightのmscorlib除くSilverlightのものも含めてすべてのアセンブリのために働きます。
C#で、これは失敗します:
var a = System.Reflection.Assembly.LoadFrom(@"c:\mscorlib.dll");
これは渡します:
var a = System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"c:\mscorlib.dll");
後者、a.GetTypesにおけるBuは()コトのSystem.Objectの親が存在しない例外をスローします。
アウト方法はありますか?
解決
あなたは、標準のCLRからのSilverlightのmscorlibを超える反映しようとしていると仮定すると、これは動作しません。 (それはそのコアの種類の解像度をひっくり返す可能性があるため、おそらくこれはある)。
この問題を回避するには、種類を検査するMono.Cecilを使用することです: http://mono-project.com/Cecil に。このライブラリは、実際には、.NETの反射よりもパフォーマンスが向上し、より強力なことになってます。
ここでは、始めるためにいくつかのコードです
AssemblyDefinition asm = AssemblyFactory.GetAssembly(@"C:\mscorlib.dll");
var types =
from ModuleDefinition m in asm.Modules
from TypeDefinition t in m.Types
select t.Name;
他のヒント
あなたはSilverlightのアセンブリでNemerleをコンパイルすることができ、その後、あなたはNemerleは、Silverlightの上で作業しています)。