Оригинал: http://yer.ac/blog/2019/09/05/dotnet-pack-project-reference-and-nuget-dependency/
Недавно я пытался создать больше пакетов Nuget для наших проектов Core dotnet, используя Packot Pack
команда. Одним из проблем, с которыми я сталкивался состоит в том, что команда была либо ссылаться на необходимые пакеты Nuget, либо в проекте справочника DLL, никогда не оба.
Текущая проблема.
Если у вас есть Проект А, который имеет ссылку на проект в Project B, а также в том числе пакет NuGet под названием Пакет можно было бы ожидать сгенерированный пакет содержит ссылку как необходимого NuGet пакета, и DLL (ы) для проекта В, да? Это, однако, не так, как работает команда Dotnet Pack.
Этот вопрос широко сообщается на их репо (например, https://github.com/nuget/home/issues/3891 ), и, к сожалению, кажется, разработчики, и сообщество в значительной степени разногласийся к тому, что » правильный». Официальная позиция (как я поняла) состоит в том, что ссылки на проекты не будут включены в том, что они должны быть их собственными пакетами. Это, однако, не всегда практично или желательно.
Обходной путь.
Вокруг переполнения стека были предложены множество обходных путей.
Решение ниже работало для меня, но, конечно, YMMV.
В конце концов я бросил, имея свой собственный .NUSPEC
Файл в моем проекте (согласно некоторым, так что посты) и вместо этого используется CSPROJ (как рекомендуется). Ниже вы можете увидеть необходимые поля для упаковки (версии, именования и т. Д.), ссылки на пакет Nuget и ссылку на другой проект в решении.
Фрагмент CSProj с базовой информацией о пакете заполнен.
Если вы запустите пакет Dotnet сейчас, он будет генерировать соответствующим образом по имени пакет, который будет содержать зависимость от Nuget на Somenugepackage
Отказ Это может быть подтверждено, открывая NUPKG с помощью архива инструмента (7ZIP, WinRAR, Winzip …) и увидеть, что единственная DLL в lib
Папка будет DLL проекта, упакованного.
Исправление выглядит следующим образом:
- Измените ссылку на проект, чтобы установить
Справедливое предприятие Флаг к True, а
Includeassetsна имя DLL
true ProjectB.dll
- Добавьте следующую строку в
элемент
$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage
- Добавить новую цель между
<Проект>
теги
Так что теперь вы в конечном итоге с чем-то, что выглядит так
Конечный результат CSPROJ. (Нажмите, чтобы увеличить)
Теперь, если вы запускаете Pack dotnet, вы должны увидеть любую ссылку на проект DLL под lib
Папка пакета, и если вы проверяете файл NUSPEC внутри пакета (или загрузить его в свой пакет REPO), вы должны увидеть зависимости Nuget.
Надеюсь, это поможет кому-то, так как вокруг существует много противоречивых информации. Пожалуйста, дайте мне знать, если бы это вызвало какие-либо проблемы!
Пост Включите как ссылки на пакет Nuget, и справочник проекта DLL, используя «Packot Pack dotnet» 📦 появился первым на yer.ac | Приключения разработчика и других вещей. .
Оригинал: «https://dev.to/yerac/include-both-nuget-package-references-and-project-reference-dll-using-dotnet-pack-2d8p»