次の方法で共有


dotnet pack コマンドは、アプリケーションのアセンブリをNuGetパッケージにまとめるために使用されます。

この記事は: ✔️ .NET 6 SDK 以降のバージョンに適用されます

名前

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

概要

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

dotnet pack -h|--help

Description

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

.NET 10 以降では、.nuspec ファイルまたはファイル ベースのアプリ (.cs ファイル) を引数として直接渡すこともできます。 .nuspec ファイルを渡すと、dotnet packはプロジェクト ファイルを必要とせず、MSBuild を実行せずに.nuspec ファイルからパッケージを作成します。 ファイル ベースのアプリを渡すと、 dotnet pack プロジェクト ファイルなしでパックされます。

デバッグ シンボルを含むパッケージを生成する場合は、次の 2 つのオプションを使用できます。

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

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

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

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

Web プロジェクトはパックできません。

暗黙的な復元

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

コマンドは、Azure DevOps Services の継続的な統合ビルドや、復元がいつ行われるかを明示的に制御する必要があるビルド システムなど、明示的な復元が理にかなっている特定のシナリオで引き続き役立ちます。

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

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

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

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

論争

PROJECT | SOLUTION | NUSPEC | FILE

パックするプロジェクト、ソリューション、 .nuspec ファイル、またはファイル ベースのアプリ。

  • PROJECT は、 .csproj.vbproj、または .fsproj ファイルへのパス、またはプロジェクト ファイルを含むディレクトリへのパスです。

  • SOLUTION は、ソリューション ファイル (.sln または .slnx 拡張子) へのパス、またはソリューション ファイルを含むディレクトリへのパスです。

  • NUSPEC は、 .nuspec ファイルへのパスです。 .NET 10 以降で使用できます。

  • FILE は、ファイル ベースのアプリ (対応するプロジェクト ファイルのない C# ファイル) へのパスです。 .NET 10 以降で使用できます。 詳細については、「 ファイル ベースの C# アプリをビルドする」を参照してください。

    指定しない場合、コマンドは現在のディレクトリでプロジェクトまたはソリューション ファイルを検索します。

オプション

  • --artifacts-path <ARTIFACTS_DIR>

    実行されたコマンドからのすべてのビルド出力ファイルは、指定されたパスの下のサブフォルダーに配置され、プロジェクトで区切られます。 詳細については、「 Artifacts 出力レイアウトを参照してください。 このオプションと指定された値は、dotnet build --no-restoredotnet publish --no-buildを使用する場合など、別のdotnet コマンドの出力に依存する任意のdotnet コマンドで明示的にカスケードする必要があります。 .NET 8 SDK 以降で使用できます。

  • -c|--configuration <CONFIGURATION>

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

  • --disable-build-servers

    永続的なビルド サーバーを無視するようにコマンドを強制します。 このオプションは、ビルド キャッシュのすべての使用を無効にする一貫した方法を提供します。これにより、ビルドが最初から強制的に実行されます。 キャッシュに依存しないビルドは、何らかの理由でキャッシュが破損している、または正しくない可能性がある場合に便利です。 .NET 7 SDK 以降で使用できます。

  • --force

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

  • --include-source

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

  • --include-symbols

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

  • --interactive

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

  • --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 以降のバージョンで修正されました。

  • -p|--property:<PROPERTYNAME>=<VALUE>

    1 つ以上の MSBuild プロパティを設定します。 .nuspec ファイルを直接パックする場合、プロパティは MSBuild プロパティとしてではなく、.nuspec ファイル内のトークンの置換に使用されます。 複数のプロパティを指定するには、セミコロンで区切るか、オプションを繰り返します。

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    

    詳細については、 NuGet パックのターゲット プロパティMSBuild コマンド ライン リファレンスを参照してください

  • --runtime <RUNTIME_IDENTIFIER>

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

  • -s|--serviceable

    パッケージ内のサービス可能フラグを設定します。 詳細については、「.NET ブログ: .NET Framework 4.5.1 .NET NuGet ライブラリのMicrosoft Security更新プログラムのサポートを参照してください。

  • --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 <VERSION>

    作成するパッケージのバージョン。 .nuspec ファイルをパックするときに、.nuspec ファイルのバージョン番号をオーバーライドします。

    .NET 10 以降で使用できます。

  • --version-suffix <VERSION_SUFFIX>

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

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

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

    Versionに値があり、--version-suffixdotnet packを渡す場合、--version-suffixに指定された値は無視されます。

  • -?|-h|--help

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

例示

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

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

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

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

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

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

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

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

    dotnet pack --runtime win-x64
    
  • .nuspec ファイル (MSBuild プロジェクト ベースのアプローチ) を使用してプロジェクトをパックします。

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

    NuspecFileNuspecBasePath、およびNuspecPropertiesの使用方法については、次のリソースを参照してください。

  • プロジェクト ファイル (.NET 10 以降) を使用せずに、.nuspec ファイルを直接パックします。

    dotnet pack MyPackage.nuspec --output ./artifacts
    
    ```dotnetcli
    dotnet pack MyPackage.nuspec --version 1.2.3 --output ./artifacts
    
  • .nuspec ファイルを直接パックし、トークンの置換 (.NET 10 以降) を使用します。

    dotnet pack MyPackage.nuspec --property:Version=1.2.3 --property:Configuration=Release --output ./artifacts