Отсутствует файл NuGet.targets в существующем проекте - PullRequest
0 голосов
/ 17 января 2019

Сценарий:
1. Создано НОВОЕ решение
2. РАЗРЕШЕНО загрузить отсутствующие пакеты
3. Добавьте проекты в решение, которое уже существует и зависит от пакетов nuget
4. Построение решения выдает ошибку:

... The missing file is <solution folder>\.nuget\NuGet.targets.

Почему? Что-то упустили?

Я использую Visual Studio 2017 Pro в Windows 10

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

1 Ответ

0 голосов
/ 18 января 2019

<solution folder>\.nuget\NuGet.targets - это файл, который расширение Visual Studio NuGet использовало для добавления в Visual Studio 2010, 2012 и 2013, когда вы щелкаете правой кнопкой мыши по решению и выбираете «Включить восстановление пакета NuGet». Затем он добавил бы импорт во все файлы вашего проекта для импорта файла целей. Недавно я расследовал проблему клиента , и в ходе этого расследования я обнаружил, что она внесла следующие изменения. В верхней части csproj добавляется что-то вроде этого:

<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<RestorePackages>true</RestorePackages>

и около конца csproj добавляет что-то вроде этого:

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
  <PropertyGroup>
    <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
  </PropertyGroup>
  <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

Итак, проблема в том, что вы создаете новое решение, но используете существующие файлы проекта, которые были изменены таким образом. Один из вариантов - отредактировать ваши файлы csrpoj и удалить эти изменения. Другим вариантом является создание новых проектов, в дополнение к новому решению, а затем копирование всего кода и файлов содержимого.

Единственный недостаток - если вы собираете на сервере CI и используете packages.config, ваш скрипт сборки должен запускать nuget.exe restore, тогда как проекты, использующие NuGet.targets, могут просто построить решение, а msbuild выполнит восстановление nuget по мере необходимости. , Одно из преимуществ отказа от использования NuGet.targets заключается в том, что восстановление всего решения происходит быстрее, чем восстановление проекта за проектом. Visual Studio автоматически восстанавливает пакеты при сборке, даже в VS2010, VS2012 и VS2013, поэтому лично я не рекомендую использовать эту функцию, даже если вы используете эти старые версии Visual Studio. На мой взгляд, преимущество сокращения сценария сборки на один шаг не стоит тех проблем, которые оно приносит.

...