オープンエミストアセンブリ生成コードは、リフレクターではない場合は空のように見えます。

StackOverflow https://stackoverflow.com/questions/3962955

質問

単一のクラスを含むReflection.emitを使用して動的なアセンブリを生成しています。 BadImageExceptionを引き起こしているバグがあります。これを解決するには、コンパイルされたコードを表示する必要があるため、ダイナミックアセンブリをディスクに保存しています。

私はすでに、エラーがないと考えているアセンブリに対してPeverifyを試してみました。私は今、リフレクターで生成されたコードを見たいと思っていますが、アセンブリは空のように見えます(そうではないことはわかっています)。

なぜこれが起こっているのかという考えはありますか?

var assemblyName = new AssemblyName("An.Assembly");
var appDomain = Thread.GetDomain();
var assemblyBuilder = appDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave);
var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);
var typeBuilder = moduleBuilder.DefineType("MyClass", TypeAttributes.Public | TypeAttributes.Class);
... 
typeBuilder.CreateType();
assemblyBuilder.Save("temp.dll");

ちなみに、私はすでに使用しています Relection.Emit この問題に役立たないリフレクター用プラグイン。

役に立ちましたか?

解決

交換:

var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name);

と:

var moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, "yourfilename.dll");

次に、現在のディレクトリ、おそらくビンフォルダーで探してください。アセンブリとモジュールは技術的には2つの別個のエンティティであり、モジュール情報(すべてのコードが存続する場合)ではなく、アセンブリ情報のみを保存します。 (もちろん、同じファイル名で両方に名前を付けないでください。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top