Могу ли я включить dll в exe (в Visual Studio)?

Возможный дубликат:
. NET для Windows-приложения, можно ли его сжать в один .exe?

Для запуска моего приложения мне нужны AxInterop.WMPLib.dll и Interop.WMPLib.dll, которые находятся в папке отладки и выпуска. Есть ли способ включить эти DLL в exe, чтобы мое приложение было доступно только в одном файле?


person IAdapter    schedule 25.01.2009    source источник
comment
Хотя это возможно, мне это не очень нравится. Суть разделяемых библиотек в том, что они разделяются между программами. Как насчет их загрузки, когда ваша программа обнаруживает, что они еще не установлены?   -  person Tim Matthews    schedule 25.01.2009


Ответы (6)


Если ваши библиотеки DLL являются сборками .NET, то ILMerge следует иметь возможность объединить исполняемый файл и все его зависимости в один файл.

person Juliet    schedule 25.01.2009
comment
Это также указано на странице ILMerge, но для приложений WPF используйте это: blogs.msdn.com/b/microsoft_press/archive/2010/02/03/ - person Menefee; 26.07.2012

Вы можете использовать такие инструменты, как boxedapp или thinstall ...

person Community    schedule 19.05.2009

Я также рекомендую boxedapp. Отличное приложение!

person John Smith    schedule 23.11.2011
comment
Я предпочитаю использовать BoxedApp. Это так просто !!! - person MastAvalons; 15.12.2011
comment
За исключением того, что это стоит около 500 канадских долларов. - person MatBee; 16.12.2014

Включите их как встроенные. Затем вы можете извлечь их во время выполнения.

person cookre    schedule 25.01.2009

Да, я пропустил код для записи файла ...

FileStream so=new FileStream("c:\\\wherever\\\x.dll",FileMode.Create);

so.Write(buf,0,ssize);

so.Close();

Никаких дополнительных коммунальных услуг не требуется.

person cookre    schedule 25.01.2009

Например, добавьте в проект x.dll и установите для его действия сборки значение «Встроенный ресурс».

Извлекать:

 string AppPath=Assembly.GetExecutingAssembly().Location;
 Assembly ThisAssembly=Assembly.LoadFrom(AppPath);
 System.IO.Stream fs=ThisAssembly.GetManifestResourceStream("yourproectname.x.dll");
 int ssize=(int)fs.Length;
 byte [] buf=new byte[ssize];
 fs.Read(buf,0,ssize);
 fs.Close();
person cookre    schedule 25.01.2009
comment
Первые две строки являются ненужным усложнением Assembly thisAssembly = Assembly.GetExecutingAssembly () ;. Тогда в конце отсутствует эта строка: Assembly.Load (buf) ;. Наконец, это ужасное решение, потому что тогда вы можете получить доступ к загруженной сборке только через отражение. - person Wim Coenen; 25.01.2009