--- title: "シンボルおよびソースサーバ" order: 2 hidden: true ---

ProGet の NuGet フィードは、Visual Studio や WinDbg などのデバッガと互換性のあるシンボル / ソースサーバとして構成できます。ProGet シンボルサーバでサポートされているのは次の通りです。

☑ Microsoft PDB フォーマット (C/C++、.NET)

☑ ソースサーバ

☑ ポータブル PDB フォーマット (.NET)

☒ コネクタパッケージ の PDB

☒ Linux の ProGet向けのソースサーバ

## シンボルへのアクセス

シンボルサーバが有効になっている場合、次のシンボルサーバ URL からローカルのフィードパッケージに保存されているシンボルファイルにアクセスできます。

http://«proget-server»/symbols/«Feed»

## シンボルパッケージ

ProGet では、 Symbols 引数でビルドされた NuGet シンボルパッケージを使用できます。これらのシンボルパッケージは、.pdb ファイルと、場合によってはソースファイルも含む標準の NuGet パッケージにすぎず、慣例としてファイルの拡張子が .symbols.nupkg または .snupkg となっています。NuGet は 2 つのパッケージ (1 つはシンボルありで、もう 1 つはシンボルなし) を生成します。2 つ生成するのは、片方は NuGet.org へのプッシュ、もう片方はシンボルフィードへのプッシュを行うためです。

ProGet がすべての NuGet フィードにシンボルを統合することから、2 つのパッケージを用意する必要はありません。むしろ、かえって逆効果になります。シンボルパッケージは慣例により「通常のパッケージ」とのみ異なっているため、両方を ProGet フィードにプッシュしようとすると、競合が発生します。その場合、「最後にプッシュされたパッケージ」が元のパッケージを上書きします。

つまり、シンボルサーバを使用する場合は、シンボルパッケージのみを ProGet フィードにプッシュする必要があります。NuGet パッケージでシンボルがダウンロードされないようにするには、[Symbol Server settings (シンボルサーバ設定)] の [Manage Feed (フィードの管理)] ページで、trip symbol files from packages downloaded from this feed (このフィードオプションからダウンロードしたパッケージからシンボルファイルを削除する) を参照してください。

## 内部 NuGet パッケージへのデバッグ

ProGet のシンボル / ソースサーバを最大限に活用するには、公開された NuGet パッケージにデバッグ可能なすべてのアセンブリのシンボルファイル (pdb) が、パッケージの /src/ フォルダにソースファイルが存在している必要があります。詳細については、シンボルパッケージのビルドに関する情報が載っている NuGet documentation (NuGet ドキュメンテーション) を参照してください。

⛔
ProGet は、ポータブル PDB ファイルと従来の Microsoft PDB ファイルのインデックスを作成して返します。しかし、ポータブル PDB ファイルは透過的には書き換えられません。それが埋め込まれた NuGet パッケージのソースコードで使用できるようにするためです。ポータブル PDB ファイルに関連付けられたソースコードをデバッグする場合は、SourceLink などのビルドツールを使用して、コンパイル中にソースファイルの URL (またはファイル自体) を埋め込むことを検討してください。 ProGet が Microsoft PDB ファイルを処理するのと同じ方法でポータブル PDB ファイルの書き換えを行いたい場合は、ご連絡ください。

### ProGet の構成

ProGet が特定の NuGet フィードのシンボルを提供するには、それを行うための構成が必要となります。次のように、[Manage Feed (フィードの管理)] ページにアクセスし、Visual Studio 内で使用されるフィードのシンボルサーバの URL が正しいことと、[Symbol Server Configure] の下にあるオプションがチェックされていることを確認します。

### インデックス付きシンボルの検証

シンボル付きのパッケージがフィードにアップロードされると、[Package Details (パッケージの詳細)] ページでシンボルがインデックスに登録されているかどうか、およびパッケージにソースが含まれているかどうかが次の通りわかります。

Download Package with Symbols (シンボル付きパッケージのダウンロード) のリンク (フィードがシンボルを削除するように構成されている場合に表示されます) をクリックすると、パッケージのダウンロードと内容の確認が行えます。

## Visual Studio の構成

### シンボルサーバのサポートを有効にする

NuGet パッケージライブラリにデバッグするには、ProGet をシンボルサーバとして使用するように Visual Studio を構成する必要があります。メニューバーから [Debug (デバッグ)]> [Options... (オプション)] を選択し、ツリーメニューで [Debugging (デバッグ)]> [Symbol (シンボル)] をクリックします。先ほどの [Manage Feed (フィードの管理)] ページにあるシンボルサーバの URL を追加し、シンボルキャッシュディレクトリを指定します。デフォルトでは、Visual Studio は %LOCALAPPDATA%\Temp\SymbolCache を使用しますが、任意のパスも指定できます。

### ソースサーバサポートを有効にする

ソースサーバのサポートを構成するには、デバッグオプションツリーメニューで [Debugging (デバッグ)] > [General (一般)] を参照し、設定のオンオフが次の通りになっていることを確認します。

☐ Enable Just My Code

☑ Enable source server support

また、次のオプションのチェックを外さないといけない場合もあります。

☐ Enable .NET Framework Source Stepping

場合によっては、次のような設定になるケースもあります。

### 構成のテスト

構成をテストするには、シンボルを含む NuGet パッケージを使用するコンソールアプリケーションを作成し、例外をスローする使い捨てコードを書いてから、Visual Studio の [Start (スタート)] ボタンをクリックしてデバッグを開始するのが簡単です。

すべてが正しく構成されている場合、Visual Studio はシンボルをローカルへ読み込もうとします。その際にシンボルが見つからない場合、ProGet シンボルサーバにクエリを実行し、例外のスローを行う行が次のようにハイライトされます。

### トラブルシューティング

シンボルサーバの失敗の原因はいろいろありますが、最も一般的なのは設定の誤りです。 Visual Studio がロードした PDB を表示するには、デバッグ中に [Debug (デバッグ)] > [Windows] > [Module (モジュール)] メニューオプションを選択し、リストから目的の DLL を見つけます。シンボルステータスが、DLL とダウンロードされたシンボルの両方へのバージョンとパスとともに表示されます。

DLL を右クリックして [Symbol Load Information... (シンボルのロード情報)] を選択すると、そのライブラリのシンボルサーバに関連付けられている診断メッセージを表示できます。これはシンボルがロードされているかどうかに関係なく表示可能です。

ファイルパスの 16 進数の文字列では、次の通り、その先頭が ProGet にリストされている GUID になっているはずです。

### 一般的なエラー

今までサポートに寄せられたもので、最も一般的なエラーは次のとおりです。

- 間違った URL を使用している。例えば、http://«proget-server»/symbols/«feed-name» とすべきところが http://«proget-server»/NuGet/«feed-name» となっている。
- 両方の NuGet パッケージ (シンボルありとなし) をプッシュしている。
- コネクタパッケージのシンボルの使用を試みている (この方法はサポートされていません。回避策としては、パッケージをローカルにプルするか、シンボルに別のフィードを使用してください)。
- .nupkg ファイルのルートにある/src/ ディレクトリの下にソースファイルがない。
- ProGet にプルされたときにパッケージが再作成するシンボルサーバを構成している。これは、アプリケーションで NuGet Error NU3008 が発生する原因となることがあります。