/// <summary> /// Asserts that the emitted IL for a type is the same as the expected IL. /// Many core library types are in different assemblies on .Net Framework, and .Net Core. /// Therefore this test is likely to fail unless you only run it only only on one of these frameworks, /// or you run it on both, but provide a different expected output string for each. /// See <see cref="ExecutionConditionUtil"/>. /// </summary> /// <param name="typeName">The non-fully-qualified name of the type</param> /// <param name="expected">The expected IL</param> public void VerifyTypeIL(string typeName, string expected) { var output = new ICSharpCode.Decompiler.PlainTextOutput(); using (var testEnvironment = RuntimeEnvironmentFactory.Create(_dependencies)) { string mainModuleFullName = Emit(testEnvironment, manifestResources: null, EmitOptions.Default); IList <ModuleData> moduleData = testEnvironment.GetAllModuleData(); var mainModule = moduleData.Single(md => md.FullName == mainModuleFullName); using (var moduleMetadata = ModuleMetadata.CreateFromImage(testEnvironment.GetMainImage())) { var peFile = new PEFile(mainModuleFullName, moduleMetadata.Module.PEReaderOpt); var metadataReader = moduleMetadata.GetMetadataReader(); bool found = false; foreach (var typeDefHandle in metadataReader.TypeDefinitions) { var typeDef = metadataReader.GetTypeDefinition(typeDefHandle); if (metadataReader.GetString(typeDef.Name) == typeName) { var disassembler = new ICSharpCode.Decompiler.Disassembler.ReflectionDisassembler(output, default); disassembler.DisassembleType(peFile, typeDefHandle); found = true; break; } } Assert.True(found, "Could not find type named " + typeName); } } AssertEx.AssertEqualToleratingWhitespaceDifferences(expected, output.ToString(), escapeQuotes: false); }
public static string PrintIL(this MethodDefinition self) { try { var textoutput = new ICSharpCode.Decompiler.PlainTextOutput(); var disasm = new ICSharpCode.Decompiler.Disassembler.ReflectionDisassembler(textoutput, true, new System.Threading.CancellationToken()); disasm.DisassembleMethod(self); return textoutput.ToString(); } catch (Exception ex) { MainClass.LogException(ex); return ex.ToString(); } }
public static string PrintCSharp(this MethodDefinition self) { try { var textoutput = new ICSharpCode.Decompiler.PlainTextOutput(); var options = new ICSharpCode.ILSpy.DecompilationOptions(); var lang = new ICSharpCode.ILSpy.CSharpLanguage(); lang.DecompileMethod(self, textoutput, options); return(textoutput.ToString()); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); Console.ForegroundColor = ConsoleColor.Gray; return(ex.Message); } }
public static string PrintCSharp(this MethodDefinition self) { try { var textoutput = new ICSharpCode.Decompiler.PlainTextOutput(); var options = new ICSharpCode.ILSpy.DecompilationOptions(); var lang = new ICSharpCode.ILSpy.CSharpLanguage(); lang.DecompileMethod(self, textoutput, options); return textoutput.ToString(); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.WriteLine(ex.StackTrace); Console.ForegroundColor = ConsoleColor.Gray; return ex.Message; } }
public static string PrintCSharp(this MethodDefinition self) { try { var textoutput = new ICSharpCode.Decompiler.PlainTextOutput(); var builder = new ICSharpCode.Decompiler.Ast.AstBuilder(new ICSharpCode.Decompiler.DecompilerContext(self.DeclaringType.Module) { CancellationToken = new System.Threading.CancellationToken(), CurrentType = self.DeclaringType, Settings = new ICSharpCode.Decompiler.DecompilerSettings() }); builder.AddMethod(self); builder.GenerateCode(textoutput); return textoutput.ToString(); } catch (Exception ex) { MainClass.LogException(ex); return ex.ToString(); } }
private static string GetCSharpCode(object source) { var output = new ICSharpCode.Decompiler.PlainTextOutput(); var language = Languages.GetLanguage("C#"); var shortDecompile = new DecompilationOptions { FullDecompilation = false }; var fullDecompile = new DecompilationOptions { FullDecompilation = true }; var assembly = source as AssemblyDefinition; if (assembly != null) { language.DecompileAssembly(assembly, "", output, shortDecompile); return(output.ToString()); } var ns = source as NamespaceDefinition; if (ns != null) { //writer.WriteNamespace(ns, output, null); //return output.ToString(); return("NOT IMPLEMENTED YET"); } var module = source as ModuleDefinition; if (module != null) { //writer.WriteModule(module, output, null); //return output.ToString(); return("NOT IMPLEMENTED YET"); } var type = source as TypeDefinition; if (type != null) { language.DecompileType(type, output, fullDecompile); return(output.ToString()); } var method = source as MethodDefinition; if (method != null) { language.DecompileMethod(method, output, fullDecompile); return(output.ToString()); } var property = source as PropertyDefinition; if (property != null) { language.DecompileProperty(property, output, fullDecompile); return(output.ToString()); } var field = source as FieldDefinition; if (field != null) { language.DecompileField(field, output, fullDecompile); return(output.ToString()); } var @event = source as EventDefinition; if (@event != null) { language.DecompileEvent(@event, output, fullDecompile); return(output.ToString()); } return("NOT IMPLEMENTED YET"); }
private static string GetCSharpCode(object source) { var output = new ICSharpCode.Decompiler.PlainTextOutput(); var language = Languages.GetLanguage("C#"); var shortDecompile = new DecompilationOptions { FullDecompilation = false }; var fullDecompile = new DecompilationOptions { FullDecompilation = true }; var assembly = source as AssemblyDefinition; if (assembly != null) { language.DecompileAssembly(assembly, "", output, shortDecompile); return output.ToString(); } var ns = source as NamespaceDefinition; if (ns != null) { //writer.WriteNamespace(ns, output, null); //return output.ToString(); return "NOT IMPLEMENTED YET"; } var module = source as ModuleDefinition; if (module != null) { //writer.WriteModule(module, output, null); //return output.ToString(); return "NOT IMPLEMENTED YET"; } var type = source as TypeDefinition; if (type != null) { language.DecompileType(type, output, fullDecompile); return output.ToString(); } var method = source as MethodDefinition; if (method != null) { language.DecompileMethod(method, output, fullDecompile); return output.ToString(); } var property = source as PropertyDefinition; if (property != null) { language.DecompileProperty(property, output, fullDecompile); return output.ToString(); } var field = source as FieldDefinition; if (field != null) { language.DecompileField(field, output, fullDecompile); return output.ToString(); } var @event = source as EventDefinition; if (@event != null) { language.DecompileEvent(@event, output, fullDecompile); return output.ToString(); } return "NOT IMPLEMENTED YET"; }