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.
Ответы
Ответ 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