我必须从。pdb和。dll文件中提取PDB签名。
这是我用来从.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";
}
}
[我发现可以使用PeNet nuget程序包执行提取,但是我更愿意在不安装外部依赖项的情况下实现这一目的。
而且,我设法使用dotPeek(screen)找到了所需的数据,但是由于我需要以编程方式解决问题,因此也无法解决我的问题。
我很想知道如何解决这个问题。通过使用一些内置的dotnet机制或一些智能的低级字节提取。
我设法找到了一个官方的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";
}