Добавляем необходимые .dll в программу без помощи пакеров
Всем привет, я думаю всем кто кодит хоть какое-то время на C# приходилось добавлять в свой проект .dll для работы необходимых компонентов, и когда мы пускаем программу в общее пользование, вместе с .exe должны быть .dll которые использовались при компиляции - это не всегда удобно. Много писать не буду, ибо нету смысла, опишу только важное.
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 в 19:41.
Re: Добавляем необходимые .dll в программу без помощи пакеров
Nickitee, Большое спасибо! Очень полезная вещь. Более того, у тебя код компактней, чем другие варианты в интернете.
Тут опечатка:
Цитата:
else if (resName == "VAMemory") //Если для этого названия есть своя .dll то делаем следующее
лишний else, ну все равно каждый у себя, я думаю, это исправит.
________________
Не стремлюсь в подполье... Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).