Можно ли использовать OctoPack с новым форматом PackageReference NuGet?

Недавно мы обновили наши сборки, чтобы использовать PackageReference формат вместо packages.config для наших зависимостей NuGet. Один из пакетов, OctoPackперестал работать после этого. Есть ли способ получить OctoPack работать, все еще используя PackageReference формат?

0 ответов

Да. Последние версии Nuget будут автоматически генерировать импорт для задач MSBuild в файле obj/xxx.csproj.nuget.g.targets.

Если нет...

При использовании packages.config Nuget добавит что-то подобное в ваш csproj.

<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('..\packages\OctoPack.3.6.4\build\OctoPack.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\OctoPack.3.6.4\build\OctoPack.targets'))" />

а также

<Import Project="..\packages\OctoPack.3.6.4\build\OctoPack.targets" Condition="Exists('..\packages\OctoPack.3.6.4\build\OctoPack.targets')" />

Цель EnsureNuGetPackageBuildImports, вероятно, уже существует, даже раньше.

Если вы добавите это в свой csproj (или оставите его, если вы преобразовали из packages.config), он все равно будет работать. Проблема в том, что пакеты не хранятся в "..\packages".

Это легко исправить, заменив, например, "..\packages\OctoPack.3.6.4" на "$(NuGetPackageRoot)\octopack\3.6.4". Конечно, вам понадобится PackageReference для octopack. Достаточно будет сделать операцию восстановления, поместив пакет в $(NuGetPackageRoot).

YMMV, но у меня работает как локально, так и в CI (TeamCity)

Да, но вы должны использовать Octo.exe pack (тот же процесс, что и для приложений ASP.NET Core)

Другие вопросы по тегам