/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Test/Core/Metadata/ModuleData.cs
108 строк
3 KB
Julien Couvreur
Merge pull request #37994 from jcouv/il-verify2
11 фев 2022, 08:32
Не верифицирован
11 фев 2022, 08:32
262a650
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.Immutable; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CodeGen; using Microsoft.CodeAnalysis.Emit; using Roslyn.Utilities; namespace Roslyn.Test.Utilities { public readonly struct ModuleDataId { public string SimpleName { get; } public string FullName { get; } public Guid Mvid { get; } public ModuleDataId(Assembly assembly, Guid mvid) { SimpleName = assembly.GetName().Name; FullName = assembly.FullName; Mvid = mvid; } public ModuleDataId(string simpleName, string fullName, Guid mvid) { SimpleName = simpleName; FullName = fullName; Mvid = mvid; } public override string ToString() { return $"{FullName} - {Mvid}"; } } [DebuggerDisplay("{GetDebuggerDisplay()}")] public sealed class ModuleData { public readonly ModuleDataId Id; public readonly OutputKind Kind; public readonly ImmutableArray<byte> Image; public readonly ImmutableArray<byte> Pdb; public readonly bool InMemoryModule; public readonly bool IsCorLib; public string SimpleName => Id.SimpleName; public string FullName => Id.FullName; public Guid Mvid => Id.Mvid; public ModuleData(string netModuleName, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule, bool isCorLib) { this.Id = new ModuleDataId(netModuleName, netModuleName, GetMvid(image)); this.Kind = OutputKind.NetModule; this.Image = image; this.Pdb = pdb; this.InMemoryModule = inMemoryModule; this.IsCorLib = isCorLib; } public ModuleData(AssemblyIdentity identity, OutputKind kind, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule, bool isCorLib) { this.Id = new ModuleDataId(identity.Name, identity.GetDisplayName(), GetMvid(image)); this.Kind = kind; this.Image = image; this.Pdb = pdb; this.InMemoryModule = inMemoryModule; this.IsCorLib = isCorLib; } public ModuleData(ModuleDataId id, OutputKind kind, ImmutableArray<byte> image, ImmutableArray<byte> pdb, bool inMemoryModule, bool isCorLib) { this.Id = id; this.Kind = kind; this.Image = image; this.Pdb = pdb; this.InMemoryModule = inMemoryModule; this.IsCorLib = isCorLib; } private static Guid GetMvid(ImmutableArray<byte> image) { using (var metadata = ModuleMetadata.CreateFromImage(image)) { return metadata.GetModuleVersionId(); } } private string GetDebuggerDisplay() { return FullName + " {" + Mvid + "}"; } } }