在 Visual Studio 代码中调试 nuget

debug nuget in Visual Studio Code

调试B的时候我也想单步调试A的代码,但是这样不行

因为我自己从 A 构建 N,我可以生成一个 symbols 包 and/or 一个 pdb 文件,所以我认为我确实拥有所有需要的东西。我只是不知道如何连接这些部分以允许我从 B 调试会话中调试 A 代码。

你检查了吗?

https://github.com/dotnet/sourcelink#githubcom-and-github-enterprise

您需要将其添加到您的 csproj 文件中。

<Project Sdk="Microsoft.NET.Sdk">
 <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
 
    <!-- Optional: Publish the repository URL in the built .nupkg (in the NuSpec <Repository> element) -->
    <PublishRepositoryUrl>true</PublishRepositoryUrl>
 
    <!-- Optional: Embed source files that are not tracked by the source control manager in the PDB -->
    <EmbedUntrackedSources>true</EmbedUntrackedSources>
  
    <!-- Optional: Build symbol package (.snupkg) to distribute the PDB containing Source Link -->
    <IncludeSymbols>true</IncludeSymbols>
    <SymbolPackageFormat>snupkg</SymbolPackageFormat>
  </PropertyGroup>
  <ItemGroup>
    <!-- Add PackageReference specific for your source control provider (see below) --> 
  </ItemGroup>


  <ItemGroup>
    <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
  </ItemGroup>
</Project>

在我的 csproj 文件(A 和 B)中设置 <DebugType>portable</DebugType> 就成功了。

我什至不需要从 A 的任何地方复制 pdb 文件;它只是自己工作。

可能这只是由于我当前的设置:我有一个项目 B 的 nuget.config,其中指定了项目 A 的路径,因为 nuget N 是在那里构建的。因为它是项目 A 的文件夹,所以它的 pdb 也在那里(在 bin/Debug/frameworkVersion 中)。可能 VScode 只是检查从中检索 nuget 的文件夹以及所有子文件夹。

无论如何,如果这对不同的设置不起作用,似乎只需将我要调试的代码(因此,项目 A 的代码)的 pdb 复制到输出中就足够了我当前正在调试的项目(项目 B)的文件夹。这可以通过将 pdb 添加到 nuget 以及相应的 target 以将 pdb 复制到输出目录来自动实现。

然后,如果 just my code 被禁用,pdb 文件将自动加载。