是否可以在堆栈跟踪中获取NuGet包代码对应的行号?
实现.NET应用引用的NuGet包代码在堆栈跟踪显示行号的方法
堆栈跟踪的行号依赖程序对应的PDB(程序数据库)文件解析得到,要显示NuGet包内代码的行号,可根据你是否为包的维护者选择对应方案:
如果你是该NuGet包的维护者
直接修改包项目的编译配置,让包自带调试信息即可,编辑包项目的.csproj文件,添加如下配置:
<PropertyGroup> <!-- Release模式下也生成调试符号 --> <DebugSymbols>True</DebugSymbols> <!-- 选择embedded可将PDB直接嵌入dll文件,使用者无需额外处理即可读取调试信息 --> <!-- 也可设置为portable,将PDB作为独立文件和dll一同打包进NuGet包的lib目录 --> <DebugType>embedded</DebugType> </PropertyGroup>
重新编译打包发布后,使用者安装对应版本的包,运行时堆栈就能自动显示包内代码的行号。
如果你仅使用第三方NuGet包,无法修改包的编译逻辑
- 首先关闭调试的「仅我的代码」限制:在开发IDE的调试设置中,取消勾选「启用仅我的代码」选项,允许调试器加载第三方代码的符号文件
- 配置符号加载源:若NuGet包的发布方提供了公开符号服务器,可在调试设置的符号路径中添加对应源,调试时会自动下载匹配版本的PDB文件
- 若没有公开的符号源,可使用反编译工具生成对应版本NuGet包的PDB文件,将PDB放到应用运行目录下和对应dll同路径,也可实现行号解析
- 生产环境需要显示行号时,只需将对应PDB文件和应用的dll一同部署即可。
内容的提问来源于stack exchange,提问作者BigNull
相关产品推荐
相关产品推荐

