「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>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を作成し、~ [[「ソース サーバ」、「シンボル サーバ」>ビルド環境と開発環境のソースファイルパスを一致させる(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キーを保存~ ※ 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 [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。 ***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を切替え可能にできる。 ***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> ***其々、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]]~ ---基本的に、以下のURLを追加するだけでよい。~ http://srv.symbolsource.org/pdb/Public ---複数のサーバを使用する場合、~ 同じバイナリのシンボルが含まれている場合があるため、~ 順序に注意する(下記順序に従ってURLを追加する)。~ https://www.symbolsource.org/Public/Wiki/Using > +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) +(other symbol servers with sources) +http://msdl.microsoft.com/download/symbols +(other symbol servers without sources) **ハイブリッドな方法の場合のデバッグ方法の切替 [#z89c82cb] ***既定 [#w1f365f8] -symbolsource.orgのSymbol Packageを利用する。 -[[「ソース サーバ」、「シンボル サーバ」を有効にする>#d56a4093]]。 ***切替 [#kb6995d4] -Primary packageのPDBに切り替える。 --「ソース サーバ」、「シンボル サーバ」を無効にする。 --[シンボル ファイル (.pdb) の場所]に、Primary packageのPDBパスを指定する。 --ローカルにファイルを配置する。 -symbolsource.orgのSymbol Packageに戻す。 --再度、[[「ソース サーバ」、「シンボル サーバ」を有効にする>#d56a4093]]。 --[シンボル ファイル (.pdb) の場所]に指定した、Primary packageのPDBパスを削除する。 --ローカルに配置したファイルを削除する。 *symbolsource.orgのアーキテクチャ [#be167e33] -symbolsource.orgのアーキテクチャについて。 -参考 --Architecture~ http://www.symbolsource.org/Public/Wiki/Architecture http://www.symbolsource.org/Public/Wiki/Architecture-1.png **インスタンス [#gd40201a] ***SymbolSourceインスタンス [#m4b3ddf7] (企業アカウントの場合) -別のユーザーデータベースを持つインスタンス -独立したシンボルとソースサーバーをクラウドのSaaSとして提供する目的。 ***Publicインスタンス [#e35fcf40] プライベート・アカウントを登録するインスタンス ***MyGetインスタンス [#j49de6de] myget.orgとユーザーを共有するインスタンス。 **リポジトリ [#c3d408ea] Publicインスタンスから利用するリポジトリ ***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/NuGet **[[ビルド環境と開発環境のソースファイルパスを一致させる(PDB)。]] [#a439cd53] ---- Tags: [[:.NET開発]], [[:デプロイ]], [[:デバッグ]], [[:NuGet]]