Извлечение подписи PDB из файла DLL - PullRequest
0 голосов
/ 13 января 2020

Я должен извлечь подпись PDB из файла .pdb и .dll .

Это код, который я использую для извлечения его из файла .pdb. К сожалению, я не нашел похожего способа извлечь его из DLL.

        public static string GetPdbSignature(string pdbFilePath)
        {
            using (var pdbFileStream = File.OpenRead(pdbFilePath))
            {
                var metadataProvider = MetadataReaderProvider.FromPortablePdbStream(pdbFileStream);
                var metadataReader = metadataProvider.GetMetadataReader();
                var id = new BlobContentId(metadataReader.DebugMetadataHeader.Id);

                return $"{id.Guid.ToString("N")}ffffff";
            }
        }

Я обнаружил, что для выполнения извлечения можно использовать пакет nuget P eNet, но пока Я бы предпочел добиться этого без установки внешних зависимостей.

Кроме того, мне удалось найти нужные данные с помощью dotPeek ( screen ), но, поскольку мне нужно решить проблему программно, это не решает и мою проблему

Буду признателен за любую подсказку, как решить эту проблему. Либо с помощью некоторого встроенного механизма do tnet, либо с помощью какого-то умного низкоуровневого извлечения байтов.

1 Ответ

2 голосов
/ 13 января 2020

Мне удалось найти официальный пакет Microsoft - Microsoft.Diagnostics.Tracing.TraceEvent , который содержит PEFile класс, позволяющий извлечь точные данные, которые мне нужны.

public static string GetDllSignature(string dllFilePath)
{
    var peFile = new PEFile.PEFile(dllFilePath);
    peFile.GetPdbSignature(out string pdbName, out Guid pdbGuid, out int pdbAge);

    return $"{pdbGuid.ToString("N")}ffffff";
}
...