Как удалить метод из типа C# с помощью Cecil? - PullRequest
0 голосов
/ 29 января 2020

У меня есть сборка, которая содержит тип с именем EncryptedStrings, и внутри него есть метод с именем DecryptString. Я хотел удалить этот метод из типа и записать измененную сборку обратно. Я написал для него очень простой код:

var file = @"path-to-file.exe";

// load assembly
var ass = AssemblyDefinition.ReadAssembly(file);

// find the type
var type = ass.MainModule.GetType("EncryptedStrings");

// find the method in the type
var method = type.Methods.First(meth => meth.Name == "DecryptString");

// remove the method
type.Methods.Remove(method);

// write assembly back
ass.Write("fixed.exe");

Однако, когда я запускаю этот код, я получаю исключение, говорящее:

System.ArgumentException: Member 'System.String DecryptString (System.String) 'объявлен в другом модуле и должен быть импортирован

Я понятия не имею, что он хочет от меня ... Метод определен в этом модуле, так что я предполагается импортировать?

Что мне нужно сделать, чтобы исправить это и удалить метод из типа?

1 Ответ

0 голосов
/ 29 января 2020

Оказывается, это была ошибка noob: эта ошибка появляется, когда вы удаляете метод, который используется в другом месте сборки. Когда Сесил находит какой-то другой код, пытающийся использовать этот метод, он не может найти свою реализацию (потому что вы удалили его), поэтому он думает, что это метод из другой сборки, который просто не был должным образом импортирован, и, таким образом, выдает эту ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...