检查nuget包

时间:2014-08-23 23:21:38

标签: nuget source-control-explorer

我的应用程序几乎没有nuget包引用。我是否应该将文件夹签入源代码管理?我的目的是使源代码可供其他开发人员使用,并跟上稳定版本的引用。如果我使用最新的nuget更新和应用程序中断更新项目,我希望从源代码管理中获取特定版本的depedable dll以获取日期。

或者我应该创建一个文件夹并从 packages 文件夹中删除dll并检查以前我以前做过的事情?并且仅管理文件夹本地?

2 个答案:

答案 0 :(得分:3)

你必须权衡在源代码管理中使用NuGet软件包的优缺点,并自行决定。选择完全取决于你。

  

如果我使用最新的nuget更新和应用程序中断更新了项目,我希望从源代码管理中获取特定版本的可靠dll作为日期。

任何一种方法都支持这一点。如果您没有签入NuGet包,则应该检查每个项目的packages.config文件。此文件记录所使用的NuGet包的版本。因此,您可以签出旧版本的源代码,它将使用旧版本的NuGet包。 nuget.org上的NuGet包永远不会被删除。

NuGet网站有documentation on the reasons你可能不想省略我在这里引用的源代码管理包:

  

分布式版本控制系统(DCVS)包括存储库中每个文件的每个版本,并且经常更新的二进制文件可能导致大量存储库膨胀,并且需要更多时间来克隆存储库。   使用存储库中包含的包,团队成员可以直接向磁盘上的包内容添加引用,而不是通过NuGet引用包。   “清理”任何未使用的软件包文件夹的解决方案变得更加困难,因为您需要确保不删除任何仍在使用的软件包文件夹。

在构建服务器或网络连接有限的情况下,不将NuGet包检查到源代码管理中会出现问题。在构建服务器上,您需要访问Internet,或者提供项目使用的NuGet包的本地目录。您还需要在构建项目之前运行NuGet.exe restore或使用基于MSBuild的程序包还原(NuGet团队已弃用)。请注意,如果您在Visual Studio中使用最新版本的NuGet,则在构建项目时会自动恢复NuGet包。其他IDE具有类似的功能或至少一种还原包的方法,而无需从命令行使用NuGet.exe。

在源代码控制中使用NuGet包的好处是你不依赖于NuGet,其他开发人员可以使用源代码并使用它而无需恢复任何NuGet包。

请注意,将dll移动到库文件夹意味着您无法充分利用NuGet。 NuGet希望dll位于packages目录中,所有引用都是这个目录中的dll,因此将dll移动到一个库文件夹意味着你将无法使用NuGet来更新你的项目。

需要考虑的方法是:

  1. 将packages目录检查为源代码管理。
  2. 不要将packages目录检查到源代码管理中,并依赖NuGet恢复软件包。
  3. 根本不要使用NuGet。将二进制文件放在一个单独的目录中,该目录被检入源代码管理。

答案 1 :(得分:2)

因为运行错误版本的nuget包可能会严重破坏你的应用程序,我喜欢让它们签入,即使它看起来很臃肿。从长远来看,除了节省我的团队时间之外什么也没做。

如果需要,使用库文件夹也会使某人更新nuget包变得非常重要。他们需要记住将它移动到这个新的libary文件夹并引用它。

值得记住的是,当您更新nuget包时,旧版本仍保留在packages文件夹中,fyi。

如果你有自动构建系统,最后使用像Nuget Restore这样的工具可能不会起作用,因为他们需要项目中包含的引用DLL,并且不会自动下载它们。