Это относится не только к Core под Ubuntu. К обычному .Net под Windows это тоже относится.
Решают эту проблему добавлением всех зависимостей исполняемого файла (например .exe) в ресурсы этого самого .exe. Затем при запуске приложения регистрируется обработчик события AppDomain.AssemblyResolve, который достаёт нужную сборку из ресурсов, загружает ее в домен и возвращает ссылку на нее среде.
AppDomain.AssemblyResolve вызывается каждый раз когда приложению нужна какая-нибудь зависимость.
Это
просто и несложно реализуется, при этом это не займет много времени.
Также есть и библиотеки, которые встраиваются в процесс билда и позволяют это дело автоматизировать. Выше уже был упомянут
ILMerge, также есть
Fody, возможно есть еще какие-то аналоги.