型をパスを指定して.winmdファイルに出力したいとします。 Windows 8 Developer Previewマシンのwinmdファイルを自分の開発マシンにコピーしました。 私はコンパイル時にアセンブリをロードしようとする小さなテストアプリケーション(C#、.NET 4.0、4.5ではなく)を作成し、そのパスを渡して型を出力します。 アセンブリがロードされましたが、型を取得しようとすると例外が発生しました。ここ.winmdファイルから型を取得できません。
コードは次のとおり
static void Main(string[] args)
{
if (args.Length != 1) return;
var path = args[0];
if (!System.IO.File.Exists(path))
{
Console.WriteLine("file not found : " + path);
return;
}
var asm = System.Reflection.Assembly.LoadFrom(path); // load successful.
Console.WriteLine("loaded ");
string name = asm.GetName().Name;
Console.WriteLine(name);
System.Type[] types = asm.GetTypes(); // exception occurs here
foreach(var type in types)
{
// output type name
}
}
例外型ReflectionTypeLoadExceptionです。メッセージのプロパティは次のとおりです。要求されたタイプの1つ以上を読み込めません。詳細については、LoaderExceptions プロパティを取得してください。
基本的な例外であるTypeLoadExceptionを持つLoaderExceptionsプロパティ。メッセージのプロパティは次のように表示されます。 Runtime Impl属性が不正です。
なぜ私はタイプを読むことができないのですか?
ありがとうございました。
注:.NET 4.0を使用しています。しかし、.NET 4.5(Windows 8プレビューのもの)では、実行時にファイルからアセンブリをロードできませんでした。それを行うAssemblyクラスにはメソッドがありません。