2013-07-07 2 views
1

Я хочу знать, как я могу сжать свои DLL-файлы в своей программе, а затем при запуске программы файлы извлекаются из программы, чтобы программа могла их использовать, и когда программа закрыта , файлы сжимаются обратно.Программа dll merge and unmerge

+4

В чем смысл этого? Действительно ли файлы DLL слишком большие *? –

+1

вам нужно сжать библиотеки DLL из-за размера или просто хотите скрыть библиотеки DLL? – MEYWD

+0

@CodyGray Есть 4 dll размером около 4 Мб. Я хочу, чтобы это было сделано только ради того, чтобы не использовать папку или слишком много файлов на рабочем столе. –

ответ

0

Если я понимаю это правильно, вы хотите, чтобы ro скрывала ваши DLL.

Первый способ:

1) Включите DLL в качестве ресурса в проекте (ехе)
2) Реализовать метод, как это:

public static void ResourceToFile(string fileName, string dir, byte[] resource) { 
    Directory.CreateDirectory(dir); 
    string path = Path.Combine(dir, fileName); 
    File.WriteAllBytes(path, resource); 
} 

3) Назовите, как это: (при запуске приложения, перед использованием DLL)

ResourceToFile("xyz.dll", Application.StartupPath, Resources.xyzLib); 

сек Зонда образом:
(нет файлов, написанных, возможно только для сборок)

Вы можете использовать AppDomain.AssemblyResolve событие, которое возникает, когда DLL ANNOT найден.
Используйте вышеуказанный метод для загрузки сборки из ресурсов приложений.

0

Взятый с Jeffrey Richters blog. Это будет загружать сборки из ваших ресурсов программ, поэтому для запуска требуется только исполняемый файл.

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { 

    String resourceName = "AssemblyLoadingAndReflection." + 

     new AssemblyName(args.Name).Name + ".dll"; 

    using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { 

     Byte[] assemblyData = new Byte[stream.Length]; 

     stream.Read(assemblyData, 0, assemblyData.Length); 

     return Assembly.Load(assemblyData); 

    } 

}; 
Смежные вопросы