英語で読む

次の方法で共有


project.json 参照

重要

このコンテンツは非推奨とされます。 プロジェクトは、packages.config または PackageReference 形式のいずれかを使用する必要があります。

NuGet 3.x 以降

project.json ファイルは、パッケージ管理形式と呼ばれるプロジェクトで使用されるパッケージのリストを保持します。 これは packages.config に優先しますが、NuGet 4.0 以降では、PackageReference によって置き換えられます。

project.lock.json ファイル (後述) も、project.json を使用するプロジェクトで使用されます。

project.json には次の基本構造があります。4 つの最上位レベルのオブジェクトのそれぞれが任意の数の子オブジェクトを持つことができます。

{
    "dependencies": {
        "PackageID" : "{version_constraint}"
    },
    "frameworks" : {
        "TxM" : {}
    },
    "runtimes" : {
        "RID": {}
    },
    "supports" : {
        "CompatibilityProfile" : {}
    }
}

依存関係

プロジェクトの NuGet パッケージの依存関係を次の形式でリストします。

"PackageID" : "version_constraint"

次に例を示します。

"dependencies": {
    "Microsoft.NETCore": "5.0.0",
    "System.Runtime.Serialization.Primitives": "4.0.10"
}

dependencies セクションは、NuGet パッケージ マネージャー ダイアログがプロジェクトにパッケージの依存関係を追加する場所です。

パッケージ ID は、nuget.org のパッケージ ID に対応しています。これはパッケージ マネージャー コンソールで使用される ID と同じです。Install-Package Microsoft.NETCore

パッケージを復元するときに、"5.0.0" のバージョンの制約は >= 5.0.0 を意味します。 つまり、サーバーで 5.0.0 は使用できないが 5.0.1 は使用できる場合、NuGet は 5.0.1 をインストールし、アップグレードに関する警告を発します。 それ以外の場合は、NuGet は制約に一致するサーバー上で使用可能な最も低いバージョンを選択します。

解決ルールの詳細については、依存関係の解決に関するページをご覧ください。

依存関係アセットの管理

依存関係からどのアセットを最上位レベルのプロジェクトにフローするかは、依存関係の参照の include プロパティと exclude プロパティでコンマ区切りのタグのセットを指定することで制御できます。 タグを次の表に一覧表示します。

包含/除外タグ ターゲットの影響を受けるフォルダー
contentFiles Content
ランタイム Runtime、Resources、FrameworkAssemblies
compile lib
build build (MSBuild のプロパティとターゲット)
native native
なし フォルダーなし
すべて すべてのフォルダー

exclude で指定されているタグの方が、include で指定されているタグより優先されます。 例えば、include="runtime, compile" exclude="compile"include="runtime" と同じです。

たとえば、依存関係の build フォルダーと native フォルダーを含めるには、次を使用します。

{
  "dependencies": {
    "packageA": {
      "version": "1.0.0",
      "include": "build, native"
    }
  }
}

依存関係の content フォルダーと build フォルダーを除外するには、次を使用します。

{
  "dependencies": {
    "packageA": {
      "version": "1.0.0",
      "exclude": "contentFiles, build"
    }
  }
}

フレームワーク

プロジェクトを実行するフレームワーク (net45netcoreappnetstandard など) をリストします。

"frameworks": {
    "netcore50": {}
    }

frameworks セクションでは、1 つのエントリのみが許可されます (例外は、非推奨の DNX ツール チェーンでビルドされた ASP.NET プロジェクトの project.json ファイルで、これは複数のターゲットを許可します。)

Runtimes

アプリを実行するオペレーティング システムとアーキテクチャ (win10-armwin8-x64win8-x86) をリストします。

"runtimes": {
    "win10-arm": { },
    "win10-arm-aot": { },
    "win10-x86": { },
    "win10-x86-aot": { },
    "win10-x64": { },
    "win10-x64-aot": { }
}

任意のランタイムで実行できる PCL を含むパッケージは、ランタイムを指定する必要はありません。 これはどの依存関係にも当てはまります。それ以外の場合は、ランタイムを指定する必要があります。

サポート

パッケージの依存関係のチェックのセットを定義します。 PCL またはアプリの実行を想定している場所を定義できます。 他の場所でもコードを実行できるように、定義は制限が緩くなっています。 しかしこれらのチェックを指定すると、NuGet はリストされている TxMs ですべての依存関係が満たされていることを確認します。 この値の例には、net46.appuwp.10.0.app などがあります。

このセクションは、ポータブル クラス ライブラリのターゲット ダイアログでエントリを選択する際に、自動的に設定される必要があります。

"supports": {
    "net46.app": {},
    "uwp.10.0.app": {}
}

インポートする

Imports は、dotnet TxM を使用するパッケージに、dotnet TxM を宣言しないパッケージで動作することを許可するように設計されています。 プロジェクトが dotnet TxM を使用している場合、以下を project.json に追加して非 dotnet プラットフォームを dotnet 対応にしない限り、依存するすべてのパッケージにも dotnet TxM が必要です。

"frameworks": {
    "dotnet": { "imports" : "portable-net45+win81" }
}

dotnet TxM を使用している場合、PCL プロジェクト システムは、サポートされているターゲットに基づいて適切な imports ステートメントを追加します。

ポータブル アプリと Web プロジェクトとの違い

NuGet によって使用される project.json ファイルは、ASP.NET Core プロジェクト内にあるサブセットです。 ASP.NET Core では、project.json がプロジェクト メタデータ、コンパイルの情報、および依存関係のために使用されます。 他のプロジェクト システムで使用する場合は、これら 3 つが個別のファイルに分割され、project.json に含まれる情報が少なくなります。 重要な違いは次のとおりです。

  • frameworks セクションには 1 つのフレームワークしか存在できません。

  • ファイルには、DNX project.json ファイルで見られる、依存関係、コンパイル オプションなどを含めることはできません。 1 つのフレームワークしか存在できない場合は、フレームワーク固有の依存関係を入力する意味はありません。

  • コンパイルは MSBuild によって処理されるため、コンパイル オプション、プリプロセッサ定義などはすべて、project.json ではなく、MSBuild プロジェクト ファイルの一部です。

NuGet 3 以降では、Visual Studio のパッケージ マネージャー UI がコンテンツを操作するため、開発者が手動で project.json を編集する必要はありません。 ただし、ファイルを編集することはできますが、プロジェクトをビルドしてパッケージの復元を開始するか、または別の方法で復元を呼び出す必要があります。 「パッケージの復元」を参照してください。

project.lock.json

project.lock.json ファイルは、project.json を使用するプロジェクトで NuGet パッケージを復元する過程で生成されます。 このファイルには、NuGet がグラフ全体を処理する際に生成されたすべての情報のスナップショットが保持され、プロジェクトのすべてのパッケージのバージョン、コンテンツ、依存関係が含まれます。 ビルド システムはこれを使用して、プロジェクト自体のローカル パッケージ フォルダーに依存する代わりに、プロジェクトのビルド時に関連するグローバルな場所からパッケージを選択します。 この結果、多くの個別の .nuspec ファイルの代わりに、project.lock.json のみを読み取ればよいため、ビルド パフォーマンスが向上します。

project.lock.json はパッケージの復元で自動的に生成されるため、.gitignore ファイルと .tfignoreファイルに追加することで、ソース管理から省くことができます (パッケージとソース管理に関するページを参照してください)。 ただし、これをソース管理に含めると、変更履歴に時間の経過と共に解決された依存関係の変更が示されます。