3

I've been trying to implement a Nuget policy inside my company and I was wondering what is the real value of Automatic Package Restore when working on internal projects on a internally hosted TFS.

I understand that in OpenSource projects or when using externally hosted source control not checking in external packages can save a lot of disk space, but apart from this advantage (saving disk space on the server) I cannot see any other advantage in using the automatic restore: actually it gives us some problem as the build machine doesn't connect to internet and for using that feature we'd either change firewall rules or keeping a local cache of the nuget repository.

Thank you

4

2 回答 2

2

正如史蒂文在他的回答中指出的那样使包不受源代码控制的主要原因是减少需要由源代码控制服务器存储和从/向源代码控制服务器传输的数据量。显然,在您控制所有硬件的公司中,磁盘空间和网络传输都不是问题,但是如果您不需要,为什么要浪费磁盘空间/时间来处理软件包。请注意,包目录的大小可能占工作空间总大小的相当大的百分比。在我的情况下,packages 目录在使用 TFS(对于我的工作工作区)时占总工作区的 80% - 95% 之间,对于我的私人工作区(基于 git,因此具有 .git)占 50% - 75% 之间占用一些空间的目录)。

解决 Nuget.org 访问问题的一种方法是拥有自己的本地包存储库。此本地包存储库可以是本地nuget Web 服务,也可以只是服务器上的共享目录。因为存储库位于公司 LAN 内,所以构建服务器访问本地 nuget 存储库应该不是什么大问题。这种方法的一个附带好处是您的构建过程独立于 Nuget.org(在极少数情况下它会崩溃),更重要的是,您确切知道哪些包被拉入构建(因为它们将被批准本地存储库中的软件包)。

对我们来说,是否使用本地 nuget 存储库和包还原选项取决于我们将所有内部库打包为 nuget 包的决定(我在另一个 nuget 问题的回答中描述了我们的开发过程)。因此,我们需要一个本地包存储库来分发这些内部包。这意味着将第三方包添加到这个存储库很容易,因此使用包还原非常有意义。如果您不将内部库打包为 nuget 包,那么您会将它们与解决方案和代码文件一起放在源代码管理中。在这种情况下,您也可以对第三方库执行相同的操作。

最后,这一切都是取舍。磁盘空间与基础设施设置的简易性等。选择最适合您环境的解决方案。

于 2014-03-17T20:08:23.113 回答
1

来自 Nuget.org

最初的 NuGet 工作流是将 Packages 文件夹提交到源代码管理中。原因是它与开发人员在没有 NuGet 时通常会做的事情相匹配:他们创建一个LiborExternalDependencies文件夹,将二进制文件转储到那里并将它们提交到源代码管理以允许其他人进行构建。

所以这个想法是,将在构建项目的每台机器上恢复包,以便二进制数据不受源代码控制。而对于像 Mercurial 或 Git 这样的分布式源代码控制系统,这就是在客户端机器和服务器上使用的磁盘空间和带宽。

但是,当您的构建机器无法连接到互联网到 nuget.org(我假设)时,这确实会造成问题。我认为你已经找到了主要的解决方案。将包提交到源代码控制并避免包还原,允许构建机器连接到互联网,或设置本地镜像。

我不会说在您的环境中包还原没有任何优势。我认为提交这些软件包没有太大的危害。但这实际上取决于您的团队如何运作,您的团队期望什么以及您在哪种类型的企业环境中工作。

于 2014-03-17T15:10:46.543 回答