无法进入Nuget包

时间:2018-02-20 10:22:22

标签: visual-studio visual-studio-2017 nuget symbols symbol-server

我有一个共同的项目,我构建并创建一个nuget包,供我的其他应用程序使用。

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

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

任何人都可以帮助我吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要使用符号发布Nuget包,并使用工具 - >选项 - >调试 - >符号下的符号来引用它们。

请参阅HOW TO DEBUG A .NET CORE NUGET PACKAGE?

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

How to debug code in a nuget package created by me

<强>更新

由于您想要进入程序集中的代码,您仍需要在NuGet包中提供源代码文件和dll

我们知道:

  

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

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

因此,如果您只提供dll和.pdb文件,您仍然没有进入代码,还需要提供源代码,然后将源代码添加到调试源文件,用于引用包的解决方案:

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

如果您目前没有使用Nuspec进行打包,则需要创建Nuspec,然后将pdb添加到lib文件夹中的文件列表和src文件夹中的源文件中。 &#34; NuGet spec&#34;可能是生成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>

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

当您打开解决方案时,右键单击解决方案,选择属性...公共属性...调试源文件,添加相关二进制参考的根源目录

enter image description here

希望这有帮助。