「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>NuGet]]
--[[NuGetプライベート・リポジトリ]]
--NuGetパッケージのデバッグ
--[[NuGetパッケージのプレリリース版]]

* 目次 [#z19e7331]
#contents

*概要 [#fa0976f2]
-NuGetパッケージで展開されているモジュール内の~
デバッグ実行が必要になった時の手順も確立しておく必要がある。

-以下の2つの方法がある。
--(Primary packageに)PDBを同梱
--Symbol Packageを利用

*パッケージの登録 [#nd4008c8]

**(Primary packageに)PDBを同梱する方法 [#u34263f8]
「[[NuGetパッケージの開発と公開]]」を参照。

***ポイント [#j842631b]
-'*.pdbファイル以外のすべてのファイル(*.dll、*.pdb、*.xml)を含める。
-'*.pdbを同梱する場合は、ビルド時のフォルダ構成に注意すること(開発環境と一致させる)。~
ただし「[[ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。]]」で対応できる。

***手順 [#v3230e25]
-[[nuspecファイルの書き方の例>NuGetパッケージの開発と公開#ufd9e6b0]]

-[[NuGetパッケージの作成方法>NuGetパッケージの開発と公開#g07875e2]]

-パッケージ名~
{identifier}.nupkg

**Symbol Packageを利用する方法 [#e3f16568]
NuGetは、Symbol Packageを作成し、SymbolSourceリポジトリに公開することもサポート
NuGetは、Symbol Packageを作成し、~
[[「ソース サーバ」、「シンボル サーバ」>ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。#ge5e7ea9]]に公開することもサポート

***ポイント [#tedb06ca]
-*.dll、*.pdb、*.xmlに加え、ソースファイル(任意)を同梱。
-libフォルダの構造はPrimary packageと完全に同じにする。
-追加で、ソースファイルのルートフォルダをsrcに指定する。

***準備 [#s8839bef]
-nuspecファイルの書き方の例(srcはソースファイルのルートフォルダ)
 <files>
     <file src="Full\bin\Debug\*.dll" target="lib\net40" />
     <file src="Full\bin\Debug\*.pdb" target="lib\net40" />
     <file src="Silverlight\bin\Debug\*.dll" target="lib\sl40" />
     <file src="Silverlight\bin\Debug\*.pdb" target="lib\sl40" />
     <file src="**\*.cs" target="src" />
 </files>

--nuspecファイルは、Primary PackageとSymbol Packageで共有(1つ)で良い(理由は後述)。
--「src="**\*.cs"」の「**」は、再帰的にフォルダを検索することを意味するので、
---階層構造がある src でも正しく同梱することが可能。
---必要であれば、[[作成したPackageを解凍して>NuGetパッケージの開発と公開#p66307ac]]、同梱されるソースファイルを確認できる。

-作成方法
--以下のコマンドで、symbolとsrcが除外されたPrimary Packageと、Symbol Packageが生成される。
 nuget pack [*.nuspecファイルパス] -Symbols
--Primary Packageにもsymbolとsrcを含めたい場合、別途、以下のコマンドを実行する。
 nuget pack [*.nuspecファイルパス]

-パッケージ名~
{identifier}.symbols.nupkg

***登録 [#h43a29c4]
-概要
--NuGetプロトコルを実装するnuget.exe v4.1.0以上を使用
--nuget.orgとsymbolsource.orgの両方に登録を行う。

-操作

--便宜上、NuGetを使用してAPIキーを保存
 nuget SetApiKey Your-API-Key
--NuGetを使用してAPIキーを保存~
※ APIキーは nuget.org より入手できる。
 nuget SetApiKey [Your-API-Key]

--Symbol Packageをプッシュ~

---Primary packageをプッシュした後に、Symbol Packageをプッシュ~
(*.symbols.nupkgとあれば自動的にsymbolsource.orgがターゲットになる。)
 nuget push *.symbols.nupkg

---Sourceオプションを使用して、Symbol Repositoryにプッシュ~
Symbol Packageを別のSymbol Repositoryにプッシュ~
若しくは、命名規則に従わないSymbol PackageをSymbol Repositoryにプッシュ
 nuget push *.symbols.nupkg -source https://nuget.smbsrc.net/

---Primary package、Symbol Packageの両方をプッシュ~
Primary package、Symbol Packageの両方を、同時に両方のRepositoryにプッシュすることもできる。
 nuget push *.nupkg

---nuget.exe 4.5.0以降、~
Primary package、Symbol Packageを[-source]を指定して個別にプッシュ。
 nuget SetApiKey [ApiKey]
 nuget SetApiKey [Your-API-Key]
 nuget push *.nupkg -source https://www.nuget.org/
 nuget push *.symbols.nupkg -source https://nuget.smbsrc.net/

>>※ https://nuget.smbsrc.net/ は、symbolsource.orgのプッシュURL。
>>※ https://nuget.smbsrc.net/ は、symbolのプッシュURL。

***nuget push 補足説明 [#b52a5ebb]
nuget.exe による、*.symbols.nupkg の push の補足説明

-symbolsource.orgへのサインイン
--SetApiKey で保存された APIキーを nuget.org と symbolsource.org の両方に対して使用する。
--symbolsource.org ではこの API キーを使用して nuget.org へ確認するため、~
symbolsource.org にサインインせずSymbol Packageのアップロードが可能。

-PDB ファイルの書換~
nuget.exe push で symbolsource.org に push された際、
--symbolsource.org側のPDB ファイルのソースの検索方法が書き換えられ、
--ソースの検索先が symbolsource.org になる。

**ハイブリッドな方法 [#k27c219e]
以下の手順で、Primary packageのPDBとSymbol Packageを切替え可能にできる。
以下の登録手順で、Primary packageのPDBとSymbol Packageを切替え可能にできる。

***nspecを2つ用意する。 [#ufd51f38]
-Primary package用
 <files>
     <file src="Full\bin\Debug\*.dll" target="lib\net40" />
     <file src="Full\bin\Debug\*.pdb" target="pdb\net40" /> ※ pdbの場所を外す。
 </files>

-Symbol Package用
 <files>
     <file src="Full\bin\Debug\*.dll" target="lib\net40" />
     <file src="Full\bin\Debug\*.pdb" target="lib\net40" />
     <file src="**\*.cs" target="src" />
 </files>

※ Primary packageで、pdbの場所を外すのは、~
 PDB同梱パターンと、Symbol Packageパターンを切り替え可能にするため。

***其々、Package化する。 [#a95f04b5]
-Primary package用
 nuget pack [*.nuspecファイルパス]

-Symbol Package用 ※ Primary packageを上書きするので注意!
 nuget pack [*.nuspecファイルパス] -Symbols

※ このため、出力先を分けるといい。

***Push前の確認。 [#j9c50fc8]
必要に応じて、Push前の確認を行う。

-[[*.nupkgを*.zipにリネームして同梱物件を取り出す。>NuGetパッケージの開発と公開#p66307ac]]
-[[ildasmを使用して*.dllの内容を確認する。>.NETアセンブリのtargetFrameworkを確認する方法]]

***其々、Pushする。 [#f380a707]
-APIキーを保存
 nuget SetApiKey [Your-API-Key]

-Primary package用
 nuget push *.nupkg -source https://www.nuget.org/

-Symbol Package用
 nuget push *.symbols.nupkg -source https://nuget.smbsrc.net/

※ Symbol PackageフォルダにPrimary packageは不要。

*パッケージのデバッグ [#zd224c6d]

**(Primary packageに)PDBを同梱 [#uce0e316]
-*.pdbファイルが同梱されていれば、そのままデバッグ可能。
-ただし、[[ソースファイルの配置>ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。#ee51547d]]については考慮が必要。

**Symbol Packageを利用 [#d56a4093]
-*.pdbファイルとソース ファイルを自動的に取得してソース コードのステップ インが可能

-ただし、以下の設定が必要になる。

--[[ソース サーバのサポートを有効にする。>ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。#oa07a535]]

--[[ソース サーバ、シンボル サーバの場所を追加する。>ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。#uf34ac5a]]~
---https://www.symbolsource.org/Public/Wiki/Using~
(同じバイナリのシンボルが含まれている場合があるため、順序に注意する。)
--[[シンボル サーバの場所を追加する。>ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。#uf34ac5a]]~

---基本的に、以下のURLを追加するだけでよい。~
https://nuget.smbsrc.net

---複数のサーバを使用する場合、~
同じバイナリのシンボルが含まれている場合があるため、順序に注意する。
>
+http://referencesource.microsoft.com/symbols
+http://srv.symbolsource.org/pdb/Public~
or the authenticated variant (see above)
+http://srv.symbolsource.org/pdb/MyGet~
or the authenticated variant (see above)
+https://nuget.smbsrc.net
+(other symbol servers with sources)
+http://msdl.microsoft.com/download/symbols
+(other symbol servers without sources)

**ハイブリッドな方法の場合のデバッグ方法の切替 [#z89c82cb]
***既定 [#w1f365f8]
-symbolsource.orgのSymbol Packageを利用する。
-nuget.smbsrc.netのSymbol Packageを利用する。
-[[「ソース サーバ」、「シンボル サーバ」を有効にする>#d56a4093]]。

***切替 [#kb6995d4]
-Primary packageのPDBに切り替える。
--「ソース サーバ」、「シンボル サーバ」を無効にする。
--[シンボル ファイル (.pdb) の場所]に、Primary packageのPDBパスを指定する。
--ローカルにファイルを配置する。

-symbolsource.orgのSymbol Packageに戻す。
-nuget.smbsrc.netのSymbol Packageに戻す。
--再度、[[「ソース サーバ」、「シンボル サーバ」を有効にする>#d56a4093]]。
--[シンボル ファイル (.pdb) の場所]に指定した、Primary packageのPDBパスを削除する。
--ローカルに配置したファイルを削除する。

*symbolsource.orgのアーキテクチャ [#be167e33]
-symbolsource.orgのアーキテクチャについて。
*変更 [#h8a8f180]

-参考
--Architecture~
http://www.symbolsource.org/Public/Wiki/Architecture
**Symbolの公開URLの変更 [#ua818059]
最近、Symbolの公開URLが

http://www.symbolsource.org/Public/Wiki/Architecture-1.png
-http://srv.symbolsource.org/pdb/Public から、
-https://nuget.smbsrc.net に、

**インスタンス [#gd40201a]
***SymbolSourceインスタンス [#m4b3ddf7]
(企業アカウントの場合)
-別のユーザーデータベースを持つインスタンス
-独立したシンボルとソースサーバーをクラウドのSaaSとして提供する目的。
変更になったもよう。

***Publicインスタンス [#e35fcf40]
プライベート・アカウントを登録するインスタンス
-参考
--Moving to the new SymbolSource engine | Marcin Mikołajczak a.k.a. TripleEmcoder~
https://tripleemcoder.com/2015/10/04/moving-to-the-new-symbolsource-engine/

***MyGetインスタンス [#j49de6de]
myget.orgとユーザーを共有するインスタンス。
**Symbolの作成・登録と更改URLの変更 [#pdcb0f6f]
-最近、Symbolの作成・登録と更改URLが変更になったもよう。
>[[ハイブリッドな方法>#k27c219e]]で、PDBを避けていた、Primary packageが不要になり、~
「-SymbolPackageFormat snupkg」オプションを追加するだけで、~
PrimaryとSymbolのpackageの両方が生成可能になり、また、~
登録処理をPrimaryとSymbolの2回に分けて実行する必要がなくなった。)

**リポジトリ [#c3d408ea]
Publicインスタンスから利用するリポジトリ
-参考
--The way to generate and register symbol packages~
with NuGet has been changed. · Issue #380 · OpenTouryoProject/OpenTouryo~
https://github.com/OpenTouryoProject/OpenTouryo/issues/380
--Improved package debugging experience with the NuGet.org symbol server | The NuGet Blog~
https://devblogs.microsoft.com/nuget/improved-package-debugging-experience-with-the-nuget-org-symbol-server/
--新しいシンボル パッケージ形式 '.snupkg' を使用して NuGet シンボル パッケージを公開する方法 | Microsoft Docs~
https://docs.microsoft.com/ja-jp/nuget/create-packages/symbol-packages-snupkg

***Default [#b176962c]
-歴史的なリポジトリ
-WebフォームからZIPファイルをアップロード

***NuGet [#z7b49948]
NuGet用のリポジトリ
-シンボルパッケージが存在することを検出すると、nuget.exeが自動的にプッシュする。
-nuget.orgから発行されたAPI キーが必要になる。

***OpenWrap [#i1e48340]
OpenWrap用のリポジトリ
-オープンなオートメーション・ソリューション(商用のNuGetのような)
-nuget.orgに相当する中央OpenWrapホストは存在しないので、直接プッシュできる。

***Chocolatey [#u1144c5c]
Chocolatey用のリポジトリ

-Chocolatey - The package manager for Windows~
https://chocolatey.org
>Windows用パッケージマネージャ

***プライペート [#j592515b]
-symbolsource.orgにアカウントを作成して作成可能。
-symbolsource.orgにログイン後、[メタデータ]ページで作成できる。
-読み取りと書き込みのアクセスを完全に制御できる。

**ギャラリーとリポジトリの統合 [#z0d91218]
***nuget.orgなどギャラリー [#b0d8402d]
以下のようにsymbolsource.orgの各リポジトリは、~
nuget.orgやchocolatey.orgなどギャラリーと統合できる。~
(企業アカウントのリポジトリ、プライペート・アカウントのリポジトリ)

http://www.symbolsource.org/Public/Wiki/Architecture-2.png

***myget.orgギャラリー [#r98378df]
以下のようにmyget.orgギャラリーと統合できる(nuget.orgと異なる統合モデル)。

http://www.symbolsource.org/Public/Wiki/Architecture-3.png

*参考 [#w508407e]
**Microsoft Docs [#q57486a9]
-NuGet パッケージの作成方法~
https://docs.microsof.com/ja-jp/nuget/create-packages/creating-a-package
--NuGet パッケージのプレリリース版~
https://docs.microsoft.com/ja-jp/nuget/create-packages/prerelease-packages
--NuGet シンボル パッケージの作成方法~
https://docs.microsoft.com/ja-jp/nuget/create-packages/symbol-packages

-NuGet パッケージの公開方法~
https://docs.microsoft.com/ja-jp/nuget/create-packages/publish-a-package

-NuGet Command-Line Interface (CLI) Reference~
https://docs.microsoft.com/en-us/nuget/tools/nuget-exe-cli-reference
--NuGet CLI pack command~
https://docs.microsoft.com/en-us/nuget/tools/cli-ref-pack
--NuGet CLI push command~
https://docs.microsoft.com/en-us/nuget/tools/cli-ref-push

**SymbolSource.org [#h860d743]
Your source for debugging symbols... and sources.~

***HOME [#p7a92e9e]
What does it do?~
https://www.symbolsource.org/Public/

***Help [#oc8bf4c2]
-Using~
https://www.symbolsource.org/Public/Wiki/Using
-Architecture~
http://www.symbolsource.org/Public/Wiki/Architecture

***Metadata [#p12044f0]
-Public~
http://www.symbolsource.org/Public/Metadata
-MyGet~
http://www.symbolsource.org/MyGet/Metadata

**デバッグ可能なNuGetパッケージのサンプル [#nacbfc35]
https://github.com/OpenTouryoProject/SampleProgram/tree/master/NeGet
https://github.com/OpenTouryoProject/SampleProgram/tree/master/NuGet

**[[ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。]] [#a439cd53]

----
Tags: [[:.NET開発]], [[:デプロイ]], [[:デバッグ]], [[:NuGet]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS