Добрый день! Сразу, я — новенький
Возник вопрос: Я слышал, что возможно создать из сборки на C# стандартное приложение .exe. csc *.cs пробовал — компилит только консоли. Уважаемые ГУРУ, подскажите как это сделать или направьте меня в моем поиске к конкретным источникам. Заранее спасибо.
Pasha
Для: alex28AspCase
Ссылка скрыта от гостей
alex28AspCase
Спасибо за тзывчивость , однако, оталось непонятным какие именно файлы указывать в строке компиллятора? В сбоке-то их много.
Pasha
Для: alex28AspCase
Указывай все. А еще лучше — найди себе Visual Studio.
chm
в консоли msbuild [файл_проекта]
Статус Закрыто для дальнейших ответов.
Мы в соцсетях:
Похожие темы
- Amogusik
- 28.04.2023
- Этичный хакинг и тестирование на проникновение
Ответы 0 Просмотры 381
- Mark Klintov
- 23.11.2022
- Reverse engineering
Ответы 2 Просмотры 3 тыс.
- szybnev
- 16.03.2023
- Этичный хакинг и тестирование на проникновение
Ответы 4 Просмотры 2 тыс.
Как скомпилировать программу на Python в .exe файл
- useless
- 17.09.2022
- Этичный хакинг и тестирование на проникновение
Ответы 2 Просмотры 3 тыс.
Поделиться:
- Форум
- Developer Zone
- Остальные языки программирования
- .NET — программирование
На данном сайте используются cookie-файлы, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших cookie-файлов.
Источник: codeby.net
Всё в одном exe без зависимостей (статическая линковка в Qt 5.3.2)
2014-10-31 в 0:59, admin , рубрики: Песочница, метки: mingw, qt5, qtcreator, static, Windows7, инструкция
Программы, собранные на Qt требуют множество дополнительных файлов, таких как:
Qt5Widgets.dll
Qt5Gui.dll
Qt5Core.dll
libwinpthread-1.dll
libstdc++-6.dll
libgcc_s_dw2-1.dll
icuuc52.dll
Это далеко не полный список возможных зависимостей.
Как от них избавиться? Нужна статическая сборка Qt.
В интернете много разных статей на эту тему, но они мне не понравились по разным причинам. Поэтому я решил написать свою.
Протестировано для: Qt 5.3.2, компилятор MinGW 4.8.2 32bit, Windows 7 64bit. Написано на основе qt-project.org/wiki/How-to-build-a-static-Qt-for-Windows-MinGW но без использования Windows PowerShell.
Итак, нужно сделать следующее:
1. Скачать и установить обычную сборку Qt с официального сайта qt-project.org/downloads
Если Qt уже установлена, можно воспользоваться MaintenanceTool.exe
Как собрать проект Unity в исполняемый файл?
Важно в менеджере пакетов поставить галочку напротив MinGW 4.8.2 и Sourсe Components
Далее подразумевается, что Qt установлена в С:Qt
Если это не так, надо везде поменять пути на свои.
2. Проверить, что всё работает правильно
а) запустить Qt Creator, создать новый проект, собрать его, запустить;
б) закрыть Qt Creator и попробовать запустить *.exe отдельно от среды разработки;
в) убедиться в том, что программа требует кучу дополнительных библиотек;
г) закрыть всё, подумать о том, какая сложная штука — жизнь.
Теперь можно идти дальше.
3. Открыть файл С:Qt5.3Srcqtbasemkspecswin32-g++qmake.conf
На всякий случай можно сделать бэкап.
Добавить в конец файла (взято из windows-build-qt-static.ps1):
# Static
QMAKE_LFLAGS += -static -static-libgcc
QMAKE_CFLAGS_RELEASE -= -O2
QMAKE_CFLAGS_RELEASE += -Os -momit-leaf-frame-pointer
DEFINES += QT_STATIC_BUILD
CONFIG += static
# Static
Сохранить изменения и закрыть файл от греха подальше.
:: . check path.
set QtDir=C:Qt5.3static
set MingwDir=C:QtToolsmingw482_32
set QtSrcDir=C:Qt5.3Src
set CMAKE_INCLUDE_PATH=%MingwDir%i686-w64-mingw32include
:: Set a clean path including MinGW.
set PATH=%PATH%;%MingwDir%bin;%MingwDir%optbin
:: Force English locale to avoid weird effects of tools localization.
set LANG=en
:: Set environment variable QT_INSTALL_PREFIX. Documentation says it should be
:: used by configure as prefix but this does not seem to work. So, we will
:: also specify -prefix option in configure.
set QT_INSTALL_PREFIX=%QtDir%
:: Configure, compile and install Qt.
cmd /c «%QtSrcDir%configure.bat -static -debug-and-release -platform win32-g++ -prefix %QtDir% -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -qt-sql-sqlite -no-openssl -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests» > log_cmd.txt
mingw32-make -k -j4 > log_make.txt
mingw32-make -k -j4 install > log_make_install.txt
pause
Проверить правильность всех путей. Это действительно важно.
Если всё правильно, сохранить и закрыть файл.
5. Открыть консоль cmd.exe и запустить make.bat
Этот процесс длится примерно час или два, в зависимости от скорости работы компьютера. Если всё завершилось через 5 минут или раньше, то что-то пошло не так.
В файлах log_cmd.txt, log_make.txt, log_make_install.txt можно почитать сообщения об ошибках.
У меня почему-то сначала компилятор не мог найти некоторые заголовочные файлы. Пришлось добавить это:
set CMAKE_INCLUDE_PATH=%MingwDir%i686-w64-mingw32include
6. Настроить Qt Creator.
Параметры -> Сборка и запуск -> Профили Qt -> Добавить
Выбрать файл С:Qt5.3staticbinqmake.exe
Название профиля: Qt (static)
Параметры -> Сборка и запуск -> Комплекты -> Добавить
Название: Static
Тип устройства: Desktop
Устройство: Локальный ПК
Sysroot: C:Qt5.3static
Компилятор: MinGW
Отладчик: Не задан
Профиль Qt: Qt (static)
Теперь в Qt Creator доступен комплект статической сборки.
Проекты -> Сборка и запуск -> добавить -> Static
7. В файле проекта (*.pro) добавить флаги
QMAKE_LFLAGS += -static -static-libgcc
Наверное, как-то можно эти флаги убрать в параметры Qt Creator, но у меня это не получилось.
Это всё. Осталось только пересобрать свой проект с новым комплектом. Теперь можно запускать скомпилированные exe-файлы на любом компьютере под управлением Windows 7 или Windows XP. На других системах не тестировалось.
Надо отметить, что в результате статической линковки размеры exe-файлов существенно возрастают. Например, изначально exe-файл занимал всего 1,38 МБ и требовал различных библиотек в сумме на 43,5 МБ. После описанных процедур он увеличился до 16,1 МБ. Но уже всё, что надо, у него есть.
Буду благодарен за отзывы, комментарии, сообщения об ошибках.
Источник: www.pvsm.ru
Справочник по C#
Если вы столкнулись с проблемой и хотите поделиться своим опытом, знаниями или у вас есть интересная статья с иностранного сайта, предложение новой темы, статью которую Вы хотите видеть в ближайшем будущем, расскажите нам об этом и мы обязательно поделимся этими знаниями со всеми. Возможно, для других ваши знания, опыт и советы окажутся очень ценными и помогут вовремя найти правильный выход или не совершить ошибок.
Так же если у вас есть предложение о сотрудничестве, пожелания, указать на нарушения сайта или просто сказать слова благодарности, все это вы можете сделать через форму обратной связи. Читать дальше
Внедрение DLL в EXE
1.Поставьте в свойствах вашей библиотеки — «внедренный ресурс».
2.Затем подпишитесь на событие , например в конструкторе формы:
//using System.Reflection; //using System.IO; public Form1()
В процессе выполнение, когда вашему коду понадобится сборка и он нигде не сможет ее найти, как раз сработает событие AssemblyResolve и нужно реализовать обработчик, т.е. что делать надо в таком случае, а делать надо вот что: извлечь сборку из ресурсов проекта и «предоставить» коду. Все!
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) < //получаем имя сборки(короткое, без расширений) string shortName = new AssemblyName(args.Name).Name; //получаем ресурс из сборки по его имени, тут же помещая в созданный поток using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(shortName + «.dll»)) < //Считываем ресурс в массив байтов byte[] data = new BinaryReader(stream).ReadBytes((int)stream.Length); //Загружаем сборку из массива байтов в текущий домен приложения и возвращаем её return Assembly.Load(data); >>
Источник: csharpsourescode.blogspot.com