<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. На мой взгляд, преимущество сокращения сценария сборки на один шаг не стоит тех проблем, которые оно приносит.