Восстановление пакета Nuget

Я пытаюсь выяснить, как 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 просто использует строку идентификатора пакета, как он узнает, что делать, если у меня есть несколько источников пакетов, в которых оба списка доступны с одним и тем же идентификатором пакета. Это просто через приоритет в источниках пакетов?

Спрашиваю, потому что у меня есть пакет из локального источника, я удалил пакеты и отключил источник пакетов, почистил решение и пересобрал. Это сработало, когда я ожидал, что это не сработает.

Большое спасибо.


person obaylis    schedule 02.05.2013    source источник


Ответы (1)


В вашем посте 2 вопроса, поэтому я постараюсь ответить по одному:

Как NuGet узнает, какие пакеты нужно восстановить?

Как вы уже догадались, Nuget использует папку .Nuget для автоматической установки отсутствующих пакетов. Внутри папки .Nuget есть файл с именем «Nuget.targets», который в основном представляет собой файл проекта VS (.csproj), содержащий эту строку.

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

который берет на себя установку пакетов, перечисленных в файле packages.config, в каждом проекте.

Итак, если Nuget просто использует строку идентификатора пакета, как он узнает, что делать, если у меня есть несколько источников пакетов, в которых оба списка доступны с одним и тем же идентификатором пакета?

В %appdata%\nuget.config вы можете увидеть список «источников пакетов» для Nuget: для данного packageId Nuget будет искать его в этих источниках пакетов в том же порядке, что и в nuget.config.

person Son    schedule 03.05.2013