Указание файлов для добавления в пакет nuget в файле .csproj

Я создаю пакет nuget из некоторого кода, но мне также нужно развернуть некоторые инструменты с пакетом.

В файле .nuspec я могу сделать это с элементом <files>, и все это работает хорошо.

Однако при использовании файла .nuspec packageReferences из файла csproj не включаются, и я вижу некоторые проблемы при их включении вручную (с элементом <dependencies>).

Созданный пакет также всегда восстанавливается как пакет .net framework, даже если он нацелен на .net, как в этот вопрос.

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

Кто-нибудь знает, как это делается?

Если нет, может ли кто-нибудь пролить свет на создание пакета .net framework/.net core nuget из файла .nuspec, который восстанавливает правильную целевую версию и учитывает зависимости пакетов?


person cedd    schedule 19.09.2020    source источник


Ответы (1)


Это непросто найти/обнаружить, но задачи MSBuild от NuGet на странице документов есть раздел под названием включая содержимое в пакет, в котором рассказывается о PackagePath метаданных элементов MSBuild, которые NuGet использует для копирования файлов в пакет.

Итак, в вашем csproj у вас может быть что-то вроде этого:

<ItemGroup>
  <None Include="..\MyTool\Tool.exe" PackagePath="tools" Pack="true" />
</ItemGroup>

и тогда ваш пакет будет содержать tools\Tool.exe. Я не уверен на 100%, что Pack="true" нужен, но в документации он используется в примерах, так что на всякий случай помещаю его сюда.

Вы можете использовать подстановку MSBuild для копирования целых каталогов, если это проще. Include="..\MyTool\*". Мои навыки MSBuild не настолько продвинуты, поэтому я не знаю, как подставить ..\MyTool\**\*, что означает все файлы во всех подкаталогах, сохраняя при этом правильный макет каталога в метаданных PackagePath="???". Поэтому лучшее, что я могу предложить, это один глоб на каталог.

person zivkan    schedule 19.09.2020
comment
Спасибо @zivkan, это сработало отлично. Следует отметить, что это также приводит к переносу всех файлов в проект в Visual Studio, что в моем случае довольно раздражает (файлов много). Мне так и не удалось убедить VS скрыть их, хотя я пробовал Visible=false и ‹Visible›False‹\Visible›, как в stackoverflow.com/questions/56569355/ и stackoverflow .com/questions/45613251/ - person cedd; 24.09.2020