diff --git a/ICSharpCode.Decompiler/Metadata/MetadataFile.cs b/ICSharpCode.Decompiler/Metadata/MetadataFile.cs index 410d1dc3e..f1811f491 100644 --- a/ICSharpCode.Decompiler/Metadata/MetadataFile.cs +++ b/ICSharpCode.Decompiler/Metadata/MetadataFile.cs @@ -239,23 +239,32 @@ namespace ICSharpCode.Decompiler.Metadata } } - public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false) + public MetadataFile(MetadataFileKind kind, string fileName, MetadataReaderProvider metadata, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false, MetadataStringDecoder? utf8Decoder = null) { this.Kind = kind; this.FileName = fileName; - this.Metadata = metadata.GetMetadataReader(metadataOptions); + this.Metadata = metadata.GetMetadataReader(metadataOptions, utf8Decoder); this.MetadataOffset = metadataOffset; this.IsEmbedded = isEmbedded; } - private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) + public MetadataFile(MetadataFileKind kind, string fileName, MetadataReader metadataReader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, int metadataOffset = 0, bool isEmbedded = false) + { + this.Kind = kind; + this.FileName = fileName; + this.Metadata = metadataReader; + this.MetadataOffset = metadataOffset; + this.IsEmbedded = isEmbedded; + } + + private protected MetadataFile(MetadataFileKind kind, string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null) { this.Kind = kind; this.FileName = fileName ?? throw new ArgumentNullException(nameof(fileName)); _ = reader ?? throw new ArgumentNullException(nameof(reader)); if (!reader.HasMetadata) throw new MetadataFileNotSupportedException("PE file does not contain any managed metadata."); - this.Metadata = reader.GetMetadataReader(metadataOptions); + this.Metadata = reader.GetMetadataReader(metadataOptions, utf8Decoder); } public virtual MethodBodyBlock GetMethodBody(int rva) diff --git a/ICSharpCode.Decompiler/Metadata/PEFile.cs b/ICSharpCode.Decompiler/Metadata/PEFile.cs index 40e88534d..97871e99d 100644 --- a/ICSharpCode.Decompiler/Metadata/PEFile.cs +++ b/ICSharpCode.Decompiler/Metadata/PEFile.cs @@ -35,18 +35,18 @@ namespace ICSharpCode.Decompiler.Metadata { public PEReader Reader { get; } - public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) - : this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), streamOptions), metadataOptions) + public PEFile(string fileName, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null) + : this(fileName, new PEReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), streamOptions), metadataOptions, utf8Decoder) { } - public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) - : this(fileName, new PEReader(stream, streamOptions), metadataOptions) + public PEFile(string fileName, Stream stream, PEStreamOptions streamOptions = PEStreamOptions.Default, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null) + : this(fileName, new PEReader(stream, streamOptions), metadataOptions, utf8Decoder) { } - public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default) - : base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions) + public PEFile(string fileName, PEReader reader, MetadataReaderOptions metadataOptions = MetadataReaderOptions.Default, MetadataStringDecoder? utf8Decoder = null) + : base(MetadataFileKind.PortableExecutable, fileName, reader, metadataOptions, utf8Decoder) { this.Reader = reader; }