Если nuget указывает PrivateAssets=all, зачем указывать IncludeAssets?

На страницах установки nuget для пакетов, предназначенных только для разработки (например, анализаторов, инструментов сборки), обычно отображается следующее:

      <PackageReference Include="Foo" Version="1.2.3">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime;build;native;contentfiles;analyzers;...</IncludeAssets>
</PackageReference>

Для таких пакетовPrivateAssetsсвойство всегда установлено вall.

The IncludeAssetsсвойство также всегда указывается. Это точно лишнее?

1 ответ

Актив не указан вInlcudeAssets, так что на самом деле это не то же самое. Отсутствие активов означает, что если пакет содержит какие-либо dll подlib/илиref/, вы не сможете вызывать эти API, что хорошо, поскольку пакет не будет указан как зависимость от вашего собственного пакета.

Если вы удалите эту строку и вызовете API, а затем любого, кто использует ваш пакет (и вызовет API, который использует вашу ссылку на пакет «privateassets=all»), то во время выполнения будет выдано исключение FileNotFoundException.

Итак, имеяIncludeAssetsлиния, удаляющаяcompileвещь хорошая, хотя того же можно было бы добиться, заменив ее на<ExcludeAssets>compile</ExcludeAssets>, что было бы намного понятнее.

Я чувствую, чтоruntimeтакже следует исключить, но я понятия не имею, почему люди, работавшие над NuGet в то время, когда это было реализовано, приняли другое решение.

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