[C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)



本文为原创文章,如转载,请在网页明显位置标明原文名称、作者及网址,谢谢!



本文主要是使用微软的ILMerge工具将源DLL合并到目标EXE,因此,需要下载以下工具:

https://www.microsoft.com/en-us/download/details.aspx?id=17630

或在百度网盘下载:

https://pan.baidu.com/s/1qYyqJCC

将该软件进行确定性安装即可。

工具安装完毕后,需使用cmd命令提示符进入该目录使用该工具,命令为:

CD C:\Program Files (x86)\Microsoft\ILMerge

如下图所示:

该工具的主要用法如下:

Usage: ilmerge [/lib:directory]* [/log[:filename]] [/keyfile:filename [/delaysign]] [/internalize[:filename]] [/t[arget]:(library|exe|winexe)] [/closed] [/ndebug] [/ver:version] [/copyattrs [/allowMultiple] [/keepFirst]] [/xmldocs] [/attr:filename] [/targetplatform:<version>[,<platformdir>] | /v1 | /v1.1 | /v2 | /v4] [/useFullPublicKeyForReferences] [/wildcards] [/zeroPeKind] [/allowDup:type]* [/union] [/align:n] /out:filename <primary assembly> [<other assemblies>...]

如下图所示:

打开Visual Studio 2017(或2015),引用Newtonsoft.Json.dll,并在控制台(该项目名称为:ConsoleApp12)编写以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace ConsoleApp12
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>()
            {
                new Person(){ ID = 1, Name = "ABC" },
                new Person(){ ID = 2, Name = "XYZ" },
            };
            var result = JsonConvert.SerializeObject(list);
            JArray jArray = JArray.Parse(result);
            foreach(var item in jArray)
            {
                Console.WriteLine($"ID:{(int)item["ID"]},Name:{(string)item["Name"]}");
            }
            Console.ReadKey();
        }
    }

    class Person
    {
        public int ID { set; get; }
        public string Name { set; get; }
    }
}

如下图所示:

以上源代码请在以下网盘下载:

https://pan.baidu.com/s/1pKROMh1

注意:

①Newtonsoft.Json.dll下载地址为:

https://pan.baidu.com/s/1o8gJPHo

②Newtonsoft.Json.dll的DotNetFrameWork必须运行在4.5及4.5版本以上。

点击IDE上的运行按钮,启动生成,如下图所示,将在bin/debug文件夹下生成以下文件:

如果要运行以上程序,ConsoleApp12.exe 与 Newtonsoft.Json.dll 是必不可少的,但这样子看起来好别扭,如果能合并成一个文件,多好啊。

下面的工作将对以上两个文件进行合并,会使用以上介绍的ILMerge.exe工具。

假如在D盘上的Test文件夹,将对以上两个文件进行合并,如下图所示:

现在返回到刚才的命令提示符窗体里,输入以下命令:

ilmerge /ndebug /target:exe /out:D:\Test\New_ConsoleApp12.exe /log D:\Test\ConsoleApp12.exe /log D:\Test\Newtonsoft.Json.dll /targetplatform:v4

注:/ndebug:为非调试版本,即发布版本,如果去掉,将会生成.pdb拓展名的调试文件

/target:为目标平台,此处输出为EXE

/out:合并之后输出的路径及文件名

/log:需要合并的DLL或EXE,需要把所有的合并的EXE或DLL囊括进来

/targetplatform:目标平台,此次为DotNet4.6.2,因此需要目标平台设为v4

运行之后,将会提示合并完成的信息,如下图所示:

点击新生成的New_ConsoleApp12.exe,程序将正常地运行,如下图所示:

我们可以使用ILSpy.exe查看刚才合并之后的New_ConsoleApp12.exe,如下图所示:

从以上可以看出,ConsoleApp12.exe 与 Newtonsoft.Json.dll已经合并成New_ConsoleApp12.exe

时间: 2024-11-05 22:07:30

[C#]使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)的相关文章

[C#]使用Costura.Fody将源DLL合并到目标EXE

本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址下载: https://github.com/Fody/Costura/releases ②从百度网盘下载: https://pan.baidu.com/s/1kV9W34b ③[推荐]从Nuget地址安装工具: https://www.nuget.org/packages/Costura.Fody

利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)

原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.这样交给用户很不方便,希望的效果是直接交付一个exe文件. 这时候就需要借助一款名为Fody.Costura的插件.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里. 使用 Costura

将WinForm程序(含多个非托管Dll)合并成一个exe的方法

开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. ILMerge能把托管dll跟exe合并起来生成一个新的exe,但是当我们在项目中使用了非托管的dll,也就是使用了第三方dll时,合并虽然成功但是却无法运行,提示“不是有效的win32应用程序“ 这时候我们需要用到一款名为Fody.Costura的工具.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全

把C#程序(含多个Dll)合并成一个exe

Costura.Fody 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.有时候为了发布方便或者安装使用方便,单个的exe文件远比一大堆的dll文件简洁得多. 这里我们需要用到一款名为Fody.Costura的工具.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里. 使用方法也很简单: 1.在VS中,通过Nuget为目标EXE工程安

C# 合并DLL, 合并DLL进入EXE

原文:C# 合并DLL, 合并DLL进入EXE 使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge /ndebug /t:dll /log c:/1/DevExpress.Data.v7.3.dll c:/1/DevExpress.OfficeSkins.v7.3.dll c:/1/DevExpress.Utils.v7.3.dll c:/1/log4net.dll /out:c:/1/kkun/Tstrin

C#程序(含多个Dll)合并成一个Exe

把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Fody.Costura的工具.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打

把C#程序(含多个Dll)合并成一个Exe的超简单方法

原文:把C#程序(含多个Dll)合并成一个Exe的超简单方法 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了. 但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Costura.Fody的工具.Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件

GG搭建 源单实例---到目标RAC环境 11.2.3版本 单向同步(XX公司项目)

GG搭建 源单实例---到目标RAC环境 11.2.3版本 单向同步 目的 完成后本 Oracle 按示例 (OBE) 教程中,您将能够保持两个异构数据库同步使用 Oracle GoldenGate (OGG) :在这种情况下 Linux Oracle 11gR2 数据库到 11gR2 Exadata 数据库. 在本课中,您将学会如何: 准备您的环境配置 Oracle GoldenGate 进程. 配置并启动更改捕获的数据库操作. 配置并启动更改交货的数据库操作. 完成时间 大约 2 个小时 简

0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突。

下面的代码在编译,运行时没有问题,在输入内容是出现异常如下: 0x0F19B7EC (ucrtbased.dll)处(位于 ex6.exe 中)引发的异常: 0xC0000005: 写入位置 0x00740000 时发生访问冲突. #include "stdafx.h"#include <conio.h>#include <stdio.h> int main(){ int NUM, I; struct STUDENT { char NAME[30]; int A