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

TeamCity - MSBuild не может найти ссылки NuGet

Попытка создать проект С#, который имеет многочисленные ссылки на сборки в пакетах NuGet, терпит неудачу в TeamCity, но отлично работает в Visual Studio.

Найден в журнале;

For SearchPath "{HintPathFromItem}".

[13:48:15][ResolveAssemblyReference]         
Considered "..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll", but it didn't exist.

Ссылка в файле проекта:

<Reference Include="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>..\packages\AspNetMvc.4.0.20126.16343\lib\net40\System.Web.Mvc.dll</HintPath>
</Reference>

Любые идеи? Похоже, что он не начинается с правильного каталога, поэтому не может разрешить "../packages", который существует на один уровень выше файла .csproj.

4b9b3361

Ответ 1

Я изменил свои проекты с момента установки пакетов NuGet, поэтому даже если "../packages" был правильным для основного проекта, это было не для других проектов, которые были перемещены.

Удаление и повторная установка пакетов NuGet записывает пути правильно или более просто, выполняя поиск и замену на пути в каждом файле .csproj.

Ответ 2

Я знаю, что на это был дан ответ, но, возможно, у кого-то была такая же проблема.

Мои пути подсказки в файле проекта неправильно указывали на пакеты и меняли их на .packages, исправил это для меня.

Изменим это:

<Reference Include="Newtonsoft.Json">
  <HintPath>packages\Newtonsoft.Json.5.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

Для этого:

<Reference Include="Newtonsoft.Json">
  <HintPath>..\packages\Newtonsoft.Json.5.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

Исправлено.

Ответ 3

Вам либо нужно добавить каталог пакетов в исходный элемент управления, либо включить nuget для автоматической загрузки пакетов (его функция в меню правой кнопки мыши в nuget 1.6)

См. http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Ответ 4

Мое понимание на данном этапе основано на информации здесь: http://youtrack.jetbrains.com/issue/TW-20525

Но я просто погружаюсь в TeamCity и NuGet одновременно (из CruiseControl.NET)

Так что я на данный момент должен добавить шаг сборки NuGet Installer перед моим шагом сборки решения vs .net, и все отлично поработало.

Ответ 5

Извините за воскрешение этого старого сообщения, но в дополнение к вышеуказанным отличным точкам (Tjaart, SeeNoWeevil, Luke) вы также можете проверить свойство CopyLocal=true для ссылок, которые вы упустили.

Для меня это часто был один крошечный надзор, который приводит к точно той ошибке, о которой говорил OP.

Ответ 6

Убедитесь, что файлы .dll и .pdb включены в исходный элемент управления (или были загружены).

Для TFS (не TeamCity) по умолчанию исключаются файлы .pdb и .dll. Поэтому дважды проверьте, что все файлы для каждого подкаталога пакета включены, а не только файл nuget .xml.

Справочная информация. Я пришел к этому вопросу с той же мыслью, что и другие плакаты, - что относительная ссылка в файле .csproj может быть неправильной. После использования пути в файле .csproj, чтобы убедиться, что ссылка была абсолютной в отношении проекта...     <HintPath>$(MSBuildProjectDirectory)\..\.nuget\packages\Common.Logging.Core.3.0.0\lib\net40\Common.Logging.Core.dll</HintPath> ... только чтобы получить ту же ошибку, я дважды проверил, что требуемые файлы существуют. Я также создал сборку MSBuild на своей локальной машине (в отличие от сборки Visual Studio), и она сработала. Дальнейшее исследование на сервере сборки показало, что указанные файлы не существовали, даже если файлы каталога и .nuget .xml делали.

Ответ 7

Вы можете выделить файл в обозревателе решений и перейти к свойствам и убедиться, что для параметра Copy to Output Directory установлено значение True