Visual Studio 如何调试我创建的NuGet包中的代码

icomxhvb  于 2022-11-17  发布在  其他
关注(0)|答案(7)|浏览(480)

我在另一个解决方案中创建并安装了一个NuGet包,但现在我需要在从新的解决方案调用时调试该包的代码。
我尝试引用包的解决方案,但不起作用。
我使用的是Visual Studio 2013。

col17t5w

col17t5w1#

若要两柴任何dll,您需要它的符号档(.pdb)。如果您在debug组态中建置项目,您会看到这些档案已产生并放置在建置输出文件夹中。
Visual studio从不同的位置加载这些符号文件,如here所述。调试nuget包最简单的方法是将包的.pdb文件放在要调试的项目的生成输出文件夹中。
如果您尝试调试的代码被归类为非用户代码,则需要在调试选项中***取消选中***Just My Code

下面引用的Microsoft - Visual Studio Docs说明了什么是用户代码,什么是非用户代码。

用户和非用户代码

为了区分使用者程式码与非使用者程式码,Just My Code会查看符号(.pdb)档和程式最佳化。当二进制档已最佳化或.pdb档无法使用时,调试工具会将程式码视为非使用者程式码。
三个属性也会影响调试工具视为My Code的项目:

  • DebuggerNonUserCodeAttribute告诉调试工具,它所套用的程式码不是My Code。
  • DebuggerHiddenAttribute会对调试工具隐藏程式码,即使关闭[仅我的程式码]也是如此。
  • DebuggerStepThroughAttribute告诉调试器单步执行它所应用到的代码,而不是单步执行代码。

所有其他代码都被视为用户代码。
更详细的答案可以在on my blog中找到。

xzabzqsa

xzabzqsa2#

对于Visual Studio 2017和托管在GitHub或BitBucket上的nuget包源代码:
1.启用 *.csproj文件中的完整调试信息:

<PropertyGroup Condition="'$(Configuration)'=='Debug'">
  <DebugType>full</DebugType>
  <DebugSymbols>true</DebugSymbols>
</PropertyGroup>

或右键单击“项目属性”>“生成”>“高级”>“输出调试信息”-设置为“完全”。
1.要为nuget包dll启用自动源代码下载和单步执行,请将nuget包SourceLink.Create.CommandLine添加到项目中,或手动将其添加到 *.csproj文件中:

<ItemGroup>
  <PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.2" PrivateAssets="All" /> 
</ItemGroup>

更多信息here
1.在“工具”-“选项”-“调试”中,禁用“仅启用我的代码”,并启用“在模块加载时禁止JIT优化(仅限托管)"。
在此之后,您应该能够单步执行nuget包dll中的方法。

lx0bsm1f

lx0bsm1f3#

我通过在调试模式下构建nuget包的来源项目,然后将pdb和dll从调试目录复制到我想在其中调试它的项目中的nuget dll的位置来实现这一点。
例如,复制自
外部核包\bin\调试

项目目录\包\外部核包.1.0.0\lib\net4.5

dffbzjpn

dffbzjpn4#

如何调试我创建的nuget包中的代码
正如NtFreX回答的那样:“* 要调试任何dll,您需要它的符号文件(.pdb)。“。因此,您可以创建符号包,使使用者能够在Visual Studio调试器中单步执行包代码。
我们的工作方式:
1.创建“
.符号.nupkg”。
1.将符号包部署到SymbolSource服务器。
1.配置IDE,包使用者可以将https://nuget.smbsrc.net/添加到Visual Studio中符号源
1.使用NuGet(从我们的SymbolSource服务器)将所需的库添加到项目。

  1. debugging 。
    详细信息请参考Creating symbol packages
    如果这些软件包不适合在NuGet Gallery/SymbolSource上发布,您可以将 *.nupkg和 *.symbols.nupkg文件放在本地磁盘上。
    注意:将源代码添加到引用该包的解决方案的调试源文件中(右键单击“解决方案”,选择“属性...公共属性...调试源文件”,然后添加相关二进制引用的根源目录)
0yg35tkg

0yg35tkg5#

有一个简单得多的解决方案:

只需在dll中嵌入调试符号。更新您的nupkg,瞧!

tpxzln5u

tpxzln5u6#

因为它可能会帮助其他人,这里是一个额外的解释问题在手。
调试我创建的pkg需要什么?
1.正如这里的其他人所说。.pdb 文件。
1.同样,源代码here所表示。
那么,我如何包括我的nuget包的源代码呢?

  • 我必须包括符号包。这个答案here告诉我如何。
ctehm74n

ctehm74n7#

我在调试模式下打包了这个包,并从我的本地NuGet源代码安装了它。然后,当你调试的时候,你可以进入你的库。你可以添加你的NuGet本地源代码,它指向Tools -> Options -> Nuget Package Manager -> Package Sources中你的本地文件夹。

相关问题