为啥我应该将 NuGet 包 dll 添加到源代码管理?

Posted

技术标签:

【中文标题】为啥我应该将 NuGet 包 dll 添加到源代码管理?【英文标题】:Why should I add NuGet packages dlls to source control?为什么我应该将 NuGet 包 dll 添加到源代码管理? 【发布时间】:2014-02-06 09:19:39 【问题描述】:

我习惯于将 dll 保留在源代码控制之外。使用 NuGet 包也可以轻松完成。

但是,我注意到一些流行的操作系统项目(例如https://github.com/octokit/octokit.net、https://github.com/AutoFixture/AutoFixture)更喜欢保持 dll 签入。为什么会这样?

【问题讨论】:

【参考方案1】:

所以,Mark Seemann 在his post 中完全回答了这个问题。我完全同意所有观点。

【讨论】:

Microsoft 认为这是错误的并建议使用 Package Restore,并提供了此处列出的 4 个原因:docs.microsoft.com/en-us/nuget/consume-packages/…【参考方案2】:

您还会发现一些流行的操作系统项目正好相反。一旦一个包被推送到 NuGet 存储库,它就再也不会被触及。我认为作为包所有者,您甚至没有能力修改现有包。您必须使用另一个版本号上传更新版本。所以每个推送的包都是独一无二的。 甚至已删除的包也会保留在后台。因此,如果您的某些项目引用了已删除的包,它仍然会被恢复,但它不再列在 repo 中。 我不喜欢混淆我的 source 控制的事实,并且我喜欢只检查运行程序所需的东西。 实际上,您正在依赖外部资源。如果您不喜欢这个事实,还有另一种选择。您可以创建自己的存储库,可能是基于网络共享的文件,您可以在其中保存您正在使用的软件包的副本。

【讨论】:

【参考方案3】:

稳定的主干总是指某些版本的 dll。由于更改了函数参数等,较新或较旧版本的 dll 可能不兼容。 因此,将您的 dll 置于版本控制之外可能会导致您的工作 dll 版本丢失。

另外,请参阅NuGet's policy on deleting packages。

【讨论】:

此警告不适用于 NuGet 包。它们总是按版本引用。包还原(自动和手动)将始终还原正确的版本。 @bzlm 如果 NuGet 上不再提供旧包怎么办? docs.microsoft.com/en-us/nuget/policies/deleting-packages@Backwards_Dave

以上是关于为啥我应该将 NuGet 包 dll 添加到源代码管理?的主要内容,如果未能解决你的问题,请参考以下文章

如何使我的托管 NuGet 包支持 C++/CLI 项目?

如何从源代码管理中排除 NuGet 内容

nuget服务器搭建,以及如何发布一个Nuget包

NuGet 包 Microsoft.SqlServer.Compact 不复制本机 DLL

如何在我的新CSPROJ类库中包含带有本机dll的NuGet包?

在 Visual Studio 中添加引用和将 Nuget 包添加到项目之间的区别