|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
||||||
Упаковать архивированную DLL в ресурсы16.12.2023, 20:08. Показов 1241. Ответов 15
Метки нет (Все метки)
Доброго все здравия.
В общем суть такова, решил перевести одно из своих приложений на с .NET Framework 4.8 и использовать возможность загрузки упакованных в ZIP сторонних DLL сборок из ресурсов. Cейчас помещаю сборку в чистом виде (не упакованный DLL) в ресурсы и гружу оттуда, но вот хотелось бы воспользоваться возможностью получить ZipEntry средствами фреймворка. Для .Fx 4.5 актуален был такой подход
Пытался грузить ZIP через IO.Compression.GZipStream, но так и не понял как добраться до .Entries(0).Open, так как его там вообще нет...Может кто делал подобное, поделитесь. Добавлено через 55 минут А все, отбой... Разобрался... Проблема была в том, что у меня не была обновлена в системе сама сборка System.IO.Compression.Студия предложила установить последнюю версию, скачал, установил - заработало!
1
|
||||||
| 16.12.2023, 20:08 | |
|
Ответы с готовыми решениями:
15
Как упаковать все файлы в ресурсы приложения Как упаковать ресурсы в exe файл?
|
|
Администратор
|
||||
| 16.12.2023, 20:14 | ||||
|
Добавлено через 3 минуты
0
|
||||
|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
|
| 16.12.2023, 20:14 [ТС] | |
|
OwenGlendower, Да я уже нашел проблему...
Ссылку добавлял, но вот сама эта System.IO.Compression почему-то была старая. Студия предложила ее скачать и обновить - обновил - заработало. Сама сборка запустилась, но внутри видимо есть и другие сборки и вот с ними проблема, в рантайме пишет что не возможно загрузить другую сборку... Не пойму почему.
0
|
|
|
Администратор
|
|||
| 16.12.2023, 20:16 | |||
|
0
|
|||
|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
|||
| 16.12.2023, 20:17 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
Администратор
|
||
| 16.12.2023, 20:21 | ||
Сообщение было отмечено Yury Komar как решение
РешениеПопробуйте ради интереса удалить ссылку на NuGet пакет и добавить ссылку на сборку из GAC. Тогда не нужно будет таскать за собой эту DLL. Если только нет серьезных причин использовать именно NuGet версию.
1
|
||
|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
|||||||
| 16.12.2023, 20:41 [ТС] | |||||||
|
В Nuget поставила версию 4.3 ну вобщем от Nuget отказался, но так и не понял почему так получилось... Добавлено через 14 минут Вобщем, все получилось. Вот такой код я использую, с возможностью поместить несколько DLL в один ZIP и грузить их оттуда
0
|
|||||||
|
Администратор
|
|||||||
| 17.12.2023, 13:15 | |||||||
Сообщение было отмечено Yury Komar как решение
РешениеВот такая проверка arg.Name.Contains("Dll_Reference_Name1") означает что в случае когда несколько сборок начинаются одинаково (например, BouncyCastle и BouncyCastle.OpenPgp), нам нужно будет не забывать писать проверки в правильном порядке. Сначала BouncyCastle.OpenPgp, а потом BouncyCastle. Иначе мы всегда будем грузить одну и ту же сборку что очевидно неправильно. Аналогичное усложнение возникает из-за конструкции entry.Name.StartsWith. По моему в обоих случаях лучше проверять на равенство.Я бы переписал код так
2
|
|||||||
|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
||||||
| 17.12.2023, 16:46 [ТС] | ||||||
|
OwenGlendower, Спасибо за ремарки, все по делу и очень логично.
Учту на будущее. Добавлено через 32 минуты OwenGlendower, Немножко доработал функцию, включив возможность загрузки не только ZIP'ованных сборок, добавив маркер "isZIP" в параметры, ну и передачу в функцию не жестко указанных String с именем сборки, а asmName.Name, так как, возможно не все сборки будут упакованы в ZIP... Ну это так, на всякий случай )))
1
|
||||||
|
Администратор
|
|||||||
| 17.12.2023, 17:43 | |||||||
![]() 1) Почему в Else перехватывается исключение, а в If нет? Если уж перехватывать, то везде. По хорошему, однако, try/catch здесь не нужен. Так мы только маскируем возможную проблему. Правильнее позволить исключению всплыть. 2) MemoryStream, BinaryReader в блоке Else не нужны. Можно написать просто
ссылку на IO.Compression нужно добавлять вручную в пароект из GAC нужно написать ссылку на System.IO.Compression нужно добавлять вручную в проект из GAC. Ведь ни сборки ни пространства имен IO.Compression не существует.
1
|
|||||||
|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
||||||
| 17.12.2023, 22:23 [ТС] | ||||||
|
OwenGlendower, Ну блиииин..... И тут Вы правы... Тороплюсь, мелочи совсем не замечаю
![]() Спасибо. Добавлено через 4 часа 8 минут Тогда вот, финальный вариант:
0
|
||||||
|
Администратор
|
|||||||
| 18.12.2023, 01:52 | |||||||
Вместо этого предложу такой вариант
1
|
|||||||
|
Модератор
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
|
||||||
| 18.12.2023, 06:14 [ТС] | ||||||
|
OwenGlendower, Глядишь скоро до идеального варианта дойдем...
Я тут еще подумываю, так же, добавить проверку на наличие сборок и в папке DLL, рядом с EXE.... Загрузку из папки можно выполнить так (добавить условие в Select Case):
0
|
||||||
|
Администратор
|
|||||||
| 18.12.2023, 07:55 | |||||||
1
|
|||||||
|
COM‐пропагандист
|
|
| 18.12.2023, 09:22 | |
|
А ведь можно просто хранить DLL в каталоге с программой без всяких упаковщиков, архиваторов и ресурсов.
Это избыточное усложнение. А ещё требует прав администратора: запись в ProgramFiles пользователю запрещена.
0
|
|
|
Администратор
|
|||
| 18.12.2023, 15:49 | |||
|
1
|
|||
| 18.12.2023, 15:49 | |
|
Помогаю со студенческими работами здесь
16
Как User control упаковать в dll Упаковать dll внутрь WPF приложения Можно ли упаковать ресурсы в exe? Как сделать свой .dll содержащий иконки Windows? Или как упаковать всё в .dll Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|