mirror of https://github.com/icsharpcode/ILSpy.git
2 changed files with 1 additions and 80 deletions
@ -1,79 +0,0 @@
@@ -1,79 +0,0 @@
|
||||
--- |
||||
uti: com.xamarin.workbook |
||||
id: de255e90-ba7b-4070-be45-65e544ae8219 |
||||
title: DecompilerPackageDemos |
||||
platforms: |
||||
- DotNetCore |
||||
packages: |
||||
- id: ICSharpCode.Decompiler |
||||
version: 7.0.0.6488 |
||||
--- |
||||
|
||||
Setup: load the references required to work with the decompiler |
||||
|
||||
```csharp |
||||
#r "ICSharpCode.Decompiler" |
||||
#r "System.Reflection.Metadata" |
||||
|
||||
using System.Reflection.Metadata; |
||||
using ICSharpCode.Decompiler; |
||||
using ICSharpCode.Decompiler.CSharp; |
||||
using ICSharpCode.Decompiler.Metadata; |
||||
using ICSharpCode.Decompiler.TypeSystem; |
||||
|
||||
// Version sanity check |
||||
Console.WriteLine(typeof(FullTypeName).Assembly.GetName()); |
||||
``` |
||||
|
||||
You must have compiled **frontends.sln** first (run “dotnet build” in ICSharpCode.Decompiler.PowerShell folder) |
||||
|
||||
```csharp |
||||
string workbookBasePath = System.IO.Directory.GetCurrentDirectory(); |
||||
string fileName = System.IO.Path.Combine(workbookBasePath, "ICSharpCode.Decompiler.PowerShell", "bin", "Release", "netstandard2.0", "ICSharpCode.Decompiler.dll"); |
||||
var decompiler = new CSharpDecompiler(fileName, new DecompilerSettings()); |
||||
``` |
||||
|
||||
Get the count of types in this module |
||||
|
||||
```csharp |
||||
var types = decompiler.TypeSystem.MainModule.TypeDefinitions; |
||||
Console.WriteLine(types.Count()); |
||||
``` |
||||
|
||||
Decompile a known type (as a whole) |
||||
|
||||
```csharp |
||||
// ICSharpCode.Decompiler.Util.Empty<T> -> translates to `n, where n is the # of generic parameters |
||||
var nameOfGenericType = new FullTypeName("ICSharpCode.Decompiler.Util.Empty`1"); |
||||
Console.WriteLine(decompiler.DecompileTypeAsString(nameOfGenericType)); |
||||
``` |
||||
|
||||
If you want to decompile one single member (sample: first method) |
||||
|
||||
```csharp |
||||
var nameOfUniResolver = new FullTypeName("ICSharpCode.Decompiler.Metadata.UniversalAssemblyResolver"); |
||||
ITypeDefinition typeInfo = decompiler.TypeSystem.FindType(nameOfUniResolver).GetDefinition(); |
||||
var tokenOfFirstMethod = typeInfo.Methods.First().MetadataToken; |
||||
Console.WriteLine(decompiler.DecompileAsString(tokenOfFirstMethod)); |
||||
``` |
||||
|
||||
If you need access to low-level metadata tables |
||||
|
||||
```csharp |
||||
ITypeDefinition type = decompiler.TypeSystem.FindType(nameOfUniResolver).GetDefinition(); |
||||
var module = type.ParentModule.PEFile; |
||||
``` |
||||
|
||||
Get the child namespaces |
||||
|
||||
```csharp |
||||
var icsdns = decompiler.TypeSystem.RootNamespace; |
||||
foreach (var ns in icsdns.ChildNamespaces) Console.WriteLine(ns.FullName); |
||||
``` |
||||
|
||||
Get types in a single namespace |
||||
|
||||
```csharp |
||||
// ICSharpCode.Decompiler.TypeSystem is the first namespace |
||||
var typesInNamespace = icsdns.ChildNamespaces.First().Types; |
||||
``` |
Loading…
Reference in new issue