所以我想使用NuGet来管理我用于我的团队和我正在进行的特定项目的各种项目。到目前为止,我已将我的.js库文件放在我的Web解决方案(ASP.NET MVC 2)的/ Scripts目录中并引用了这些文件。当然,这是手动的,在升级等过程中管理很烦人。
现在我正在使用NuGet,我意识到NuGet的整个目标是让它变得相当轻松。此外,似乎我不应该将我的包检查到我的存储库(AKA我不再需要管理我的外部库)。但是,当我从NuGet中获取jQuery(例如)时,它会将其特定文件放在我项目的/ Scripts目录中。
我感到困惑的地方 - 如果有的话,我应该在此时查看源代码管理?我还要检查/ Scripts目录吗?
此外,如果其他人正在处理此项目并从源代码管理中检出解决方案,是否会自动下载软件包(假设解决方案附带有效的packages.config)?
在我们开始全职使用NuGet之前,我只想澄清几点。
答案 0 :(得分:13)
NuGet与VCS有两种情况:办理登机手续或不办理登机手续,这就是问题所在。 两者在我看来都是有效的,但是当使用TFS作为VCS时,我肯定会选择no-checkin policy for NuGet packages。
话虽如此,即使对NuGet包使用no-checkin策略,我仍然会检查这些NuGet包对我的项目所做的内容更改。 \Scripts
文件夹将完整地签入(不是选择性的,不会被忽略)。
我的包裹的禁止签入政策意味着:不检查\ Packages文件夹(cloak it,忽略它),\Packages\repositories.config
文件除外。
因此,你实际上没有提交任何NuGet包,并且在使用NuGetPowerTools中的Enable-PackageRestore
时(这将在NuGet v1.6中内置),任何检查出来的机器代码和构建,将在预构建步骤中获取所有必需的NuGet依赖项。
对于本地开发机器和构建服务器都是如此,只要在解决方案中启用Enable-PackageRestore
并指向正确的NuGet存储库(本地,内部,外部)。
如果你考虑一下,当安装一个只添加对某些二进制文件的引用的NuGet包时,你已经在no-checkin场景中做了同样的事情:你不会提交\Packages
文件夹的子文件夹,但是,您仍然会提交项目更改(添加的参考)。
我会说,保持一致(对于任何类型的包),无论是仅包含二进制文件,仅包含内容还是混合。 Do not commit the packages themselves,确实将更改提交到您的来源。 (如果只是为了避免查找改变内容的麻烦)
答案 1 :(得分:1)