I can use Mono.Cecil and ICSharpCode.Decompiler to generate code for a type or assembly.
But if I try to generate the code for one method, I get the error "The reference to the object is not installed in the instance of the object."
Can you guys tell me about this? Thanks for the help.
Code to generate code for all types inside the assembly:
DirectoryInfo di = new DirectoryInfo(appPath); FileInfo[] allAssemblies = di.GetFiles("*.dll"); foreach (var assemblyFile in allAssemblies) { string pathToAssembly = assemblyFile.FullName; System.Reflection.Assembly assembly = System.Reflection.Assembly.ReflectionOnlyLoadFrom(pathToAssembly); Mono.Cecil.AssemblyDefinition assemblyDefinition = Mono.Cecil.AssemblyDefinition.ReadAssembly(pathToAssembly,parameters); AstBuilder astBuilder = null; foreach (var typeInAssembly in assemblyDefinition.MainModule.Types) { if (typeInAssembly.IsPublic) { Console.WriteLine("T:{0}", typeInAssembly.Name);
Code to generate code for all public methods inside the assembly:
DirectoryInfo di = new DirectoryInfo(appPath); FileInfo[] allAssemblies = di.GetFiles("*.dll"); foreach (var assemblyFile in allAssemblies) { string pathToAssembly = assemblyFile.FullName; System.Reflection.Assembly assembly = System.Reflection.Assembly.ReflectionOnlyLoadFrom(pathToAssembly); Mono.Cecil.AssemblyDefinition assemblyDefinition = Mono.Cecil.AssemblyDefinition.ReadAssembly(pathToAssembly,parameters); AstBuilder astBuilder = null; foreach (var typeInAssembly in assemblyDefinition.MainModule.Types) { if (typeInAssembly.IsPublic) { Console.WriteLine("T:{0}", typeInAssembly.Name); foreach (var method in typeInAssembly.Methods) {
source share