当反射器没有时,打开的发射程序集生成的代码在反射器中显示为空。

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

我正在使用Reflection.emit生成动态组件,其中包括一个类。我有一个引起BadimageException的错误。为了解决此问题,我需要查看编译的代码,因此我将动态组件保存到磁盘上。

我已经尝试过与集会的同性恋,这似乎没有错误。我现在想在反射器中查看生成的代码,但是总成看起来为空(我知道不是)。

知道为什么会发生这种情况吗?

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");

然后在当前目录中查找它,可能是您的bin文件夹。从技术上讲,组件和模块是两个独立的实体,您只保存组装信息,而不是模块信息(所有代码寿命)。 (另外,当然不要用相同的文件名来命名它们。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top