调试Nuget程序包无法工作

5

我正在尝试创建一个调试器nuget包。因此,我从"Creating symbol packages"开始。使用以下命令创建包:nuget pack PackageARM.nuspec -Symbols

PackageARM.nuspec:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
  <metadata>
    <id>PackageARM</id>
    <version>1.0.15</version>
    <authors>PackageARM</authors>
    <owners>PackageARM</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <dependencies>
      <group targetFramework=".NETStandard2.0" />
    </dependencies>
  </metadata>
  <files>
        <file src="bin\Release\netstandard2.0\*.pdb" target="lib\netstandard2.0" />
        <file src="bin\Release\netstandard2.0\*.dll" target="lib\netstandard2.0" />
        <file src="**\*.cs"  target="src" />
    </files>
</package>

并将其推送到nuget:https://www.nuget.org/packages/PackageARM/1.0.15

然后在VS 2017中取消选中启用仅我的代码,并选中启用源服务器支持。我还尝试添加符号服务器:https://www.nuget.orghttps://nuget.smbsrc.net/,但没有结果。

当我尝试使用F11从包中跟踪方法时,它只会跳转到下一行。我错过了什么?

我的pdb文件包含到.cs文件的路径,即'C:\ project \ ProjectARM \ Class1.cs',这是可以的吗?如果其他用户没有该源路径,他们如何调试?


你还没有推送符号。 - Lex Li
@LexLi 不,我已经推送了。> nuget push PackageARM.1.0.15.symbols.nupkg -source https://nuget.smbsrc.net/ 正在将PackageARM.1.0.15.symbols.nupkg推送到符号服务器(https://nuget.smbsrc.net/)... POST https://www.nuget.org/api/v2/package/create-verification-key/PackageARM/1.0.15 OK https://www.nuget.org/api/v2/package/create-verification-key/PackageARM/1.0.15 1290ms PUT https://nuget.smbsrc.net/api/v2/package/ OK https://nuget.smbsrc.net/api/v2/package/ 2631ms 您的软件包已被推送。 - Robert N. Dean
但是我无法使用命令行列出符号包:nuget.exe list PackageARM -AllVersion -Prerelease -source https://nuget.smbsrc.net,但我可以列出 Newtonsoft.Json 的符号包。你能列出来吗? - Leo Liu
不是,但我收到了“您的软件包已被推送”的消息。 - Robert N. Dean
@RobertN.Dean,是的,我注意到了您之前的评论,并且我知道您已经成功推送了那个符号包。我也成功地推送了一个自定义符号包PackageARMTest.1.0.1.symbols.nupkg,但我也无法从符号服务器中列出它,这可能是服务器的问题。我已向NuGet团队报告了此问题:https://github.com/NuGet/Home/issues/6916。为解决您的问题,我想在以下答案中提供一个解决方法,您可以检查它是否有帮助。 - Leo Liu
@RobertN.Dean,从Github收到了反馈:https://github.com/NuGet/Home/issues/6916。看起来是符号服务器的问题。你尝试过解决方法了吗?检查一下是否适用于你。 - Leo Liu
2个回答

0
如果其他用户没有源路径,他们如何进行调试?
由于您无法从符号服务器访问符号包,因此我们无法通过这种方式进行调试。我想提供一种解决方案来调试NuGet包。
  1. 将PDB和源代码文件放在NuGet包中与DLL并列的位置。
  2. 将源代码添加到引用该包的解决方案的调试源文件中。
关于步骤1的更多详细信息: 我已经检查了您在nuget.org上的NuGet包,并发现您已经将.pdb和源代码文件放在了与.dll并列的NuGet包中。 关于步骤2的更多详细信息: 当您打开一个解决方案时,请右键单击解决方案,选择属性...常规属性...调试源文件,并添加相关二进制引用的根源目录(在安装NuGet包后,在Packages文件夹中添加.cs文件的路径)。

enter image description here

更多细节请查看本讨论串


谢谢,但不适合我。 - Robert N. Dean

0

我曾经为此苦苦挣扎了很长时间。这是我发现的最简单、可重复使用的方法:

  • 获取源代码并在本地构建nuget包的Debug版本。您需要增加包版本。 希望作者提供.nuspec文件以便于构建。

创建本地nuget源:

  • 将刚刚创建的.nuget文件放置在C:\Nuget(例如)中

  • 在Visual Studio中,选择工具/选项/Nuget包管理器/包源

  • 点击绿色(+)图标。添加到上面创建的本地nuget包路径(C:\Nuget),并将该包源移动到列表顶部。

  • 对于每个项目,在解决方案中删除对外部nuget包的引用,并从本地nuget源中添加新的nuget包。

  • 开始调试,您应该能够进入nuget包的代码。

我能够在构建nuget包的源代码中设置断点,并在运行代码时使其停止。

以上所有步骤都有点繁琐,你可能需要尝试几次才能使其正常工作。

如果这对你有用,请在评论中告诉我。如果可以的话,我会感激你的点赞!:)


它对我不起作用: F11仅像往常一样跳过Nuget方法... - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接