Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 06.09.2012, 22:41   #1
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
Arrow Добавляем необходимые .dll в программу без помощи пакеров

Всем привет, я думаю всем кто кодит хоть какое-то время на C# приходилось добавлять в свой проект .dll для работы необходимых компонентов, и когда мы пускаем программу в общее пользование, вместе с .exe должны быть .dll которые использовались при компиляции - это не всегда удобно. Много писать не буду, ибо нету смысла, опишу только важное.

Итак...

Для начала добавим наши .dll в ресурсы, для этого переходим по следующему пути в MVS:
Наш проект -> папка Properties(она же Свойства) -> Resources.resx.
Выбираем "Files". (Файлы)
Добавляем свои .dll.


Теперь там где у вас инициализирующая точка
Код:
        //Например
        [STAThread]
        static void Main()
        {
          //...
        }
Копируем следующий код:
Код:
            AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
            {
                byte[] h = null; //Создаём пустой массив байтов
                var resName = args.Name.Split(',')[0]; //Выдираем название недостающей .dll
                if (resName == "VAMemory") //Если для этого названия есть своя .dll то делаем следующее
                {
                    h = Properties.Resources.VAMemory; //Загружаем в массив байтов .dll
                }
                return h != null //Если массив байтов не равен нуль
                ? Assembly.Load(h) //Загружаем
                : null; //Ничего не делаем
            };
Обычно имя недостающей .dll это имя оригинальной .dll, если не получается, то ставим бряк после var resName и смотрим название.

Конец

Итак, теперь при инициализации программы будет создаваться не пустой эвент AssemblyResolve. Когда программе будет не хватать функции из .dll а собственно и самой .dll исполнится эвент AssemblyResolve в котром мы предоставим необходимую .dll и загрузим её для дальнейшей работы.
Теперь для полноценной работы вашей программы необходим только .net framework и естественно сама программа.


Мини-гайд был написан для zhyk.ru by Nickitee

________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.

Последний раз редактировалось Nickitee; 02.12.2012 в 18:41.
  Ответить с цитированием
11 пользователя(ей) сказали cпасибо:
-Emp- (23.11.2012), крайслер (06.09.2012), ki11eRR (17.10.2014), mr*WOLF (04.10.2012), RChesteR (07.09.2012), RemoteAccess (23.08.2013), Roch (07.09.2012), the-boxi (30.01.2013), warl0ck (06.09.2012), XRASER (12.10.2012), Yukikaze (18.08.2013)
Старый 24.11.2012, 03:41   #2
 Старший сержант
Аватар для -Emp-
 
-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность-Emp- определенно авторитетная личность
Регистрация: 09.09.2012
Сообщений: 207
Популярность: 1191
Сказал(а) спасибо: 24
Поблагодарили 131 раз(а) в 56 сообщениях
Отправить сообщение для -Emp- с помощью Skype™
 
По умолчанию Re: Добавляем необходимые .dll в программу без помощи пакеров

Nickitee, Большое спасибо! Очень полезная вещь. Более того, у тебя код компактней, чем другие варианты в интернете.

Тут опечатка:

Цитата:
else if (resName == "VAMemory") //Если для этого названия есть своя .dll то делаем следующее

лишний else, ну все равно каждый у себя, я думаю, это исправит.
________________
Не стремлюсь в подполье...
  Ответить с цитированием
Старый 13.08.2013, 09:47   #3
 Разведчик
Аватар для //programm
 
//programm на правильном пути
Регистрация: 29.09.2012
Сообщений: 3
Популярность: 20
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
Отправить сообщение для //programm с помощью Skype™
 
По умолчанию Re: Добавляем необходимые .dll в программу без помощи пакеров

using System.Reflection;
________________
//programm,save the world.
  Ответить с цитированием
Старый 09.09.2014, 12:30   #4
 Разведчик
Аватар для Lazizbek
 
Lazizbek никому не известный тип
Регистрация: 08.09.2014
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Добавляем необходимые .dll в программу без помощи пакеров

А если DLL два что тогда делать?
  Ответить с цитированием
Старый 09.09.2014, 15:39   #5
 Старший сержант
Аватар для Sinyss
 
Sinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака НоррисаSinyss троюродный дядя Чака Норриса
Регистрация: 29.07.2011
Сообщений: 197
Популярность: 8989
Сказал(а) спасибо: 45
Поблагодарили 175 раз(а) в 139 сообщениях
Отправить сообщение для Sinyss с помощью Skype™
 
По умолчанию Re: Добавляем необходимые .dll в программу без помощи пакеров

Цитата:
А если DLL два что тогда делать?

ровно тоже самое...
  Ответить с цитированием
Старый 13.09.2014, 00:57   #6
 Разведчик
Аватар для Lazizbek
 
Lazizbek никому не известный тип
Регистрация: 08.09.2014
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Добавляем необходимые .dll в программу без помощи пакеров

что то не получается, как я понимаю эвент подписывается только на одну,
Не могли бы показать пример?
  Ответить с цитированием
Старый 13.09.2014, 14:28   #7
Читер-спонсор
 Рыцарь-защитник
Аватар для Nickitee
 
Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(Nickitee сломал счётчик популярности :(
Регистрация: 28.08.2009
Сообщений: 603
Популярность: 19129
Золото Zhyk.Ru: 500
Сказал(а) спасибо: 84
Поблагодарили 602 раз(а) в 321 сообщениях
 
По умолчанию Re: Добавляем необходимые .dll в программу без помощи пакеров

Цитата:
Сообщение от LazizbekПосмотреть сообщение
что то не получается, как я понимаю эвент подписывается только на одну,
Не могли бы показать пример?

Код:
var resName = args.Name.Split(',')[0]; //Выдираем название недостающей .dll
теперь в resName имя необходимой .dll, сверяй и юзай.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Все самые необходимые ссылки в DayZ. KirMoteen DayZ (ArmA 2) 3 01.09.2012 21:20
[Продам] Развод с подменой файлов + необходимые файлы + подстройка под ваш сервер. Мулька Lineage 2 0 03.08.2012 16:09
Вскрытие пакеров Dimedrol1536 Разработка ПО для Point Blank 32 04.06.2012 14:00
Скилы необходимые для приста !!! Мутный Статьи, квесты и описания по Perfect World 2 18.07.2010 01:51

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 15:14.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net