如何使用Cecil从C#中的类型中删除方法?

如何使用Cecil从C#中的类型中删除方法?,c#,mono.cecil,C#,Mono.cecil,我有一个程序集,它包含一个名为EncryptedStrings的类型,其中有一个名为DecryptString的方法。我想从类型中删除这个方法,然后写回修改过的程序集。我为此编写了以下非常简单的代码: var file = @"path-to-file.exe"; // load assembly var ass = AssemblyDefinition.ReadAssembly(file); // find the type var type = ass.MainModule.GetTyp

我有一个程序集,它包含一个名为
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:成员“System.String DecryptString(System.String)”在另一个模块中声明,需要导入

我不知道它想从我这里得到什么。。。该方法是在该模块中定义的,那么我应该导入什么


我应该怎么做才能解决这个问题并从类型中删除该方法?

结果表明这是一个noob错误:当您删除程序集中其他地方使用的方法时,会出现此错误。当Cecil发现一些其他代码试图使用该方法时,它无法找到它的实现(因为您删除了它),因此它认为这是来自另一个程序集的方法,只是没有正确导入,因此会出现此错误。

您所说的“删除该方法”是什么意思?程序集一旦编译就不能更改。你到底想要实现什么?听起来像个XY问题。为什么你认为你需要这个?我的意思是使用Cecil编辑编译的程序集并从类型中删除该方法(它在任何地方都没有使用)为什么你需要这个?我正在尝试对一个C#库进行除臭,我想在一个简单的示例中测试删除方法,因此,我可以使用相同的代码删除只用于混淆的方法和类型,而这些方法和类型在任何地方都没有被引用。因此,在任何人建议之前,De4Deobfousator之类的除臭剂都无法自动执行此操作