我有一个共同的项目,我构建并创建一个nuget包,供我的其他应用程序使用。
公共项目的构建过程都会创建一个nuget包,将其部署到我们的私有nuget repo并将符号推送到我们的内部符号服务器。
在我的“其他应用程序”中,在这个特定情况下是一个ASP.NET网站,我从我们的repo中提取nuget包但是当我尝试进入该程序集中的代码时,它只是跳过它。我清除了我的本地符号缓存,一旦我开始调试,VS就会从符号服务器中提取所有符号,因此我知道该位正在运行。
任何人都可以帮助我吗?
答案 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>
有关将源代码添加到调试源文件的更多详细信息:
当您打开解决方案时,右键单击解决方案,选择属性...公共属性...调试源文件,添加相关二进制参考的根源目录:
希望这有帮助。