Подтвердить что ты не робот

NuGet не восстанавливает пакеты на сборке

Я только что создал рабочую область на новой машине, получил последний из нашего проекта из TFS, включил NuGet Restore, и я получаю следующий (снятый) вывод:

1>------ Rebuild All started: Project: Caching, Configuration: Debug Any CPU ------
1>  Restoring NuGet packages...
1>  To prevent NuGet from downloading packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages'.
1>  All packages listed in packages.config are already installed.
1>  Caching Framework -> C:\MyProjLocation\Caching\bin\Debug\Caching.dll
2>------ Rebuild All started: Project: Library, Configuration: Debug Any CPU ------
2>C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "LumenWorks.Framework.IO". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
2>C:\MyProjLocation\Library\SomeClass.cs(2,7,2,17): error CS0246: The type or namespace name 'LumenWorks' could not be found (are you missing a using directive or an assembly reference?)

========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

Ни один из пакетов NuGet не был восстановлен (их более 10 - я удалил их из вышеописанного вывода для удобства чтения).

Похоже, что NuGet даже не пытается восстановить пакеты для второго проекта (Library).

Я уже пробовал перемещать импорт целей NuGet ниже импорта CSharp в файл Library.csproj, как указано здесь, но он все еще не работает:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

Я запускаю последнюю версию NuGet (2.7.41101.371) на Visual Studio 2013.

Изменить: packages.config существует, а диспетчер пакетов NuGet имеет проект библиотеки, отмеченный правильными пакетами.

4b9b3361

Ответ 1

Вы также удалили файл NuGet.targets с диска?

Если файл NuGet.tagets присутствует, Visual Studio/NuGet.exe попытается выполнить восстановление пакета MSBuild.

Подробнее см. этот документ.

Ответ 2

Мне нужно было перейти в Source Control и удалить все файлы в папке пакетов (кроме repositories.config), прежде чем NuGet восстановит недостающие пакеты. Идея заключается в том, что вы используете восстановление пакетов, а не проверяете свои пакеты на исходный контроль. Если он видит пакеты в исходном элементе управления, он не будет загружать их.

Ответ 3

Я не уверен в этой науке, но теперь это работало для меня, пытаясь создать недавно загруженный проект Visual Studio и получить несколько предупреждений MSB3245, сопровождаемых сбоем сборки из-за недостающих ссылок:

  • В Visual Studio щелкните правой кнопкой мыши проект с отсутствующими ссылками NuGet и выберите "Управление пакетами NuGet..."
  • Откроется диалоговое окно "Управление пакетами NuGet" . Я также видел сообщение, которое быстро отображается, а затем автоматически закрывается, с текстом в строках "Восстановление пакетов NuGet..."
  • Закройте диалоговое окно "Управление пакетами NuGet" (без изменения чего-либо в диалоговом окне) и повторите попытку сборки.

Изменить: вернуться в мою TimeSnapper историю автозапуска (без привязки к этому инструменту - я просто фанат), похоже, что в верхней части пакета "Управление пакетами NuGet" также появилось сообщение, а также кнопка "Восстановить": "Некоторые пакеты NuGet отсутствуют в этом решении. Нажмите, чтобы восстановить исходные данные в вашем онлайн-пакете".

enter image description here

Хотя "Восстановление", по-видимому, автоматически произошло для меня, нажатие этой кнопки вручную также может сделать трюк для устранения проблемы с отсутствующими пакетами.

Ответ 4

У меня такая же проблема, как и на локальной машине. Хотя и диспетчер пакетов, и nuget.exe restore MySolution.sln сообщают, что все установлено, в каталоге решений нет папки packages, и ссылки на пакеты не разрешаются.

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

Как я это сделал, это запустить:

nuget.exe restore MySolution.sln -PackagesDirectory packages

Это принудительно nuget.exe для загрузки всех пакетов в указанную папку, и все ссылки были восстановлены.

Помните, что из NuGet 2.7 файл целей не поддерживается, msbuild предполагает использовать какой-либо интегрированный способ восстановления пакетов, но он очень часто терпит неудачу.

Фактически, для моей работы я предпочитаю использовать Paket, который всегда работает, когда вы получаете привык к нему. Он также поддерживает целевые файлы и хороший способ создания пакетов NuGet.

Ответ 5

Придется удалить пакеты nuget и выполнить обновление, чтобы он работал правильно. Это может помочь некоторым из вас столкнуться с одной проблемой.