dotnet pack

この記事の対象: ✔️ .NET Core 3.1 SDK 以降のバージョン

名前

dotnet pack - NuGet パッケージにコードをパックします。

構文

dotnet pack [<PROJECT>|<SOLUTION>] [--artifacts-path <ARTIFACTS_DIR>]
    [-c|--configuration <CONFIGURATION>] [--force]
    [--include-source] [--include-symbols] [--interactive]
    [--no-build] [--no-dependencies] [--no-restore] [--nologo]
    [-o|--output <OUTPUT_DIRECTORY>] [--runtime <RUNTIME_IDENTIFIER>]
    [-s|--serviceable] [--tl:[auto|on|off]] [-v|--verbosity <LEVEL>]
    [--version-suffix <VERSION_SUFFIX>]

dotnet pack -h|--help

説明

dotnet pack コマンドはプロジェクトをビルドし、NuGet パッケージを作成します。 このコマンドの結果が NuGet パッケージ (つまり、.nupkg ファイル) です。

デバッグ シンボルを含むパッケージを生成する場合、使用可能なオプションが 2 つあります。

  • --include-symbols -シンボル パッケージを作成します。
  • --include-source -ソース ファイルが含まれた src フォルダーを含むシンボル パッケージを作成します。

パックされるプロジェクトの NuGet 依存関係が .nuspec ファイルに追加されるため、パッケージのインストール時に適切に解決されます。 パックされたプロジェクトに他のプロジェクトへの参照がある場合、他のプロジェクトはパッケージに含まれません。 現時点では、プロジェクト間の依存関係がある場合は、プロジェクトごとにパッケージが必要になります。

既定では、dotnet pack は最初にプロジェクトをビルドします。 この動作を避けたい場合は、--no-build オプションを渡します。 このオプションは、コードが既にビルドされていることがわかっている場合の継続的インテグレーション (CI) ビルド シナリオで役立つことがよくあります。

Note

場合によっては、暗黙的なビルドは実行できません。 これは、ビルドとパック ターゲット間の循環依存を回避するため GeneratePackageOnBuild が設定されている場合に発生します。 ロックされているファイルがある場合や、その他の問題がある場合にも、ビルドは失敗します。

パッキング プロセスのために dotnet pack コマンドに MSBuild のプロパティを使用できます。 詳細については、NuGet の pack ターゲットのプロパティに関するページと、「MSBuild コマンド ライン リファレンス」を参照してください。 「使用例」のセクションでは、MSBuild の -p スイッチを使用する方法を、2 つの異なるシナリオについて説明します。

Note

Web プロジェクトはパッケージ化可能ではありません。

暗黙的な復元

復元を必要とするすべてのコマンド (dotnet newdotnet builddotnet rundotnet testdotnet publishdotnet pack など) によって暗黙的に実行されるため、dotnet restore を実行する必要がなくなりました。 暗黙的な復元を無効にするには、--no-restore オプションを使用します。

dotnet restoreなどの、明示的な復元が意味のある一部のシナリオや、復元が行われるタイミングを明示的に制御する必要があるビルド システムでは、dotnet restore は引き続き有用なコマンドです。

NuGet フィードの管理方法については、dotnet restore のドキュメントをご覧ください。

このコマンドには dotnet restore オプションを指定できますが、--source のように長い形式で指定する必要があります。 -s のような短い形式のオプションはサポートされていません。

ワークロード マニフェストのダウンロード

このコマンドを実行すると、ワークロードの広告マニフェストの非同期バックグラウンド ダウンロードが開始されます。 このコマンドが終了してもダウンロードが実行されている場合、ダウンロードは停止します。 詳細については、「広告マニフェスト」を参照してください。

引数

PROJECT | SOLUTION

パックするプロジェクトまたはソリューション。 csproj、vbproj、または fsproj ファイル、ソリューション ファイル、またはディレクトリのいずれかへのパスです。 指定されていない場合、コマンドによりプロジェクトまたはソリューション ファイルが現在のディレクトリで検索されます。

[オプション]

  • --artifacts-path <ARTIFACTS_DIR>

    実行されたコマンドからのすべてのビルド出力ファイルは、指定されたパスの下のサブフォルダーに配置され、プロジェクトで区切られます。 詳細については、「成果物の出力レイアウト」を参照してください。 .NET 8 SDK 以降で利用可能です。

  • -c|--configuration <CONFIGURATION>

    ビルド構成を定義します。 .NET 8 SDK 以降のバージョンで開発している場合、TargetFramework が設定されているプロジェクトまたはそれ以降のバージョンに対してnet8.0、既定で構成が使用Releaseされます。 既定のビルド構成は、 Debug 以前のバージョンの SDK と以前のターゲット フレームワーク用です。 プロジェクト設定またはこのオプションを使用して、既定値をオーバーライドできます。 詳細については、「dotnet publish」ではリリース構成を使用し'dotnet pack' ではリリース構成を使用する方法を参照してください。

  • --force

    最後の復元が成功した場合でも、すべての依存関係が強制的に解決されます。 このフラグを指定することは、project.assets.json ファイルを削除することと同じです。

  • -?|-h|--help

    コマンドの使用方法を示した説明を出力します。

  • --include-source

    通常の NuGet パッケージに加えて、デバッグ シンボル NuGet パッケージが出力ディレクトリ内に含まれます。 ソース ファイルは、シンボル パッケージ内の src フォルダーに含まれます。

  • --include-symbols

    通常の NuGet パッケージに加えて、デバッグ シンボル NuGet パッケージが出力ディレクトリ内に含まれます。

  • --interactive

    コマンドを停止して、ユーザーの入力または操作のために待機させることができます。 たとえば、認証を完了する場合があります。 .NET Core 3.0 SDK 以降で使用できます。

  • --no-build

    パッキングの前にプロジェクトをビルドしません。 また、--no-restore フラグが暗黙的に設定されます。

  • --no-dependencies

    プロジェクト間参照を無視し、ルート プロジェクトのみを復元します。

  • --no-restore

    コマンドを実行するときに、暗黙的な復元を実行しません。

  • --nologo

    著作権情報を表示しません。

  • -o|--output <OUTPUT_DIRECTORY>

    指定したディレクトリにビルド済みパッケージを配置します。

    • .NET 7.0.200 SDK

      7.0.200 SDK では、ソリューションでこのコマンドを実行するときに --output オプションを指定すると、CLI によってエラーが出力されます。 これは回帰であり、.NET SDK の 7.0.201 以降のバージョンで修正されました。

  • --runtime <RUNTIME_IDENTIFIER>

    パッケージを復元するターゲット ランタイムを指定します。 ランタイム ID (RID) の一覧については、RID カタログに関するページをご覧ください。

  • -s|--serviceable

    パッケージに処理可能フラグを設定します。 詳細については、 .NET Framework 4.5.1 での .NET NuGet ライブラリに対する Microsoft セキュリティ更新プログラムのサポートに関する .NET ブログを参照してください。

  • --tl:[auto|on|off]

    ビルド出力にターミナル ロガーを使用するかどうかを指定します。 既定値は、ターミナル ログを有効にする前にまず環境を確認する、auto です。 環境チェックでは、ターミナルが最新の出力機能を使用でき、新しいロガーを有効にする前にリダイレクトされる標準出力を使用していないことを確認します。 on は、環境チェックをスキップし、ターミナル ログを有効にします。 off は、環境チェックをスキップし、既定のコンソール ロガーを使用します。

    ターミナル ロガーには、復元フェーズとそれに続くビルド フェーズが表示されます。 各フェーズにおいて、現在ビルド中のプロジェクトがターミナルの下部に表示されます。 ビルド中の各プロジェクトに対し、現在ビルド中の MSBuild ターゲットとそのターゲットに費やされた時間の両方が出力されます。 ビルドの詳細は、この情報を検索して確認できます。 プロジェクトのビルドが完了すると、次がキャプチャされた 1 つの "ビルドが完了しました" セクションが書き込まれます。

    • ビルドされたプロジェクトの名前。
    • ターゲット フレームワーク (複数ターゲットの場合)。
    • そのビルドの状態。
    • そのビルドの主な出力 (ハイパーリンク付き)。
    • そのプロジェクトに対して生成された診断。

    このオプションは、.NET 8 以降で使用できます。

  • -v|--verbosity <LEVEL>

    コマンドの詳細レベルを設定します。 指定できる値は、q[uiet]m[inimal]n[ormal]d[etailed]、および diag[nostic] です。 詳細については、LoggerVerbosityを参照してください。

  • --version-suffix <VERSION_SUFFIX>

    VersionSuffix MSBuild プロパティの値を定義します。 このプロパティがパッケージのバージョンに及ぼす影響は、次の表に示すように、Version および VersionPrefix プロパティの値によって異なります。

    値を持つプロパティ パッケージのバージョン
    なし 1.0.0
    Version $(Version)
    VersionPrefix のみ $(VersionPrefix)
    VersionSuffix のみ 1.0.0-$(VersionSuffix)
    VersionPrefix および VersionSuffix $(VersionPrefix)-$(VersionSuffix)

    --version-suffix を使用する場合は、プロジェクト ファイルに Version ではなく VersionPrefix を指定します。 たとえば、VersionPrefix0.1.2 である場合、--version-suffix rc.1dotnet pack に渡すと、パッケージのバージョンは 0.1.2-rc.1 になります。

    Version に値が含まれている場合、--version-suffixdotnet pack に渡すと、--version-suffix に対して指定された値は無視されます。

  • 現在のディレクトリのプロジェクトをパックします。

    dotnet pack
    
  • app1 プロジェクトをパックします。

    dotnet pack ~/projects/app1/project.csproj
    
  • プロジェクトを現在のディレクトリにパックし、nupkgs フォルダーに生成されたパッケージを配置します。

    dotnet pack --output nupkgs
    
  • 現在のディレクトリのプロジェクトを nupkgs フォルダーにパックし、ビルド ステップをスキップします。

    dotnet pack --no-build --output nupkgs
    
  • .csproj ファイルで <VersionSuffix>$(VersionSuffix)</VersionSuffix> として構成されているプロジェクトのバージョン サフィックスで、現在のプロジェクトをパックし、結果のパッケージ バージョンを指定されたサフィックスで更新します。

    dotnet pack --version-suffix "ci-1234"
    
  • PackageVersion MSBuild プロパティで 2.1.0 にパッケージ バージョンを設定します。

    dotnet pack -p:PackageVersion=2.1.0
    
  • プロジェクトを特定のターゲット フレームワーク用にパックします。

    dotnet pack -p:TargetFrameworks=net45
    
  • プロジェクトをパックし、復元操作に特定のランタイム (Windows) を使用します。

    dotnet pack --runtime win-x64
    
  • .nuspec ファイルを使用してプロジェクトをパックします。

    dotnet pack ~/projects/app1/project.csproj -p:NuspecFile=~/projects/app1/project.nuspec -p:NuspecBasePath=~/projects/app1/nuget
    

    NuspecFileNuspecBasePathNuspecProperties の詳細については、次のリソースを参照してください。