К сожалению, текущий файл nuspec не обеспечивает управление зависимостями в зависимости от типа проекта.В настоящее время мы поддерживаем таргетинг на разные версии фреймворка, но это не применимо в вашей ситуации.
Рекомендуется обрабатывать все зависимости с использованием ссылок на пакеты.Хотя технически можно было бы загрузить и установить пакет с помощью сценария PowerShell, это не поддерживается и, скорее всего, сломается в будущих версиях.
Сначала определите, будет ли на самом деле проблемой ссылаться на веб-пакетв не веб-проекте.Просто потому, что на сборки ссылаются, если они не используются, это не должно иметь влияния.
Если окажется, что наличие веб-зависимости вызывает нежелательные побочные эффекты, то вам нужно будет создать отдельные пакеты.
Я бы разбил ваш пакет на логические кусочки.Как вы заявляете, у вас есть пакет, который используется не веб-проектами.Веб-проекты требуют зависимости от другого пакета.
Итак, теперь у вас есть 2 логических пакета:
- MyProject
- MyProject.Web
- MyProject (зависимости)
- SomeOtherPackage
Таким образом, пользователь будет Install-Package MyProject
для не-веб-проектов и Install-Package MyProject.Web
для веб-сайтовпроекты.
На этом этапе вы бы сделали, и все будет хорошо.Но я думаю, что вы должны рассмотреть еще один шаг.Одна из проблем, с которыми я сталкиваюсь в этих пакетах split , заключается в том, что мне нужно выяснить, какой именно пакет мне нужно установить.Я должен знать, что мне нужна «Веб» версия.
На этом этапе определите типичный вариант использования вашего пакета.Если 90% ваших пользователей будут устанавливать веб-версию, я бы сделал «мета-пакет», в котором просто есть зависимости для ваших общих пакетов.
В вашем случае я бы сделал 3 пакета:
- MyProject ( метапакет )
- MyProject.Web
- MyProject.Core
- SomeOtherPackage
- MyProject.Core (обычный не-веб-пакет)
Путем создания «мета-пакета»Вы можете зарезервировать «короткое» имя пакета для наиболее распространенного случаяЭтот метапакет имеет зависимости только от других пакетов.
Хорошим примером этого является пакет SignalR.
Надеюсь, это было полезно.