Сейчас на форуме: (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Использование Mono.Cecil - импорт типа
Посл.ответ Сообщение

Ранг: 9.6 (гость), 5thx
Активность: 0.010
Статус: Участник

Создано: 07 августа 2010 23:40
· Личное сообщение · #1

Приветсвую, уважаемые форумчане.
насколько мне представляется, dll-ка Mono.Cecil позволяет импортировать в скомпиленую сборку свой тип (класс). Хотелось бы увидеть пример кода, как это делается. Суть проста - класс с лицензией копируется в свой проект на C# например, изменяется, компилируется. В оригинальной сборке класс удаляется и импортируется свой "скорректированный", чтоб не заморачиваться с редактированием на уровне IL-кода.
Делал вот таким образом:
Code:
  1. static void ImportType(string source, string importsource)
  2.         {
  3.             try
  4.             {
  5.                 var asm = AssemblyFactory.GetAssembly(source);
  6.                 TypeDefinition newtype = AssemblyFactory.GetAssembly(importsource).MainModule.Types.Cast<TypeDe finition>().
  7.                     FirstOrDefault(=> t.Name == "Status");
  8.                 TypeDefinition status = asm.MainModule.Types.Cast<TypeDefinition>().
  9.                     FirstOrDefault(=> t.Name == "Status");
  10.                 if (status != null)
  11.                 {
  12.                     asm.MainModule.Types.Remove(status);
  13.                     asm.MainModule.Types.Add(newtype.Clone());
  14.                 }
  15.                 AssemblyFactory.SaveAssembly(asm, source);
  16.             }
  17.             catch (Exception ex)
  18.             {
  19.                 Console.WriteLine("ImportType Error! {0}", Path.GetFileNameWithoutExtension(source));
  20.                 Console.WriteLine(ex.Message);
  21.  
  22.             }
  23.         }

но затем в рефлекторе идут сплошные ошибки - дерево классов не отображается.


 eXeL@B —› Вопросы новичков —› Использование Mono.Cecil - импорт типа
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати