Почти всегда для создания полностью независимого исполняемого файла приходится вручную запихивать все внешние файлы и библиотеки в ресурсы exe, что жутко не удобно и отнимает много времени.
В IDE Lazarus — так и не успев докопаться до какого-то простого и, желательно, однострочного решения — я запаковывал все внешние ресурсы в исполняемый файл и при запуске происходила распаковка всех нужных файлов в папку с программой. По сути, это был инсталлятор, который проводил выверку наличия внешних ресурсов и всегда мог дописать то, что исчезло, а уже потом запуститься.
Удобно ли это? Отчасти. Точнее, для определенных целей.
В Visual Studio для создания независимого приложения можно использовать пакет Costura.Fody. Это волшебная штука, которая проводит упаковку ресурсов в полностью автоматическом режиме и ничего ни от кого не требует. Всё, что нужно — это интегрировать её в свой проект!
Устанавливается Costura.Fody напрямую из менеджера NuGet.

Сразу после установки пакета в проект — нужно проследить, чтобы присутствовала ссылка Costura.

Больше от разработчика ничего не требуется — во время сборки Costura.Fody интегрирует все сопутствующие файлы в exe и проследит, чтобы все связи были верны.
Само собой, пакет не занимается очисткой файлов, которые переносит среда разработки в папку сборки. Хотя, говорят, что и этот недосмотр можно автоматизировать…
UPD: думаю, что стоит ещё рассказать о том, как пришпандорить к исполняемому файлу те библиотеки, которые Costura.Fody не сможет упаковать. Они, как правило, считаются неуправляемыми библиотеками.
Для начала — находим в папке с проектом файл FodyWeavers.xml и приводим его к (примерному) виду:
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> <Costura Unmanaged32Assemblies='Magick.Native-Q8-x86'/> <Costura Unmanaged64Assemblies='Magick.Native-Q8-x64'/> </Weavers>
В качестве примера я взял библиотеки из пакета Magick.Net. Обращаю внимание, что здесь в исполняемый файл будут «вшиты» сразу обе библиотеки — для обеих платформ. Если нужна библиотека только для одной платформы — удалите лишнюю запись.
Для того, чтобы Costura.Fody поняла где какая библиотека, создаём в корне проекта две папки: costura-win-x86 и costura-win-x64. Далее размещаем в этих папках соответствующие библиотеки и смело собираем проект.