如何调试Release模式编译的ASP.NET Core类库及使用其源码?
我之前刚好跟你有一样的需求——想在Release模式下调试ASP.NET Core的官方代码,甚至改源码加调试输出,给你整理两个最实用的方案:
方案一:直接启用官方源码调试(无需自行编译)
这个方案适合只是想查看Release模式下的字段、属性,不需要修改源码的情况:
- 打开Visual Studio,点「工具」→「选项」→「调试」→「符号」
- 勾选「Microsoft符号服务器」,第一次启动调试时会下载符号文件,可能有点慢,耐心等就行
- 切到「调试」→「通用」选项卡,取消勾选「启用仅我的代码」,同时把「启用源服务器支持」和「启用源链接支持」勾上
- 现在不管是Debug还是Release模式启动调试,当代码走到ASP.NET Core的官方库代码时,Visual Studio会自动加载对应的源码和符号,你就能查看字段、属性,甚至单步调试了
方案二:克隆并编译源码(支持修改源码调试)
如果需要改官方源码(比如加Console.WriteLine()辅助调试),就得自己编译源码了:
- 用git克隆ASP.NET Core的官方源码仓库,命令是:
git clone https://github.com/dotnet/aspnetcore.git - 进入仓库目录,根据你的系统跑编译命令:
- Windows:运行
build.cmd -c Release(加-v minimal可以减少冗余输出,加快编译) - Linux/macOS:运行
./build.sh -c Release
注意:要确保你的电脑装了对应版本的.NET SDK,仓库根目录的说明里会列清楚需要的依赖
- Windows:运行
- 编译完后,在你的ASP.NET Core项目里配置本地NuGet源:
- 在项目根目录新建或修改
NuGet.config,加上本地编译的输出源:<configuration> <packageSources> <add key="AspNetCoreLocal" value="你本地aspnetcore仓库路径/artifacts/packages/Release/Shipping" /> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> </packageSources> </configuration>
- 在项目根目录新建或修改
- 修改你的项目文件(.csproj),把所有Microsoft.AspNetCore.*相关包的版本改成你编译的版本号(比如你编译的是8.0.1,就把版本统一改成8.0.1)
- 重新恢复NuGet包,现在你的项目就会用本地编译的DLL了。你改完源码后重新编译,调试时就能看到你加的
Console.WriteLine()输出,所有字段和属性也都能自由查看
额外小贴士
- 不用一次性编译全部源码:ASP.NET Core是模块化的,如果你只需要调试某个模块(比如Mvc),可以单独编译这个模块,命令比如
build.cmd -c Release --projects src/Microsoft.AspNetCore.Mvc/Microsoft.AspNetCore.Mvc.csproj,这样会快很多 - 调试时如果遇到源码不匹配,检查一下符号文件有没有正确加载,或者清理项目的bin/obj目录后重新生成
内容的提问来源于stack exchange,提问作者sanjihan
相关产品推荐
相关产品推荐

