TeamCity - MSBuild не может найти ссылки NuGet - PullRequest
13 голосов
/ 16 марта 2012

Попытка создать проект C #, который имеет многочисленные ссылки на сборки в пакетах 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.

Ответы [ 7 ]

9 голосов
/ 25 июня 2013

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

Мои пути подсказок в файле моего проекта неправильно указывали на пакеты и меняли их на ..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>

Исправлено.

6 голосов
/ 28 марта 2012

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

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

1 голос
/ 31 января 2013

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

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

Итак, на данный момент я добавил этап сборки «NuGet Installer» перед этапом сборки решения vs.net, и все заработало замечательно.

0 голосов
/ 27 декабря 2017

Убедитесь, что файлы .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 сделали.

0 голосов
/ 13 июля 2014

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

Для меня это часто было одним крошечным упущением, которое приводит именно к ошибке, о которой упоминал ОП.

0 голосов
/ 16 марта 2012

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

0 голосов
/ 16 марта 2012

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

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

...