Я хочу импортировать тип из другой сборки в текущий модуль, используя 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 = ModuleDefinition.ReadModule(filename, new ReaderParameters()
        {
            ReadSymbols = true
        });

Любые идеи о том, как исправить эту ошибку?


person Vasudha Gupta    schedule 27.05.2016    source источник
comment
Вот пользователь с аналогичной проблемой, использующий Mono.cecil: stackoverflow.com/questions/34879710/.   -  person Ash    schedule 27.05.2016
comment
Из этого вопроса неясно, как решить мою проблему.   -  person Vasudha Gupta    schedule 27.05.2016
comment
@VasudhaGupta попробуй удалить последнюю строку _module.Import(typeof(LoggingAspectAttribute)).Resolve();   -  person Dudi Keleti    schedule 27.05.2016
comment
@dudiKeleti Даже после удаления остается та же ошибка.   -  person Vasudha Gupta    schedule 27.05.2016
comment
@VasudhaGupta Используете ли вы импортированный метод? Можете ли вы показать нам полный код?   -  person Dudi Keleti    schedule 27.05.2016
comment
Вот код, который я использую.. github.com/scmccart/Reweave.. Когда я пытаюсь поставить LoggerAspectAttribute в другую сборку - Reweave.Core выдает ошибку в методе Assembly.write.   -  person Vasudha Gupta    schedule 29.05.2016
comment
Возможно, взгляните на этот репозиторий git, он очень похож.   -  person Markus    schedule 03.06.2016


Ответы (1)


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"));
person Mr Anderson    schedule 16.06.2016