web-dev-qa-db-ja.com

私が作成したnugetパッケージのコードをデバッグする方法

別のソリューションに作成してインストールしたnugetパッケージがありますが、新しいソリューションから呼び出されたときにパッケージのコードをデバッグする必要があります。

パッケージのソリューションを参照しようとしましたが、機能していません。

Visual Studio 2013を使用しています。

24
Yatiac

Dllをデバッグするには、そのシンボルファイル(.pdb)が必要です。 debug構成でプロジェクトをビルドすると、これらのファイルが生成され、ビルド出力フォルダーに配置されることがわかります。

Visual Studioは、これらのシンボルファイルを here のようにさまざまな場所から読み込みます。しかし、nugetパッケージをデバッグする最も簡単な方法は、パッケージの.pdbファイルをデバッグするプロジェクトのビルド出力フォルダーに入れることです。


デバッグしようとしているコードが非ユーザーコードとして分類されている場合、uncheckJust My Codeデバッグオプション。

enter image description here

ユーザーコードと非ユーザーコード

ユーザーコードを非ユーザーコードと区別するために、Just My Codeはシンボル(.pdb)ファイルとプログラムの最適化を調べます。デバッガーは、バイナリが最適化されるとき、または.pdbファイルが利用できないとき、コードを非ユーザーコードと見なします。

3つの属性は、デバッガーがMy Codeと見なすものにも影響します。

  • DebuggerNonUserCodeAttributeは、適用されるコードがMy Codeではないことをデバッガーに通知します。
  • DebuggerHiddenAttributeは、Just My Codeがオフになっている場合でも、デバッガーからコードを隠します。
  • DebuggerStepThroughAttributeは、コードにステップインするのではなく、適用されるコードをステップスルーするようデバッガーに指示します。

他のすべてのコードはユーザーコードと見なされます。

24
NtFreX

デバッグモードで作成したnugetパッケージを使用してプロジェクトをビルドし、デバッグディレクトリからデバッグしたいプロジェクト内のnuget dllの場所にpdbとdllをコピーするだけで、これが機能しました。

例:コピー元

ExternalNugetPackage\bin\Debug \

ProjectDirectory\Packages\ExternalNugetPackage.1.0.0\lib\net4.5

7
ds4940

私が作成したNugetパッケージのコードをデバッグする方法

NtFreXが答えたように、「dllをデバッグするには、そのシンボルファイル(.pdb)が必要です。」。したがって、消費者がVisual Studioデバッガーでパッケージコードにステップインできるようにするシンボルパッケージを作成できます。

私たちがそれを行う方法(そして動作します):

  1. 「* .symbols.nupkg」を作成します。
  2. SymbolSourceサーバーにシンボルパッケージを展開します。
  3. IDEを構成し、パッケージコンシューマは https://nuget.smbsrc.net/ をVisual Studioのシンボルソースに追加できます。
  4. NuGetを使用して(SymbolSourceサーバーから)必要なライブラリをプロジェクトに追加します。
  5. デバッグ。

詳細情報については、 シンボルパッケージの作成 を参照してください。

これらのパッケージがNuGet Gallery/SymbolSourceでの公開に適さない場合は、*。nupkgおよび* .symbols.nupkgファイルをローカルディスクに配置できます。

注:パッケージを参照するソリューションのデバッグソースファイルにソースコードを追加します(ソリューションを右クリックし、[プロパティ...共通プロパティ...デバッグソースファイル]を選択して、関連するバイナリリファレンスのルートソースディレクトリを追加します)

7
Leo Liu-MSFT

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>

詳細 こちら

3)ツール-オプション-デバッグで、「マイコードのみを有効にする」を無効にし、「モジュールのロード時にJIT最適化を抑制する(管理のみ)」を有効にします。

この後、nugetパッケージdllからメソッド内部にステップできるようになります。

4
xhafan