我的应用程序很少有 nuget 包引用。我应该将包文件夹也签入源代码管理吗?我的目的是让其他开发人员可以使用源代码并跟上参考的稳定版本。如果我已经使用最新的 nuget 更新更新了项目并且应用程序中断,我想从源代码管理中获取特定版本的 depedable dll。
或者我应该创建一个库文件夹并从包文件夹中删除 dll 并检查我以前做过的那个?并仅在本地管理包文件夹?
我的应用程序很少有 nuget 包引用。我应该将包文件夹也签入源代码管理吗?我的目的是让其他开发人员可以使用源代码并跟上参考的稳定版本。如果我已经使用最新的 nuget 更新更新了项目并且应用程序中断,我想从源代码管理中获取特定版本的 depedable dll。
或者我应该创建一个库文件夹并从包文件夹中删除 dll 并检查我以前做过的那个?并仅在本地管理包文件夹?
您必须权衡是否将 NuGet 包置于源代码控制中的利弊,然后自行决定。选择完全取决于您。
如果我已经使用最新的 nuget 更新更新了项目并且应用程序中断,我想从源代码管理中获取特定版本的可靠 dll。
任何一种方法都支持这一点。如果不签入 NuGet 包,则应签入每个项目的 packages.config 文件。此文件记录使用的 NuGet 包的版本。因此,您可以签出旧版本的源代码,它将使用旧版本的 NuGet 包。nuget.org 上的 NuGet 包永远不会被删除。
NuGet 站点提供了有关您可能不想从源代码管理中省略包的原因的文档,我在此处引用了这些文档:
分布式版本控制系统 (DCVS) 包括存储库中每个文件的每个版本,频繁更新的二进制文件会导致存储库显着膨胀,并需要更多时间来克隆存储库。使用存储库中包含的包,团队成员可以直接添加对磁盘上包内容的引用,而不是通过 NuGet 引用包。“清理”任何未使用的包文件夹的解决方案变得更加困难,因为您需要确保不删除任何仍在使用的包文件夹。
未将 NuGet 包检查到源代码管理中的问题可能发生在构建服务器或网络连接受限的情况下。在构建服务器上,您是否需要访问 Internet,或者提供一个包含项目正在使用的 NuGet 包的本地目录。此外,您还需要NuGet.exe restore
在构建项目之前运行或使用基于 MSBuild 的包还原(NuGet 团队已弃用)。请注意,如果您将最新版本的 NuGet 与 Visual Studio 一起使用,则在您构建项目时会自动恢复 NuGet 包。其他 IDE 具有类似的功能,或者至少有一种无需从命令行使用 NuGet.exe 即可还原包的方法。
在源代码管理中拥有 NuGet 包的好处是您不依赖于 NuGet,其他开发人员可以获取源代码并使用它,而无需恢复任何 NuGet 包。
请注意,将 dll 移动到库文件夹中意味着您没有获得 NuGet 的全部好处。NuGet 期望 dll 位于包目录中,所有引用都指向此目录中的 dll,因此将 dll 移动到库文件夹意味着您将无法使用 NuGet 更新您的项目。
要考虑的方法是:
因为运行错误版本的 nuget 包可能会严重破坏您的应用程序,我喜欢让它们签入,即使它看起来很臃肿。从长远来看,除了节省我的团队时间之外,它什么也没做。
如果需要,使用 library 文件夹还可以让某人更新 nuget 包变得不简单。他们需要记住将它移动到这个新的库文件夹并引用它。
还值得记住的是,当您更新 nuget 包时,旧版本仍保留在包文件夹中,仅供参考。
最后,如果您有自动构建系统,则使用 Nuget Restore 之类的工具可能无法正常工作,因为它们需要项目中包含的引用 DLL,并且不会自动下载它们。