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

本文关键字:源代码 位置 原始 程序集 获取 | 更新日期: 2023-09-27 18:35:55

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

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

例如

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

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

Assembly.GetExecutingAssembly().GetType("myAssembly.Main").<something>

当 .Net 中发生异常时,通常会看到引发异常的类的名称以及原始源代码文件的完整路径。这就是我所追求的。我意识到可能需要一个.pdb符号文件才能获取此位置。

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

该信息存储在 .PDB 文件。 它有两种基本风格,一种是从调试版本获得的完整风格,另一种是从发布版本默认获得的剥离风格。 剥光了.PDB 已删除文件和行号信息。 非常专门用于删除大多数公司认为专有的细节。

"项目 + 属性"、"生成"选项卡、"高级"按钮、"调试信息"设置此项。 "完整"是正常的调试版本设置,"仅 pdb"是生成剥离版本的默认发布版本设置。

正在阅读 .PDB 文件受 DbgHelp api(本机风格)支持。 DIA SDK 为其提供了更友好的 COM 包装器,也是 C# 的常用选择。 CLR 也使用它,这就是在异常的堆栈跟踪中查看文件+行的方式。