ソース管理システムで NuGet パッケージを省略するOmitting NuGet packages in source control systems

通常、開発者はソース管理リポジトリの NuGet パッケージを省略し、代わりにパッケージの復元に依存して、ビルド前にプロジェクトの依存関係を再インストールします。Developers typically omit NuGet packages from their source control repositories and rely instead on package restore to reinstall a project's dependencies before a build.

パッケージの復元に依存する理由には、次のようなものがあります。The reasons for relying on package restore include the following:

  1. 分散型バージョン管理システム (Git など) には、リポジトリ内のすべてのファイルのすべてのバージョンの完全なコピーが含まれます。Distributed version control systems, such as Git, include full copies of every version of every file within the repository. 頻繁に更新されるバイナリ ファイルは大幅に肥大化し、リポジトリを複製する時間が長くなります。Binary files that are frequently updated lead to significant bloat and lengthens the time it takes to clone the repository.
  2. パッケージがリポジトリに含まれる場合、開発者は、プロジェクト内でハードコーディングされたパス名につながる、NuGet を使用してパッケージを参照するよりも、ディスク上のパッケージ コンテンツに直接、参照を追加する傾向にあります。When packages are included in the repository, developers are liable to add references directly to package contents on disk rather than referencing packages through NuGet, which can lead to hard-coded path names in the project.
  3. 使用中のパッケージを削除しないようにする必要があるので、未使用のパッケージ フォルダーのソリューションをクリーンにするのが難しくなります。It becomes harder to clean your solution of any unused package folders, as you need to ensure you don't delete any package folders still in use.
  4. パッケージを省略して、自分が依存するその他のユーザーからのコードとパッケージの間に所有者のクリーンな境界を維持します。By omitting packages, you maintain clean boundaries of ownership between your code and the packages from others that you depend upon. 多くの NuGet パッケージは、独自のソース管理リポジトリに保持されます。Many NuGet packages are maintained in their own source control repositories already.

パッケージの復元は NuGet と共に既定の動作ですが、ソース管理からパッケージ—つまり、プロジェクトの packages フォルダー—を省略するには、以下のセクションで示すように、一部手動の操作を実行する必要があります。Although package restore is the default behavior with NuGet, some manual work is necessary to omit packages—namely, the packages folder in your project—from source control, as described in this article.

Git でパッケージを省略するOmitting packages with Git

.gitignore ファイルを使用して、中でも NuGet パッケージ (.nupkg)、packages フォルダー、project.assets.json を省略します。Use the .gitignore file to ignore NuGet packages (.nupkg) the packages folder, and project.assets.json, among other things. Visual Studio プロジェクトの .gitignore のサンプルを参照してください。For reference, see the sample .gitignore for Visual Studio projects:

.gitignore ファイルの重要な部分は次のとおりです。The important parts of the .gitignore file are:

# 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 バージョン管理でパッケージを省略するOmitting packages with Team Foundation Version Control

注意

ソース管理にプロジェクトを追加する前に、可能であればこれらの手順を実行します。Follow these instructions if possible before adding your project to source control. それ以外の場合は、自分のリポジトリから packages フォルダーを手動で削除して、続行する前にその変更をチェックインします。Otherwise, manually delete the packages folder from your repository and check in that change before continuing.

選択したファイルの TFVC とのソース管理の統合を無効にするにはTo disable source control integration with TFVC for selected files:

  1. ソリューション フォルダー (.sln ファイルがある場所) で .nuget という名前のフォルダーを作成します。Create a folder called .nuget in your solution folder (where the .sln file is).

    • ヒント: Windows 上のエクスプローラーでこのフォルダーを作成するには、末尾のドットを含む .nuget. という名前を使用します。Tip: on Windows, to create this folder in Windows Explorer, use the name .nuget. with the trailing dot.
  2. そのフォルダーで、NuGet.Config という名前のファイルを作成し、編集するために開きます。In that folder, create a file named NuGet.Config and open it for editing.

  3. disableSourceControlIntegration の設定によって Visual Studio で packages フォルダーのすべてをスキップするように指示している場合、少なくとも次のテキストを追加します。Add the following text as a minimum, where the disableSourceControlIntegration setting instructs Visual Studio to skip everything in the packages folder:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <solution>
            <add key="disableSourceControlIntegration" value="true" />
        </solution>
    </configuration>
    
  4. TFS 2010 以前を使用している場合は、自分のワークスペース マッピングで packages フォルダーをクロークします。If you are using TFS 2010 or earlier, cloak the packages folder in your workspace mappings.

  5. TFS 2012 以降、または Visual Studio Team Services を使用して、「サーバーへのファイルの追加」で説明されているように、.tfignore ファイルを作成します。On TFS 2012 or later, or with Visual Studio Team Services, create a .tfignore file as described on Add Files to the Server. そのファイルには、リポジトリ レベルの \packages フォルダーおよび他のいくつかの中間ファイルに対する変更を明示的に無視するように、以下のコンテンツを含めます。In that file, include the content below to explicitly ignore modifications to the \packages folder on the repository level and a few other intermediate files. (末尾のドットを含む .tfignore. という名前を使用して、エクスプローラーでファイルを作成できますが、最初に "Hide known file extensions" (既知のファイル拡張子を非表示にする) オプションを無効にする必要がある場合があります。)(You can create the file in Windows Explorer using the name a .tfignore. with the trailing dot, but you might need to disable the "Hide known file extensions" option first.):

    # 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
    
  6. NuGet.Config.tfignore をソース管理に追加し、自分の変更をチェックインします。Add NuGet.Config and .tfignore to source control and check in your changes.