Version control 如何在团队开发中正确使用NuGet?

Version control 如何在团队开发中正确使用NuGet?,version-control,nuget,Version Control,Nuget,因此,我想使用NuGet来管理我和我的团队正在进行的特定项目中使用的各种项目。到目前为止,我已将.js库文件放在web解决方案(ASP.NET MVC 2)的/Scripts目录中,并引用了这些文件。当然,这是手动的,在升级等过程中管理起来很烦人 现在我正在使用NuGet,我意识到NuGet的整个目标是让它变得相当轻松。此外,我似乎不必将包签入存储库(也就是说,我不再需要管理外部库)。但是,当我从NuGet获取jQuery(例如)时,它会将其特定文件放在项目的/Scripts目录中 我感到困惑的

因此,我想使用NuGet来管理我和我的团队正在进行的特定项目中使用的各种项目。到目前为止,我已将.js库文件放在web解决方案(ASP.NET MVC 2)的/Scripts目录中,并引用了这些文件。当然,这是手动的,在升级等过程中管理起来很烦人

现在我正在使用NuGet,我意识到NuGet的整个目标是让它变得相当轻松。此外,我似乎不必将包签入存储库(也就是说,我不再需要管理外部库)。但是,当我从NuGet获取jQuery(例如)时,它会将其特定文件放在项目的/Scripts目录中

我感到困惑的地方是——如果有什么问题的话,我现在应该检查源代码管理吗?我是否仍然签入/Scripts目录

此外,如果其他人正在处理此项目并从源代码管理中签出解决方案,是否会自动下载包(假设解决方案附带有效的packages.config)

在我们开始全职使用NuGet之前,我只是想澄清几点。

就像是工件库(工件是任何类型的可交付成果,包括潜在的大型二进制文件)

副作用是您不能在VCS(版本控制系统)中存储以下元素:

  • 不会从VCS功能(分支、合并)中获益
  • 将显著增加VCS存储库的大小(无增量或弱增量存储)
  • 很难从VCS存储库中删除(主要用于保存历史)
但目标是让您声明所需内容(并让NuGet为您取回),而不是自己存储。

因此,您可以将
/Scripts
版本设置为占位符,但您不需要再对现在自动获取的任何内容进行版本设置。

NuGet vs VCS有两种情况:签入还是不签入,这是问题所在。 在我看来,这两种方法都是有效的,但当使用TFS作为VCS时,我肯定会选择一种

也就是说,即使对NuGet软件包使用“不签入”策略,我仍然会签入这些NuGet软件包对我的项目所做的内容更改。
\Scripts
文件夹将全部检入(不是选择性的,也不是忽略的)

对我来说,包的不签入策略意味着:不签入\packages文件夹(,忽略它),除了
\packages\repositories.config
文件

因此,您实际上没有提交任何NuGet包,当使用NuGetPowerTools中的
Enable PackageStore
时(这将在即将到来的NuGet v1.6中内置),任何签出代码和构建的机器都将在预构建步骤中获取所有必需的NuGet依赖项。 只要在解决方案中启用了
Enable PackageRestore
,并指向正确的NuGet存储库(本地、内部、外部),本地开发机器和构建服务器都是如此

如果您考虑一下,在安装仅添加对某些二进制文件的引用的NuGet包时,您已经在不签入场景中执行了相同的操作:您不会提交
\Packages
文件夹的子文件夹,但仍然会提交项目更改(添加的引用)


我会说,要一致(对于任何类型的包),无论它只包含二进制文件、只包含内容还是混合,请将更改提交给您的源。(如果只是为了避免查找更改内容的麻烦)

关于自动构建呢?如果脚本不在源代码管理中,那么如何将它们打包到构建输出中以启用部署?我只是第一次在特定的解决方案中使用NuGet。我得到了jQuery,然后编辑了.csproj文件以查看所做的更改。脚本只是作为内容文件包含的。如果这些文件没有存储在源代码管理中,我看不到任何东西会导致这些文件在自动生成过程中神奇地出现。@JohnSaunders:它们应该作为生成命令的一部分自动出现,该命令将读取配置文件,调用Nuget以获取正确的工件版本,并在它们不在本地的情况下下载它们:这意味着,不再需要在VCS中包含这些(库、exe、dll等)。看看在团队建设中是什么导致这种情况发生的。我看不出魔法是怎么来的。没有新的目标或任何东西。另外,我希望您不是说包的版本可能会从一个版本更改到下一个版本。我们的QA人员想知道类似的事情。@JohnSaunders:对配置文件()的任何更改都会在下一次构建时触发必要的工件更新。谢谢,“签入项目更改”是缺少的重要部分!