1

我试图弄清楚 NuGet 如何知道它需要还原哪些包(以及它如何知道在哪里找到它们),以防它们在本地不存在(即,当包尚未提交到源代码管理时)。

我可以在解决方案中看到我有一个 .nuget 目录,但它基本上只包含 NuGet.exe。每个项目中都有一个 packages.config ,看起来很有希望,其中包含以下内容(为清楚起见而缩短);

<?xml version="1.0" encoding="utf-8"?>
<packages>
 <package id="AutoMapper" version="2.2.1" targetFramework="net40" />
</packages>

我期待看到一个指向包源的 URL。因此,如果 Nuget 只使用包 ID 字符串,如果我有多个包源都列出了可用的相同包 ID,它怎么知道该怎么做。只是通过包源中的优先级吗?

我问是因为我有一个来自本地来源的包,我删除了这些包并禁用了包源,清理了解决方案并重新构建。当我预计它会失败时,它起作用了。

非常感谢。

4

1 回答 1

2

您的帖子中有2个问题,因此我将尝试一一解决:

NuGet 如何知道它需要还原哪些包?

如您所料,Nuget 使用 .Nuget 文件夹自动安装缺失的包。在 .Nuget 文件夹中,有一个名为“Nuget.targets”的文件,它基本上是一个包含这一行的 VS 项目文件 (.csproj)

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -nocache  $(RequireConsentSwitch) -solutionDir "$(SolutionDir) "</RestoreCommand>

它负责在每个项目中安装 packages.config 文件中列出的包。

因此,如果 Nuget 只使用包 ID 字符串,如果我有多个包源都列出了可用的相同包 ID,它怎么知道该怎么做?

在 %appdata%\nuget.config 中,您可以看到 Nuget 的“包源”列表:对于给定的 packageId,Nuget 将按照与 nuget.config 中相同的顺序在这些包源中搜索它

于 2013-05-03T11:58:39.710 回答