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

时间:2015-01-03 00:17:42

标签: c#

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

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

e.g。

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符号文件才能获得此位置。

1 个答案:

答案 0 :(得分:5)

该信息存储在.PDB文件中。它有两种基本风格,一种是从Debug构建中获得的完整版本,另一种是默认情况下从Release版本中获取的剥离。剥离的.PDB删除了文件和行号信息。非常专门删除大多数公司认为专有的细节。

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

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