我有一个我在另一个解决方案中创建并安装的nuget包但现在我需要在从我的新解决方案调用时调试包的代码。
我尝试引用该软件包的解决方案,但无效。
我正在使用Visual Studio 2013。
答案 0 :(得分:18)
要调试任何dll,您需要它的符号文件(.pdb)。如果您在debug
配置中构建项目,您将看到生成这些文件并将其放入构建输出文件夹中。
Visual Studio从here描述的不同位置加载那些符号文件。但调试nuget包的easyies方法是将包的.pdb文件放在要调试的项目的build output文件夹中。
如果您尝试调试的代码被归类为非用户代码,则需要在调试选项中 取消选中 Just My Code
。
用户和非用户代码
为了区分用户代码和非用户代码,Just My Code查看符号(.pdb)文件和程序优化。当优化二进制文件或.pdb文件不可用时,调试器会将代码视为非用户代码。
三个属性也会影响调试器认为是我的代码:
所有其他代码都被视为用户代码。
答案 1 :(得分:7)
如何在我创建的nuget包中调试代码
正如NtFreX回答的那样," 要调试任何dll,你需要它的符号文件(.pdb)。"。因此,您可以创建符号包,使消费者可以在Visual Studio调试器中单步执行包代码。
我们这样做(并且有效):
有关详细信息,请参阅Creating symbol packages。
如果这些软件包不适合在NuGet Gallery / SymbolSource上发布,您可以将* .nupkg和* .symbols.nupkg文件放在本地磁盘上。
注意:将源代码添加到引用包的解决方案的调试源文件中(右键单击Solution,选择Properties ... Common Properties ... Debug Source Files,并添加相关的根源目录二进制参考)
答案 2 :(得分:5)
我通过构建nuget包来源于调试模式的项目,然后只是将pdb和dll从调试目录复制到我想调试它的项目中的nuget dll的位置。
例如从
复制ExternalNugetPackage \ BIN \调试\
到
ProjectDirectory \软件包\ ExternalNugetPackage.1.0.0 \ lib中\ NET4.5
答案 3 :(得分:3)
对于Visual Studio 2017和托管在GitHub或BitBucket上的nuget包源代码:
1)在* .csproj文件中启用完整的调试信息:
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
或右键单击项目属性,生成,高级,输出调试信息-设置为完整。
2)要为nuget软件包dll启用自动源下载和单步执行,请将nuget软件包SourceLink.Create.CommandLine
添加到项目中,或将其手动添加到* .csproj文件中:
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.2" PrivateAssets="All" />
</ItemGroup>
更多信息here
3)在工具-选项-调试中,禁用“启用我的代码”,并启用“在模块加载时禁止JIT优化(仅受管理)”。
在此之后,您应该能够从nuget包dll中进入方法。
答案 4 :(得分:1)