オープンエミストアセンブリ生成コードは、リフレクターではない場合は空のように見えます。
-
09-10-2019 - |
質問
単一のクラスを含む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つの別個のエンティティであり、モジュール情報(すべてのコードが存続する場合)ではなく、アセンブリ情報のみを保存します。 (もちろん、同じファイル名で両方に名前を付けないでください。)
所属していません StackOverflow