How to find the appropriate .pdb inside a .NET assembly?

Apparently, when the .NET assembly is created, the location of the corresponding .pdb file path is included inside. Reference link: https://msdn.microsoft.com/en-us/library/ms241613.aspx

How do I access this? I tried using ILSpy to view my assembly, but could not find it.

+4
source share
2 answers

You can use the dumpbin tool from the developer's command line, for example. cmd line like this

dumpbin /HEADERS YourAssembly.exe   

will show the path to the PDB file in the Debug Directories section like this

Microsoft (R) COFF/PE Dumper Version 14.00.24213.1
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file YourAssembly.exe

...


  Debug Directories

        Time Type        Size      RVA  Pointer
    -------- ------- -------- -------- --------
    570B267F cv           11C 0000264C      84C    Format: RSDS, {241A1713-D2EF-4838-8896-BC1C9D118E10}, 1,  
    C:\temp\VS\obj\Debug\YourAssembly.pdb

...
+1
source

.
, :)

public string GetPdbFile(string assemblyPath) 
{
    string s = File.ReadAllText(assemblyPath);

    int pdbIndex = s.IndexOf(".pdb", StringComparison.InvariantCultureIgnoreCase);
    if (pdbIndex == -1)
        throw new Exception("PDB information was not found.");

    int lastTerminatorIndex = s.Substring(0, pdbIndex).LastIndexOf('\0');
    return s.Substring(lastTerminatorIndex + 1, pdbIndex - lastTerminatorIndex + 3);
}

public string GetPdbFile(Assembly assembly) 
{
    return GetPdbFile(assembly.Location);
}
+1

Source: https://habr.com/ru/post/1650498/


All Articles