У меня есть пакет X в зависимости от другого пакета Y. По умолчанию (Visual Studio 2015 Upd3 + nuget 3.5) любой проект, ссылающийся на пакет X, будет обновляться со ссылкой на пакет Y тоже. Проблема в том, что клиентам X вообще не нужна ссылка на Y, поскольку API пакета Y не является и не должен подвергаться воздействию клиентов.Нетранзитивные зависимости пакетов?
Итак, ожидаемое поведение следующее: после добавления ссылки на пакет X содержимое пакета Y должно быть скопировано в папку вывода при сборке, но пакет Y не должен быть добавлен в ссылки на проект.
Есть ли какой-либо способ?
Теоретически мы можем включить источники пакета инфраструктуры Y в наш проект X (оба проекта являются openource под лицензией MIT), но я предпочел бы использовать более или менее стандартный подход.
Пример случаев, почему нам нужно это:
Случая мы расследуем прямо сейчас: NuGet пакет с тестом-помощником, который гарантирует, что PDB файлы соответствуют источникам (справки
Microsoft.DiaSymReader
пакета). Мы не хотим, чтобы все наши тестовые проекты ссылались на сборкуMicrosoft.DiaSymReader
.Более или менее теоретический (не проблема на данный момент, но будет проблемой, если проект будет запущен в производство): механизм пользовательского сценария, который использует Roslyn для компиляции и запуска скриптов. Мы не хотим ссылаться на сборки Roslyn во всех проектах, которые будут использовать наш скриптовый движок.
последнем случае гораздо хуже, так как мы не можем объединить Рослины источников в наш проект, очевидно, и не можем распространять Рослины двоичных файлов как часть нашего пакета тоже.
Любые предложения приветствуются!
Да, мы также рассматриваем этот вариант, но это может привести к неразрешимому конфликту зависимости. В качестве примера: мы поставляем Y.dll v1.0 как часть нашего пакета X, сторонний проект ссылается на наш пакет X, а затем добавляет явную ссылку на пакет Y v2.0. Это определенно не подходит для крупных инфраструктурных зависимостей, таких как Roslyn. Поэтому мы предпочли бы остаться с нормальными зависимостями nuget, но не включив их в ссылки на проекты клиентов. – Sinix