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 @@ -209,6 +209,11 @@ namespace ICSharpCode.Decompiler.CSharp
get { return astTransforms; }
}
public CSharpDecompiler(string fileName, DecompilerSettings settings)
: this(CreateTypeSystemFromFile(fileName, settings), settings)
{
}
public CSharpDecompiler(string fileName, IAssemblyResolver assemblyResolver, DecompilerSettings settings)
: this(LoadPEFile(fileName, settings), assemblyResolver, settings)
{
@ -340,6 +345,15 @@ namespace ICSharpCode.Decompiler.CSharp @@ -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)
{
var typeSystemAstBuilder = new TypeSystemAstBuilder();

5
ICSharpCode.Decompiler/Metadata/PEFile.cs

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

Loading…
Cancel
Save