省略源代码管理系统中的 NuGet 包

开发人员通常从源代码管理存储库中省略 NuGet 包,而是依赖于 包还原 ,在生成之前重新安装项目的依赖项。

依赖包还原的原因包括:

  1. 分布式版本控制系统(如 Git)包括存储库中每个文件的每个版本的完整副本。 经常更新的二进制文件会导致大量膨胀,并延长克隆存储库所需的时间。
  2. 当存储库中包含包时,开发人员往往会直接在磁盘上添加对包内容的引用,而不是通过 NuGet 引用包,这可能会导致项目中出现硬编码的路径名。
  3. 清理任何未使用的包文件夹的解决方案变得更加困难,因为需要确保不会删除仍在使用的任何包文件夹。
  4. 通过不包含包,可以在代码与所依赖的其他包之间维护清晰的所有权界限。 许多 NuGet 包已在自己的源代码管理存储库中维护。

尽管包还原是 NuGet 的默认行为,但需要执行一些手动作,以便从源代码管理中省略包( packages 即项目中的文件夹),如本文所述。

使用 Git 忽略软件包

使用 .gitignore 文件 忽略包括 NuGet 包、packages 文件夹,以及 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 的源代码管理集成:

  1. 在解决方案文件夹中创建一个命名为 .nuget 的文件夹(其中含有 .sln 文件)。

    • 提示:在 Windows 上,若要在 Windows 资源管理器中创建此文件夹,请使用带有尾随.nuget.
  2. 在该文件夹中,创建一个名为 NuGet.Config 的文件,并打开它进行编辑。

  3. 将以下文本作为最少需要添加的内容,其中 disableSourceControlIntegration 设置指示 Visual Studio 跳过 packages 文件夹中的所有内容:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <solution>
            <add key="disableSourceControlIntegration" value="true" />
        </solution>
    </configuration>
    
  4. 如果使用的是 TFS 2010 或更早版本,请在工作区映射中排除 packages 文件夹。

  5. 在 TFS 2012 或更高版本或 Visual Studio Team Services 上,按照.tfignore”中所述创建文件。 在该文件中,添加以下内容以明确在存储库级别忽略对\packages文件夹及其他一些中间文件的修改。 (可以使用带有尾随点的名称 .tfignore. 在 Windows 资源管理器中创建文件,但可能需要先禁用“隐藏已知文件扩展名”选项)。

    # 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 添加到源代码管理,然后签入更改。