如何在调试时让Visual Studio使用嵌入式源代码?

Dan*_*ars 14 c# visual-studio pdb-files .net-core

我已经使用<EmbedAllSources>csproj文件中的元素将C#源代码嵌入到可移植的PDB文件中,并且使用在PDB中使用新csproj嵌入C#源中<DebugType>embedded<DebugType>所述将pdb嵌入到程序集中

我的装配看起来像这样:

<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>    
    <EmbedAllSources>true</EmbedAllSources>
    <DebugSymbols>true</DebugSymbols>
    <DebugType>embedded</DebugType>   
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我可以确认pdb是可移植的类型,并包含我的源代码:

在此输入图像描述

根据Visual Studio 15.5的发行说明,调试器应该能够在调试期间使用这些文件:

https://docs.microsoft.com/en-us/visualstudio/releasenotes/vs2017-relnotes-v15.5#EmbeddedSource

我正在使用Visual Studio 2017(版本号15.8.8)

但是,当我F11进入我的程序集的代码时,它要求源代码:

在此输入图像描述

虽然谷歌上搜索了ctaggart在讨论中的评论https://github.com/ctaggart/SourceLink/issues/192,其中说运行sourcelink print-urls将打印"embed"但是我的不是,也许这是一个暗示:

在此输入图像描述

有人有这个成功的工作?如果是这样你能说出我做错了吗?

Mag*_*1um 2

最简单的方法是去:

Debug -> Windows -> Modules

在此列表中,您应该能够找到您的程序集(dll/exe)。

Right click it -> Load Symbols

它会询问从哪里加载符号。

导航到匹配的 .pdb 文件所在的目录。

它应该自动加载。进入此引用的程序集中或有未捕获的错误应该会触发该代码中的中断,或者要求您导航到与引发错误的文件相对应的代码文件。

在我们的过程中,我们通常必须导航到 nuget 缓存来查找已安装的 nuget 包的 pdb。 (%UserProfile%/nuget/packages/YourPackage/VersionNumber/../..)

我们还将源代码与这些包一起打包并导航到这些/nuget/packages .cs文件,但是任何corresponding .cs文件都应该允许它加载。

  • 没有 PDB 文件。OP 使用 PDB 的嵌入式选项,因此它实际上位于 exe 或 dll 中。 (2认同)