如何强制ASP.NET核心源码不优化

How to force ASP.NET Core source code to not be optimized

我正在尝试调试 ASP.NET 核心框架中的防伪代码。

我已经使用调试配置使用 https://github.com/dotnet/aspnetcore/blob/master/docs/BuildFromSource.md 中的说明成功构建了代码。

我已经把源码项目添加到我的测试项目中并引用了。

我已检查配置是否设置为调试。

我已确保选中“抑制 JIT 优化”。

项目属性 -> 构建中的“优化代码”未选中两个项目。

两个项目的“高级选项”(“构建”选项卡下)中的“调试信息”下拉菜单已设置为“完整”。

然而,当我在 DefaultAntiforgeryTokenSerializer.Serialize() 中遇到断点时,在 Watch window:

中查看方法的局部变量时出现此错误

Cannot obtain value of local or argument as it is not available at this instruction pointer, possibly because it has been optimized away

如何强制代码不被优化?

我正在使用 Visual Studio Enterprise 2019 v16.8.3。

将 Antiforgery 源代码项目添加到我的解决方案后,我不得不引用 C:\aspnetcore\artifacts\bin\Microsoft.AspNetCore.Antiforgery\Debug\net5.0.

中的 dll,而不是添加对 .csproj 文件的项目引用

我现在可以在 Watch 中查看局部变量的值 window。

这是一个教程: https://medium.com/gitconnected/how-to-debug-asp-net-core-source-code-448544c16473

完整说明位于 https://github.com/dotnet/AspNetCore.Docs/issues/4155

  • Un-check 在工具 -> 选项 -> 调试 -> 常规中启用仅我的代码
  • 在工具 -> 选项 -> 调试 -> 符号中启用 Microsoft 符号服务器

Microsoft 在 https://docs.microsoft.com/en-us/aspnet/core/test/debug-aspnetcore-source

上维护的完整说明