Встраивание DLL в скомпилированный исполняемый файл

Можно ли встроить ранее скомпилированную DLL в скомпилированный исполняемый файл C # (чтобы у вас был только один файл для распространения)? Если это возможно, как можно поступить так?

Обычно я спокоен, когда просто оставляю библиотеки DLL снаружи, а программа установки обрабатывает все, но на работе было несколько человек, которые спросили меня об этом, и я, честно говоря, не знаю.

554
задан cs95 22 July 2019 в 02:42
поделиться

6 ответов

Это может показаться упрощенным, но WinRar дает возможность сжать кучу файлов в самораспаковывающийся исполняемый файл.
Он имеет множество настраиваемых опций: конечный значок, извлечение файлов по заданному пути, файл для выполнения после извлечения, настраиваемый логотип / текст для всплывающего окна, отображаемого во время извлечения, вообще без всплывающего окна, текст лицензионного соглашения и т. Д.
Может быть полезно в некоторых случаях.

3
ответ дан Ivan Ferrer Villa 22 July 2019 в 02:42
поделиться

Это возможно, но не все что легкий, для создания гибридной собственной/управляемой сборки в C#. Если бы Вы были использующий C++ вместо этого, то это было бы намного легче, поскольку компилятор Visual C++ может создать гибридные блоки так же легко как что-либо еще.

, Если у Вас нет строгого требования для создания гибридного блока, я согласился бы с MusiGenesis, что это не действительно стоит проблемы, чтобы сделать с C#. Если необходимо сделать это, возможно, посмотрите на перемещение в C++ / CLI вместо этого.

0
ответ дан Chris Charabaruk 22 July 2019 в 02:42
поделиться

Другим продуктом, который может обработать это изящно, является SmartAssembly, в SmartAssembly.com . Этот продукт будет, в дополнение к слиянию всех зависимостей в единственный DLL, (дополнительно) запутать Ваш код, удалить дополнительные метаданные для сокращения получающегося размера файла, и может также на самом деле оптимизировать IL для увеличения производительности во время выполнения. Существует также некоторая глобальная обработка исключений / создание отчетов о функции, это добавляет к Вашему программному обеспечению (при желании), что я не не торопился для понимания, но мог быть полезным. Я полагаю, что это также имеет API командной строки, таким образом, можно сделать его частью процесса сборки.

7
ответ дан Nathan 22 July 2019 в 02:42
поделиться

Вы могли добавить DLLs как встроенные ресурсы, и затем иметь Вашу программу, распаковывают их в каталог приложения на запуске (после того, как проверка, чтобы видеть, там ли они уже).

Файлы настройки столь легко сделать, тем не менее, что я не думаю, что это стоило бы того.

РЕДАКТИРОВАНИЕ: Эта техника была бы легка с блоками.NET. С non-.NET DLLs это было бы намного больше работы (необходимо будет выяснить, где распаковать файлы и зарегистрировать их и так далее).

8
ответ дан MusiGenesis 22 July 2019 в 02:42
поделиться

Если они - на самом деле управляемые сборки, можно использовать ILMerge. Для собственного DLLs у Вас будет немного больше работы, чтобы сделать.

См. также: , Как может C++ окна dll быть объединенным в приложение C# exe?

83
ответ дан Technoguyfication 22 July 2019 в 02:42
поделиться

. СЕТЕВЫЕ Базовые 3.0 исходно компиляция поддержек в единственный .exe

функция включены использованием следующего свойства в Вашем файле проекта (.csproj):

    <PropertyGroup>
        <PublishSingleFile>true</PublishSingleFile>
    </PropertyGroup>

Это сделано без любого внешнего инструмента.

См. мой ответ для этого вопроса для получения дальнейшей информации.

2
ответ дан 22 November 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: