Как скрыть от потребителя библиотеки лишние зависимости?



Недавно, я написал небольшую надстройку над AutoFixture, которая позволяет при создании объекта базового абстрактного класса получить экземпляр случайного наследника.



Допустим, у нас есть подобная иерархия:



abstract class A { }

class B : A { }

class C : A { }




Если написать fixture.Create<A>(), то мы получим исключение, поскольку вызывать new для абстрактных классов запрещено.

Ожидается, что мы получим случайным образом либо new B(), либо new C().



Однако, базовый функционал библиотеки не даёт такого поведения из коробки.

С помощью моего NuGet пакета можно настроить fixture таким образом, и всё заработает:



fixture.CustomizePolymorphism<A>()

.WithDerivedType<B>()

.WithDerivedType<C>()

.BuildCustomization();




Так вот при создании библиотеки возникла проблема.

В связи с тем, что она создана как дополнение к AutoFixture, присутствует зависимость, которая потом попадает к потребителю в раздел Implicitly Installed Packages.

Согласитесь, неприятно.



Решается проблема очень просто, достаточно пометить зависимость атрибутом PrivateAssets со значением all в конфигурации файла проекта:



<PackageReference Include="AutoFixture" Version="4.18.0" PrivateAssets="all"/>