web-dev-qa-db-ja.com

Visual Studio 2017を使用したnugetパッケージのデバッグ

Visual Studio 2015および.NET Core開発では、ソース(GitHubなど)からローカルディスクにソースコードを取得し、global.jsonでダウンロードしたソースコードにソースパスを追加して、nugetパッケージを参照することで、nugetパッケージをデバッグできます私たちのプロジェクト。これにより、ダウンロードしたソースコード内のプロジェクトへの参照が現在のソリューションで自動的に表示されるようになり、簡単にデバッグできるようになりました(この機能の詳細については この記事で を参照してください)。

誰もがVisual Studio 2017を使用して同じことを行う方法を知っていますか? global.jsonがなくなったので、これに対する解決策を見つけることができません。

16
Rune G

これは人気のある質問になっているようですが、MSは(今日のほとんどの時間はVisual Studioで)、製品を実際に改善できる要求に欠けています。

Microsoftのリファレンスライブラリの使用方法に関する投稿がいくつかありますが、これはすべてのプロジェクトに適用されるわけではなく、監視機能とステップ機能の両方で制限されている最適化されたリリースビットをデバッグします。また、この方法を使用すると、遅いVisual Studioがさらに遅くなると感じています。この方法については、この post で説明しています。

ただし、最近、この問題を回避する方法を見つけました。常に安定しているわけではありませんが、関連するプロジェクトをプロジェクト参照としてプロジェクトに追加することで実現できます。

しかし、ここで私が実行したステップのほとんどは機能します:

  1. Github(または他のソース)からnugetパッケージのリポジトリを複製します
  2. Nugetパッケージがビルドされたコミットを見つけるために最善を尽くしてください(ほとんどのプロジェクトはタグまたはブランチのいずれかで参照していますが、これを期待しないでください。nugetパッケージとコミットの日付を比較する方が良い場合があります)。
  3. ビルド方法に関するプロジェクトの指示に従います。VisualStudioで単にビルドするものもあれば、コマンドプロンプトでビルドスクリプトを使用するなどの追加の手順が必要なものもあります。
  4. ソリューション内のプロジェクトへの参照を追加します。場合によっては、プロジェクトが参照するプロジェクトを追加する必要がありますが、常にそうする必要はありません。ここではまだルールを正確に見つけていません。新しいVisual Studioの更新ではこれは必要ないようです。
  5. ソリューション内のnugetパッケージを参照するすべてのプロジェクトで、プロジェクトへの参照を追加します。そうしないと、コンパイラーが解決しようとする(十分ではない)競合が発生する可能性があります。

ビルドしてデバッグし、出力ウィンドウで、プロジェクトの出力フォルダーにあるアセンブリが使用されていることを確認します。もしそうなら、参照されたプロジェクトのブレークポイントにヒットするだけで、完全なデバッグ機能を利用できます。

これをうまくやろうとして失敗したのは少しですが、最終的にはうまくいきます。

プロジェクト参照に条件を作成して、それらが組み込まれていないことを確認することができます。ただし、リリースビルドでは、構成を変更するには、変更後にソリューションをリロードする必要があることに注意してください。

1
Rune G

私はこれに長い間取り組んできました。これが繰り返し機能することがわかった最も簡単な方法です。

  • ソースコードを入手して、nugetパッケージをローカルでビルドします。パッケージのバージョンをインクリメントする必要があります。 うまくいけば、作成者はビルドを簡単にするために.nuspecを提供しています。

ローカルnugetソースを作成します。

  • 作成した.nugetファイルをC:\ Nuget(たとえば)に配置します。

  • Visual Studioで、[ツール]、[オプション]、[Nugetパッケージマネージャー]、[パッケージソース]の順に選択します

  • 緑色の(+)アイコンを押します。上記で作成したローカルnugetパッケージ(C:\ Nuget)へのパスを追加し、パッケージソースをリストの一番上に移動します。

  • ソリューションでは、プロジェクトごとに、外部のnugetパッケージへの以前の参照を削除し、ローカルのnugetソースから新しいnugetパッケージを追加します。

  • デバッグを開始すると、nugetパッケージのコードにステップインできるはずです。

ソースコードにブレークポイントを設定して、nugetパッケージをビルドし、コードを実行するとブレークポイントを解除できます。

上記のすべてのステップは少しの忠実度であり、それを機能させるために数回それをいじる必要があるかもしれません。

これがうまくいくかどうかコメントで教えてください。もしそうなら、私は賛成票をいただければ幸いです! :)

0