获取程序集的原始源代码位置

Tug*_*ain 5 c#

有没有办法通过反射获取程序集的原始源代码位置的位置?

警告,我不是在寻找程序集的当前位置,而是在编译时位置是源代码.

例如

Given: myAssembly.dll
   c:\program files\myapp\myAssembly.dll <- I'm NOT looking for this location. This is its current location.
   d:\dev\myapp\main.cs <- this is the location I want; the location were the source code resided when it was compiled
Run Code Online (Sandbox Code Playgroud)

我从这开始,但到目前为止我还没有找到哪个兔子洞来获取这些信息.

Assembly.GetExecutingAssembly().GetType("myAssembly.Main").<something>
Run Code Online (Sandbox Code Playgroud)

当.Net中出现异常时,您经常会看到抛出异常的类的名称以及原始源代码文件的完整路径.这就是我所追求的.我意识到可能需要.pdb符号文件才能获得此位置.

Han*_*ant 5

该信息存储在.PDB文件中.有它的两种基本形式,完全一个你从调试版本和得到剥离一个你默认情况下从发布版本获得.剥离的.PDB删除了文件和行号信息.非常专门删除大多数公司认为专有的细节.

Project + Properties,Build选项卡,Advanced按钮,Debug Info设置此项."Full"是正常的Debug构建设置,"pdb-only"是生成剥离版本的默认Release构建设置.

DbgHelp api支持读取.PDB文件,这是本机风格. DIA SDK为它提供了更友好的COM包装器,也是C#的常用选择.CLR也使用它,这就是你如何在异常的堆栈跟踪中看到文件+行.