Объединить DLL в EXE?

У меня есть два DLL файла, которые я хотел бы включить в свой EXE файл, чтобы упростить его распространение. Я немного читал здесь и там, как это сделать, даже нашел хорошую тему здесь и здесь, но это слишком сложно для меня, и мне нужны реальные основные инструкции о том, как это сделать.

Я использую Microsoft Visual С# Express 2010, и, пожалуйста, извините мой "низкий стандарт", но я чувствую, что я один или два уровня ниже всех остальных. 1. Если кто-то может указать, как объединить эти DDL файлы в мой EXE в пошаговом руководстве, это будет действительно удивительно!

Ответ 1

Для .NET Framework 4.5

ILMerge.exe /target:winexe /targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /out:finish.exe insert1.exe insert2.dll

ILMerge

  • Откройте CMD и cd в своем каталоге. Скажем: cd C:\test
  • Вставьте указанный выше код.
  • /out:finish.exe замените finish.exe на любое имя файла, который вы хотите.
  • За /out:finish.exe вам нужно предоставить файлы, которые вы хотите в сочетании.

Ответ 2

Загрузите ilmerge и ilmergre gui. упрощает объединение файлов ive использовал их и отлично работает

Ответ 3

Ссылка на DLL на ваши ресурсы и использование AssemblyResolve-Event для возврата Resource-DLL.

public partial class App : Application
{
    public App()
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {

            Assembly thisAssembly = Assembly.GetExecutingAssembly();

            //Get the Name of the AssemblyFile
            var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";

            //Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder
            var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
            if (resources.Count() > 0)
            {
                var resourceName = resources.First();
                using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
                {
                    if (stream == null) return null;
                    var block = new byte[stream.Length];
                    stream.Read(block, 0, block.Length);
                    return Assembly.Load(block);
                }
            }
            return null;
        };
    }
}

Ответ 4

Используйте Costura.Fody.

Вам просто нужно установить nuget, а затем выполнить сборку. Окончательный исполняемый файл будет автономным.

Ответ 5

Скачать

ILMerge

Вызов

ilmerge /target:winexe /out:c:\output.exe c:\input.exe C:\input.dll

Ответ 6

  • Установить ILMerge как другие потоки сообщают вам

  • Затем перейдите в папку установки, по умолчанию C:\Program Files (x86)\Microsoft\ILMerge

  • Перетащите Dll и Exes в эту папку

  • Shift-Rightclick в этой папке и выберите открытую командную строку

  • Запись

    ilmerge myExe.exe Dll1.dll /out:merged.exe
    

    Обратите внимание, что сначала вы должны написать свой exe.

Там вы получили объединенный exe. Это может быть не самый лучший способ, если вы собираетесь делайте это несколько раз, но самый простой для одноразового использования, я бы рекомендую положить Ilmerge на ваш путь.

Ответ 7

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
    /* PUT THIS LINE IN YOUR CLASS PROGRAM MAIN() */           
        AppDomain.CurrentDomain.AssemblyResolve += (sender, arg) => { if (arg.Name.StartsWith("YOURDLL")) return Assembly.Load(Properties.Resources.YOURDLL); return null; }; 
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

Сначала добавьте DLL в свои ресурсы проекта. Добавьте папку "Ресурсы"

Ответ 8

Также вы можете использовать ilmergertool в кодексе с интерфейсом GUI.

Ответ 9

Я ответил на аналогичный вопрос для VB.NET. Однако его не следует слишком сложно преобразовать. Вы вставляете DLL's в свою папку Ressource и при первом использовании, AppDomain.CurrentDomain.AssemblyResolve событие запускается.

Если вы хотите ссылаться на него во время разработки, просто добавьте нормальную ссылку DLL к вашему проекту.

Вставить DLL в проект

Ответ 10

Вот официальная документация . Это также автоматически загружается на шаге 2.

Ниже приведен очень простой способ сделать это, и я успешно построил свое приложение, используя .NET framework 4.6.1

  • Установите пакет ILMerge nuget либо через gui, либо в командную строку:

    Install-Package ilmerge
    
  • Убедитесь, что вы его загрузили. Теперь установите (не уверен, что команда для этого, но просто зайдите в свои пакеты nuget): введите описание изображения здесь Примечание. Вероятно, вам нужно установить его только для одного из ваших решений, если у вас есть несколько

  • Перейдите в папку решений и в папке пакетов вы увидите "ILMerge" с исполняемым файлом:

    \FindMyiPhone-master\FindMyiPhone-master\packages\ILMerge.2.14.1208\tools
    

    введите описание изображения здесь

  • Теперь вот исполняемый файл, который вы можете скопировать на свой \bin\Debug (или независимо от того, создано ваше приложение), а затем в командной строке /powershell выполните следующее:

    ILMerge.exe myExecutable.exe myDll1.dll myDll2.dll myDlln.dll myNEWExecutable.exe
    

Теперь у вас будет новый исполняемый файл со всеми вашими библиотеками!

Ответ 11

ПРИМЕЧАНИЕ. Если вы пытаетесь загрузить сборку без ILOnly, тогда

Assembly.Load(block)

не будет работать, и будет выведено исключение: подробнее

Я преодолел это, создав временный файл и используя

Assembly.LoadFile(dllFile)

Ответ 12

Я нашел решение ниже - Stpes: -

  1. Загрузите ILMerge.msi и установите его на свой компьютер.
  2. Открыть командную строку
  3. type cd C:\Program Files (x86)\Microsoft\ILMerge Preess Enter
  4. C:\Program Files (x86)\Microsoft\ILMerge> ILMerge.exe/target: winexe/targetplatform:"v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 "/out :NewExeName.exe SourceExeName.exe DllName.dll

Для нескольких Dll: -

C:\Program Files (x86)\Microsoft\ILMerge> ILMerge.exe/target: winexe/targetplatform:"v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 "/out :NewExeName.exe SourceExeName.exe DllName1.dll DllName2.dll DllName3.dll

Ответ 13

Команда должна быть следующей script:

ilmerge myExe.exe Dll1.dll /target:winexe /targetplatform:"v4,c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\" /out:merged.exe /out:merged.exe