开发人员通常从源代码管理存储库中省略 NuGet 包,而是依赖于 包还原 ,在生成之前重新安装项目的依赖项。
依赖包还原的原因包括:
- 分布式版本控制系统(如 Git)包括存储库中每个文件的每个版本的完整副本。 经常更新的二进制文件会导致大量膨胀,并延长克隆存储库所需的时间。
- 当存储库中包含包时,开发人员往往会直接在磁盘上添加对包内容的引用,而不是通过 NuGet 引用包,这可能会导致项目中出现硬编码的路径名。
- 清理任何未使用的包文件夹的解决方案变得更加困难,因为需要确保不会删除仍在使用的任何包文件夹。
- 通过不包含包,可以在代码与所依赖的其他包之间维护清晰的所有权界限。 许多 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 的源代码管理集成:
在解决方案文件夹中创建一个命名为
.nuget的文件夹(其中含有.sln文件)。- 提示:在 Windows 上,若要在 Windows 资源管理器中创建此文件夹,请使用带有尾随
.nuget.
- 提示:在 Windows 上,若要在 Windows 资源管理器中创建此文件夹,请使用带有尾随
在该文件夹中,创建一个名为
NuGet.Config的文件,并打开它进行编辑。将以下文本作为最少需要添加的内容,其中 disableSourceControlIntegration 设置指示 Visual Studio 跳过
packages文件夹中的所有内容:<?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文件夹及其他一些中间文件的修改。 (可以使用带有尾随点的名称.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将
NuGet.Config和.tfignore添加到源代码管理,然后签入更改。