我想使用mono.cecil将类型从另一个程序集导入当前模块

时间:2016-05-27 04:30:37

标签: c# cil mono.cecil

Assembly.write方法抛出以下错误

成员'XXX.LoggingAspectAttribute'在另一个模块中声明,需要导入

我在我的代码中包含了以下几行

 var type = _module.Import(typeof(LoggingAspectAttribute));
 _module.Import(type.Resolve().Methods.First(m => m.Name == "OnExecute"));
 _module.Import(type.Resolve().Methods.First(m => m.Name == "OnException"));
 _module.Import(type.Resolve().Methods.First(m => m.Name == "OnComplete"));
 _module.Import(typeof(LoggingAspectAttribute)).Resolve();

其中module被定义为程序集的主要模块

_module = ModuleDefinition.ReadModule(filename, new ReaderParameters()
        {
            ReadSymbols = true
        });

有关如何解决此错误的任何想法?

1 个答案:

答案 0 :(得分:0)

ModuleDefinition.Import()不会将任何内容导入模块,它只是从模块的角度返回对元数据的引用。

试试这个:

TypeReference type = _module.Import(typeof(LoggingAspectAttribute));
MethodReference onExecute = _module.Import(typeof(LoggingAspectAttribute).GetMethod("OnExecute"));
MethodReference onException = _module.Import(typeof(LoggingAspectAttribute).GetMethod("OnException"));
MethodReference onComplete = _module.Import(typeof(LoggingAspectAttribute).GetMethod("OnComplete"));