2

我有一个通用项目,我从中构建并创建了一个 nuget 包,以便在我的其他应用程序中使用。

公共项目的构建过程会创建一个 nuget 包,将其部署到我们的私有 nuget 存储库,并将符号推送到我们的内部符号服务器。

在我的“其他应用程序”中,在这种特定情况下是一个 ASP.NET 网站,我从我们的存储库中提取了 nuget 包,但是当我尝试进入该程序集中的代码时,它只是跳过它。我清除了我的本地符号缓存,一旦我开始调试 VS 从符号服务器中提取所有符号,我就知道该位正在工作。

谁能帮我?

在此处输入图像描述

4

1 回答 1

3

您需要发布带有符号的 Nuget 包,并使用 Tools->Options->Debugging->Symbols 下的 Symbols 来引用它们。

请参阅如何调试 .NET CORE NUGET 包?

其他成员之前也问过类似的问题:

如何调试我创建的 nuget 包中的代码

更新:

由于您要单步执行程序集中的代码,因此您仍然需要在 NuGet 包中提供源代码文件以及 dll

据我们所知:

符号是包含元数据的文件,这些元数据表示您的原始源代码和已由编译器翻译的机器代码之间的链接。

在 Microsoft 世界中,符号由.PDB(程序数据库)文件表示。它是调试过程的核心,因为借助这些元数据,调试工具能够将应用程序中执行的指令与原始源代码相关联,并提供断点或变量观察器等功能。

所以如果只提供 dll 和 .pdb 文件,还没有进入代码,还需要提供源代码,然后将源代码添加到引用包的解决方案的 Debug Source Files中:

有关提供源代码的更多详细信息:

如果您当前在没有 Nuspec 的情况下打包,则需要创建一个 Nuspec,然后将 pdb 添加到 lib 文件夹中的文件列表和 src 文件夹中的源文件。“NuGet 规范”可能是用于生成 NuGet 文档中定义的初始规范的有用命令。下面是我的 .nuspec 文件,你可以检查一下:

<?xml version="1.0"?>
  <package >
    <metadata>
     <id>MyTestPackage</id>
     <version>1.0.3</version>
     <authors>Admin</authors>
     <owners>Admin</owners>
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
     <description>Package description</description>
     <releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
     <copyright>Copyright 2017</copyright>
     <tags>Tag1 Tag2</tags>
   </metadata>

   <files>
     <file src="bin\Debug\MyTestPackage.dll" target="lib\Net46" />
     <file src="bin\Debug\MyTestPackage.pdb" target="lib\Net46" />
     <file src="Class1.cs" target="src" />
   </files>
</package>

有关将源代码添加到调试源文件的更多详细信息:

打开解决方案后,右键单击解决方案,选择属性...通用属性...调试源文件,然后添加相关二进制引用的根源目录

在此处输入图像描述

于 2018-02-21T07:05:19.260 回答