Browse Source

Make creating CSharpDecompiler easier.

pull/1420/head
Siegfried Pammer 7 years ago
parent
commit
156728681a
  1. 14
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 5
      ICSharpCode.Decompiler/Metadata/PEFile.cs

14
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -209,6 +209,11 @@ namespace ICSharpCode.Decompiler.CSharp
get { return astTransforms; } get { return astTransforms; }
} }
public CSharpDecompiler(string fileName, DecompilerSettings settings)
: this(CreateTypeSystemFromFile(fileName, settings), settings)
{
}
public CSharpDecompiler(string fileName, IAssemblyResolver assemblyResolver, DecompilerSettings settings) public CSharpDecompiler(string fileName, IAssemblyResolver assemblyResolver, DecompilerSettings settings)
: this(LoadPEFile(fileName, settings), assemblyResolver, settings) : this(LoadPEFile(fileName, settings), assemblyResolver, settings)
{ {
@ -340,6 +345,15 @@ namespace ICSharpCode.Decompiler.CSharp
); );
} }
static DecompilerTypeSystem CreateTypeSystemFromFile(string fileName, DecompilerSettings settings)
{
var file = LoadPEFile(fileName, settings);
var resolver = new UniversalAssemblyResolver(fileName, settings.ThrowOnAssemblyResolveErrors,
file.Reader.DetectTargetFrameworkId(),
settings.LoadInMemory ? PEStreamOptions.PrefetchMetadata : PEStreamOptions.Default);
return new DecompilerTypeSystem(file, resolver);
}
TypeSystemAstBuilder CreateAstBuilder(ITypeResolveContext decompilationContext) TypeSystemAstBuilder CreateAstBuilder(ITypeResolveContext decompilationContext)
{ {
var typeSystemAstBuilder = new TypeSystemAstBuilder(); var typeSystemAstBuilder = new TypeSystemAstBuilder();

5
ICSharpCode.Decompiler/Metadata/PEFile.cs

@ -47,9 +47,8 @@ namespace ICSharpCode.Decompiler.Metadata
public PEReader Reader { get; } public PEReader Reader { get; }
public MetadataReader Metadata { get; } public MetadataReader Metadata { get; }
public PEFile(string fileName, bool metadataOnly = false) public PEFile(string fileName, PEStreamOptions options = PEStreamOptions.Default)
: this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), : this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), options))
metadataOnly ? PEStreamOptions.PrefetchMetadata : PEStreamOptions.PrefetchEntireImage))
{ {
} }

Loading…
Cancel
Save