|
|
|
|
@ -326,37 +326,38 @@ namespace ICSharpCode.ILSpy
@@ -326,37 +326,38 @@ namespace ICSharpCode.ILSpy
|
|
|
|
|
AddReferenceWarningMessage(module, output); |
|
|
|
|
output.WriteLine(); |
|
|
|
|
base.DecompileAssembly(assembly, output, options); |
|
|
|
|
IAssemblyResolver assemblyResolver = assembly.GetAssemblyResolver(); |
|
|
|
|
var typeSystem = new DecompilerTypeSystem(module, assemblyResolver, options.DecompilerSettings); |
|
|
|
|
var globalType = typeSystem.MainAssembly.TypeDefinitions.FirstOrDefault(); |
|
|
|
|
if (globalType != null) { |
|
|
|
|
output.Write("// Global type: "); |
|
|
|
|
output.WriteReference(globalType, globalType.FullName); |
|
|
|
|
output.WriteLine(); |
|
|
|
|
} |
|
|
|
|
var metadata = module.Metadata; |
|
|
|
|
var corHeader = module.Reader.PEHeaders.CorHeader; |
|
|
|
|
var entrypointHandle = MetadataTokenHelpers.EntityHandleOrNil(corHeader.EntryPointTokenOrRelativeVirtualAddress); |
|
|
|
|
if (!entrypointHandle.IsNil && entrypointHandle.Kind == HandleKind.MethodDefinition) { |
|
|
|
|
var entrypoint = typeSystem.ResolveAsMethod(entrypointHandle); |
|
|
|
|
if (entrypoint != null) { |
|
|
|
|
output.Write("// Entry point: "); |
|
|
|
|
output.WriteReference(entrypoint, entrypoint.DeclaringType.FullName + "." + entrypoint.Name); |
|
|
|
|
output.WriteLine(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
output.WriteLine("// Architecture: " + GetPlatformDisplayName(module)); |
|
|
|
|
if ((corHeader.Flags & System.Reflection.PortableExecutable.CorFlags.ILOnly) == 0) { |
|
|
|
|
output.WriteLine("// This assembly contains unmanaged code."); |
|
|
|
|
} |
|
|
|
|
string runtimeName = GetRuntimeDisplayName(module); |
|
|
|
|
if (runtimeName != null) { |
|
|
|
|
output.WriteLine("// Runtime: " + runtimeName); |
|
|
|
|
} |
|
|
|
|
output.WriteLine(); |
|
|
|
|
|
|
|
|
|
// don't automatically load additional assemblies when an assembly node is selected in the tree view
|
|
|
|
|
using (options.FullDecompilation ? null : LoadedAssembly.DisableAssemblyLoad()) { |
|
|
|
|
IAssemblyResolver assemblyResolver = assembly.GetAssemblyResolver(); |
|
|
|
|
var typeSystem = new DecompilerTypeSystem(module, assemblyResolver, options.DecompilerSettings); |
|
|
|
|
var globalType = typeSystem.MainAssembly.TypeDefinitions.FirstOrDefault(); |
|
|
|
|
if (globalType != null) { |
|
|
|
|
output.Write("// Global type: "); |
|
|
|
|
output.WriteReference(globalType, globalType.FullName); |
|
|
|
|
output.WriteLine(); |
|
|
|
|
} |
|
|
|
|
var metadata = module.Metadata; |
|
|
|
|
var corHeader = module.Reader.PEHeaders.CorHeader; |
|
|
|
|
var entrypointHandle = MetadataTokenHelpers.EntityHandleOrNil(corHeader.EntryPointTokenOrRelativeVirtualAddress); |
|
|
|
|
if (!entrypointHandle.IsNil && entrypointHandle.Kind == HandleKind.MethodDefinition) { |
|
|
|
|
var entrypoint = typeSystem.ResolveAsMethod(entrypointHandle); |
|
|
|
|
if (entrypoint != null) { |
|
|
|
|
output.Write("// Entry point: "); |
|
|
|
|
output.WriteReference(entrypoint, entrypoint.DeclaringType.FullName + "." + entrypoint.Name); |
|
|
|
|
output.WriteLine(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
output.WriteLine("// Architecture: " + GetPlatformDisplayName(module)); |
|
|
|
|
if ((corHeader.Flags & System.Reflection.PortableExecutable.CorFlags.ILOnly) == 0) { |
|
|
|
|
output.WriteLine("// This assembly contains unmanaged code."); |
|
|
|
|
} |
|
|
|
|
string runtimeName = GetRuntimeDisplayName(module); |
|
|
|
|
if (runtimeName != null) { |
|
|
|
|
output.WriteLine("// Runtime: " + runtimeName); |
|
|
|
|
} |
|
|
|
|
output.WriteLine(); |
|
|
|
|
|
|
|
|
|
CSharpDecompiler decompiler = new CSharpDecompiler(typeSystem, assemblyResolver, options.DecompilerSettings); |
|
|
|
|
decompiler.CancellationToken = options.CancellationToken; |
|
|
|
|
SyntaxTree st; |
|
|
|
|
|