[解決済み] Nugetのベストプラクティス。デバッグかリリースか?
質問
現在、私はリリースビルドを nuget.org への公式ビルドのために Nuget でパッケージしていますが、デバッグビルドを symbolsource.org へのシンボルソースプッシュのために Nuget でパッケージしています。
EDIT: (Jon Skeet、Noda Time開発からのバイアスがかかっています)
NuGet は今回、NuGet gallery の両方へのプッシュをサポートします。 と symbolsource.org (または同様のサーバ) の両方へのプッシュをサポートするようになりました。 ドキュメントにあるように . 残念ながら、ここには2つの矛盾した要件があります。
- ちょうど を使用して を使う場合、本当にリリースビルドが必要です。結局のところ、それがリリース ビルドの目的なのです。
- 診断目的でライブラリにデバッグを行う場合、適切な最適化をすべて無効にしたデバッグビルドが本当に必要です。結局のところ、デバッグ ビルドはそのためにあるのです。
それは良いことですが、NuGet は (私が知る限り) リリース ビルドとデバッグ ビルドの両方を同じパッケージで有用な方法で公開することを許可していません。
つまり、選択肢は
- デバッグ ビルドを全員に配布し (ドキュメントの例で示されているように)、サイズとパフォーマンスのヒットに耐える。
- リリース ビルドを全員に配布し、わずかに損なわれたデバッグ エクスペリエンスと共存する。
- 本当に複雑な配布ポリシーを採用し、潜在的にリリースとデバッグのパッケージを別々に提供します。
最初の 2 つは、デバッグビルドとリリースビルドの違いの効果に集約されます...しかし、ある動作を確認するためにライブラリのコードに入りたい場合と、バグを見つけたと信じてライブラリのコードをデバッグしたい場合との間には大きな違いがあることは注目に値します。後者の場合、おそらくライブラリのコードを取得する方がよいでしょう。 を Visual Studio ソリューションとして として取得し、その方法でデバッグする方がよいでしょうから、私はその状況をあまり気にしていません。
私の誘惑は、リリース ビルドを続けることで、次のことを期待しています。
比較的
デバッグが必要な人はほとんどいないでしょうし、デバッグが必要な人も な影響を受けることはないでしょう。 多くの の最適化によって影響を受けることはありません。(いずれにせよ、JIT コンパイラーは最適化のほとんどを行います)。では、私たちが考慮しなかった他のオプションがあるのでしょうか?バランスを崩すような他の考慮事項はありますか? NuGet パッケージを SymbolSource にプッシュすることは、"best practice" が本当に確立されていないほど新しいのでしょうか?
どのように解決するのですか?
OPの投稿から8年経ちましたので(以下、以前の回答がまだ上位にあります)、現在使われているもので解決してみます。
の2つの方法があります。 に踏み込む。 "NuGetパッケージへのステップインです。
1. PDBの配布
.symbols.nupkg
シンボルパッケージは
レガシーとみなされます。
で置き換えられており
.snupkg
に公開されるパッケージは
シンボルサーバ
. ほとんどのベンダでサポートされている
Azure DevOps
がサポートされている最大のアウトサイダーです。
機能要求
はまだ "under review" となっています (リンクを提供してくれた @alv に感謝します)。
以下は 公式インストラクション . csproj ファイルに以下の2行を追加するだけです。
<PropertyGroup>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup>
消費者側では、IDE が NuGet.org (または Azure など) の Symbol Server に設定されていることを確認してください。 パッケージコードに踏み込む を許可してください。
2. ソースリンク.実際のコードにリンクする
場合によっては、PDBはMSIL/JIT最適化により、ソースコードの一部の仕様を隠してしまうことがあります。そこで、" に踏み込む デバッグ中にNuGetの実際のソースに" "踏み込む方法があります。それは ソースリンク を .NET Foundation から取得します - " バイナリのソースデバッグ体験を提供する、言語やソース管理にとらわれないシステム ".
Visual Studio 15.3+ とすべての主要なベンダーでサポートされています (プライベートレポジトリもサポート)。
設定方法は簡単で、( 公式ドキュメント ) - プロジェクトファイルに、いくつかのフラグと一緒に開発用の依存関係を追加するだけです (あなたのレポの種類に依存します)。
<PropertyGroup>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0" PrivateAssets="All" />
</ItemGroup>
このテーマについては、" で詳細を確認してください。 より良いNuGetパッケージのための5つのステップ "をご覧ください。
関連
-
[解決済み] Visual Studioでデバッグすると、"file is used by another process "というエラーが発生するのですが?
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Wi-Fi経由でAndroidアプリケーションを実行/インストール/デバッグしますか?
-
[解決済み] NuGetで旧バージョンのパッケージをダウンロードする
-
[解決済み] Visual Studioの出力ウィンドウに書き込む
-
[解決済み] NuGetパッケージの.nupkgファイルをローカルにインストールするにはどうしたらいいですか?
-
[解決済み] C#のif/thenディレクティブによるデバッグとリリースの比較
-
[解決済み] アセットファイルproject.assets.jsonが見つかりません。NuGetパッケージの復元を実行する
-
[解決済み】NuGetパッケージが見つからない
-
[解決済み] リリースモードでコンパイルされたNuGetプロジェクトのパッケージング?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プロジェクトの種類は、このインストールではサポートされていません
-
[解決済み] MTとMDは何の略ですか?
-
[解決済み] Visual Studioでデバッグを行う際、特定の環境変数を設定するにはどうすればよいですか?
-
[解決済み] デバッグビルドのみVisual Studioのポストビルドイベントを実行する方法
-
[解決済み] "Entire Solution "の検索が効かなくなる。
-
[解決済み】Visual Studioのエディタにガイドラインを追加する
-
[解決済み】Visual Studioがシングルクリックでファイルを開かないようにするには?
-
[解決済み】Visual Studio IDEで空白文字の表示をオフにする方法
-
[解決済み】Visual Studio 2010以降でZoomをリセットする方法
-
[解決済み】Visual Studioのポストビルドイベント - 相対的なディレクトリの場所にコピーする