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