Комментарии 7
Если ваш пакет полностью ориентирован на .NET Core или .NET 5, то вы можете использовать для развертывания нативных сборок механизм на базе каталогов RID. Вы просто копируете нативные сборки в директорию runtimes/win-x64/native
пакета, где win-x64
– это RID целевой платформы, а среда выполнения сама загружает их в память процесса.
Можно также создавать гибридные решения, которые будут поддерживать сразу несколько сценариев развертывания нативных сборок:
- Для .NET Core и .NET 5 использовать каталоги RID.
- Для проектов .NET Framework использовать MSBuild-скрипты
.targets
или.props
. - Для сайтов ASP.NET 4.X использовать PowerShell-скрипты
Install.ps1
иUninstall.ps1
.
В качестве примера можете посмотреть исходный код пакета JavaScriptEngineSwitcher.ChakraCore.Native.win-x64.
Да, хорошее дополнение. На примере с пакетами по DB2, вижу что их делят по целевым системам Windows/Linux/OSX, возможно экономят на размере пакета:
www.nuget.org/packages/IBM.Data.DB2.Core
www.nuget.org/packages/IBM.Data.DB2.Core-lnx
www.nuget.org/packages/IBM.Data.DB2.Core-osx
www.nuget.org/packages/IBM.Data.DB2.Core
www.nuget.org/packages/IBM.Data.DB2.Core-lnx
www.nuget.org/packages/IBM.Data.DB2.Core-osx
На примере с пакетами по DB2, вижу что их делят по целевым системам Windows/Linux/OSX, возможно экономят на размере пакета:
Если хотите больше узнать по этой теме, то рекомендую прочитать мой пост «Let's make the Microsoft ClearScript.V8 fully cross-platform» в репозитории проекта Microsoft ClearScript.
Но если вы в каком-то новом проекте подключите только пакет ViennaNET.Orm.DB2.Win, то IBM.Data.DB2.Core автоматически не подключится.
Есть специальная папка
/buildTransitive
, если вы при билде положите туда файлы *.props
и *.targets
, упакуете это всё в nuget пакет A, потом сделаете другой пакет B, который зависит от пакета А, то можно к проектам подключать только пакет B, а все файлы MSBuild будет подтягивать из пакета A автоматически. (Документация)(Это если я правильно понял суть проблемы)
Все верно, и авторы IBM.Data.DB2.Core в последних версиях своих пакетов используют именно папку «buildTransitive». Это транзитивная зависимость в чистом виде. В описываемом примере, я рассказывал пример, когда вы в своем пакете наследуете контент и скрипты от другого пакета, при этом транзитивно на него не ссылаясь. Это может применяться например для пакетов, у которых нет папки «buildTransitive»…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Наследование в Nuget-пакетах