我试图找出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,它将如何知道该怎么做。它只是通过包源中的优先级吗?
我问,因为我有一个来自本地源的包,我删除了包并禁用了包源,清理了解决方案并重建了。它起作用的时候我预计它会失败。
非常感谢。
答案 0 :(得分: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中相同的顺序搜索它