diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index 2658cacf3..ffe03fb71 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -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 ); } + 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(); diff --git a/ICSharpCode.Decompiler/Metadata/PEFile.cs b/ICSharpCode.Decompiler/Metadata/PEFile.cs index 7eb5278b1..0b52d9347 100644 --- a/ICSharpCode.Decompiler/Metadata/PEFile.cs +++ b/ICSharpCode.Decompiler/Metadata/PEFile.cs @@ -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)) { }