Nuget 不会从源代码管理中恢复包

Nuget does not restore packages from source control

我们正在迁移所有项目以使用 nuget 引用。 连同源代码控制(在我们的例子中是 DevOps 和 Git),我注意到 nuget 包管理器的一个奇怪行为。

当我们签入带有 nuget 引用的项目时,其他同事(签入此项目的人)在项目中遇到引用错误。 我分析了它并注意到,在分支的工作版本中,不包括 nugetpackages 的 dll。 package.config 对我来说看起来不错。

My question to this is: do we need to checkin packages dlls from nuget to the source control? In my understanding nuget should check if the packages/assemblies are downloaded and if not, should re-download them.

在 visualstudio 中的 nuget 包管理器下 -> "Allow NuGet to download missing packages" 和 "Automatically check for missing packages during build in Visual Studio" 两个选项都被选中(在所有客户端上)。

我还签入了一个仅包含 packages.config 的项目 - 没有 packages 文件夹。 但是引用没有像以前那样被识别/在项目的加载/构建时没有发生自动恢复。

不,您不需要在源代码管理中包含包的 dll。 packages.config 就是您所需要的,因为它包含足够的信息来获取 运行 您的代码所需的所有必需库。

在 Devops 中,您需要将 nuget restore task 添加到您的构建中。这将拉下所有必需的 dll。

使用像 nuget(或 npm 等)这样的包管理器可以让您只在源代码管理中保留您的代码。它还可以防止 "it works on my machine" Developer1 具有特定的本地引用的 dll 但 Developer2 没有的情况。

如果个别开发人员出现引用错误,可能是有人签入了对本地文件而不是 nuget 包的引用。

我解决了从 packages.config 切换到 packagereferences 时出现的错误。在构建/重建事件中,所有 DLL 现在都从 nuget 源中提取,如果它们不存在的话。

查看此博文以供参考https://devblogs.microsoft.com/nuget/migrate-packages-config-to-package-reference/