開発者は通常、ソース管理リポジトリから NuGet パッケージを省略し、代わりに パッケージの復元 に依存して、ビルド前にプロジェクトの依存関係を再インストールします。
パッケージの復元に依存する理由は次のとおりです。
- Git などの分散バージョン管理システムには、リポジトリ内のすべてのファイルのすべてのバージョンの完全なコピーが含まれています。 頻繁に更新されるバイナリ ファイルは、大幅な肥大化を招き、リポジトリの複製にかかる時間が長くなります。
- パッケージがリポジトリに含まれている場合、開発者は NuGet を介してパッケージを参照するのではなく、ディスク上のパッケージコンテンツに直接参照を追加する責任を負います。これにより、プロジェクト内のパス名がハードコーディングされる可能性があります。
- 使用中のパッケージ フォルダーを削除しないようにする必要があるため、未使用のパッケージ フォルダーのソリューションをクリーンアップすることが困難になります。
- パッケージを省略すると、コードと依存している他のパッケージとの間で、所有権の境界がクリーンに維持されます。 多くの NuGet パッケージは、独自のソース管理リポジトリに既に保持されています。
パッケージの復元は NuGet の既定の動作ですが、この記事で説明するように、パッケージ (つまり、プロジェクト内の packages フォルダー) をソース管理から省略するには、手動で行う必要があります。
Git でのパッケージの省略
.gitignore ファイルを使用して、.nupkg フォルダーやpackagesなどの NuGet パッケージ (project.assets.json) を無視します。 参照については、 Visual Studio プロジェクトのサンプル .gitignore を参照してください。
.gitignore ファイルの重要な部分は次のとおりです。
# Ignore NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Ignore other intermediate files that NuGet might create. project.lock.json is used in conjunction
# with project.json (NuGet v3); project.assets.json is used in conjunction with the PackageReference
# format (NuGet v4 and .NET Core).
project.lock.json
project.assets.json
Team Foundation バージョン管理を使用してパッケージを省略する
注
可能であれば、ソース管理にプロジェクトを追加する 前に 、次の手順に従ってください。 それ以外の場合は、リポジトリから packages フォルダーを手動で削除し、その変更をチェックインしてから続行します。
選択したファイルに対して TFVC とのソース管理の統合を無効にするには:
ソリューション フォルダー (
.nugetファイルがある場所) に、.slnという名前のフォルダーを作成します。- ヒント: Windows では、Windows エクスプローラーでこのフォルダーを作成するには、名前
.nuget.末尾にドットを付けて使用します。
- ヒント: Windows では、Windows エクスプローラーでこのフォルダーを作成するには、名前
そのフォルダーに、
NuGet.Configという名前のファイルを作成し、編集用に開きます。次のテキストを最小限に追加します。 disableSourceControlIntegration 設定では、
packagesフォルダー内のすべてをスキップするように Visual Studio に指示します。<?xml version="1.0" encoding="utf-8"?> <configuration> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>TFS 2010 以前を使用している場合は、ワークスペース マッピング内の
packagesフォルダーをクロークします。TFS 2012 以降、または Visual Studio Team Services で、「
.tfignoreファイルの追加」の説明に従って ファイルを作成します。 そのファイルに以下の内容を含め、リポジトリ レベルの\packagesフォルダーとその他の中間ファイルの変更を明示的に無視します。 (Windows エクスプローラーで、末尾にドットが付いた.tfignore.の名前を使用してファイルを作成できますが、最初に [既知のファイル拡張子を非表示にする] オプションを無効にする必要がある場合があります。# Ignore NuGet Packages *.nupkg # Ignore the NuGet packages folder in the root of the repository. If needed, prefix 'packages' # with additional folder names if it's not in the same folder as .tfignore. packages # Omit temporary files project.lock.json project.assets.json *.nuget.propsソース管理に
NuGet.Configと.tfignoreを追加し、変更をチェックインします。