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


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

或在百度网盘下载:

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

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

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

如下图所示:

该工具的主要用法如下:

  1. 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)编写以下代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7.  
  8. namespace ConsoleApp12
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. List<Person> list = new List<Person>()
  15. {
  16. new Person(){ ID = , Name = "ABC" },
  17. new Person(){ ID = , Name = "XYZ" },
  18. };
  19. var result = JsonConvert.SerializeObject(list);
  20. JArray jArray = JArray.Parse(result);
  21. foreach(var item in jArray)
  22. {
  23. Console.WriteLine($"ID:{(int)item["ID"]},Name:{(string)item["Name"]}");
  24. }
  25. Console.ReadKey();
  26. }
  27. }
  28.  
  29. class Person
  30. {
  31. public int ID { set; get; }
  32. public string Name { set; get; }
  33. }
  34. }

如下图所示:

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

注意:

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

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

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

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

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

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

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

  1. 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

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

  1. 使用ILMerge将源DLL合并到目标EXE(.NET4.6.2)

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EXE,因此,需要下载以下工具: https://www.micro ...

  2. ILMerge将源DLL合并到目标EXE

    ILMerge将源DLL合并到目标EXE(.NET4.6.2) 本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 本文主要是使用微软的ILMerge工具将源DLL合并到目标EX ...

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

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...

  4. 使用Costura.Fody将源DLL合并到目标EXE

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...

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

    原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了.这 ...

  6. 多个DLL合并成一个DLL

    多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 1:) 下载 http://download.microsoft.com/download/1/3/4/1347C99E-9DFB-425 ...

  7. C# 合并DLL, 合并DLL进入EXE 【转】

    使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge /ndebug /t:dll /log c:/1/ ...

  8. 多个DLL合并,DLL合并到EXE

    1:) 下载 http://download.microsoft.com/download/1/3/4/1347C99E-9DFB-4252-8F6D-A3129A069F79/ILMerge.msi ...

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

    原文:C# 合并DLL, 合并DLL进入EXE 使用方法非常简单 在项目属性窗口中,选择"生成事件",在"生成后事件命令行"下的文本框中输入 ilmerge / ...

随机推荐

  1. 最近使用 .NET Core 遇到的一些坑

    最近.NET Core升级到2.0后开始慢慢捣鼓的多了起来,但遇到了不少坑,所以特来记录下. 第一个坑  条件编译符 我们在编写一些方法的时候通常会为Debug模式增加一些输出日志等以便我们检查,也会 ...

  2. 由throw new Error() 引发的探讨

    问题复现 在工作时遇到了需要抛出异常并且需要自己捕获处理的地方,于是在抛出的地方写下 function parseExcel(con) { try { // doSomething } catch ( ...

  3. Coder的好伙伴Github

    网络越来越发达,各式各样的网盘.云存储也走进日常生活,  在老师的指导下,我第一次接触了GitHub. 什么是Github? Github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一 ...

  4. Java的垃圾回收

    Java的垃圾回收 System.gc()和Runtime.gc()用来请求JVM启动垃圾回收 try与return的问题 任何调用try 或者catch中的return语句之前,都会先执行final ...

  5. escape()、encodeURI()、encodeURIComponent()区别详解(转)

      JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,dec ...

  6. python 保存文本txt格式之总结篇,ANSI,unicode,UTF-8

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA4wAAAEmCAIAAACmsIlUAAAgAElEQVR4nOydezxU+f/HP49WSstKkZ

  7. Ubuntu16.04下安装mysql

    系统信息 (lsb_release -a) Distributor ID: Ubuntu Description: Ubuntu 16.04.2 LTS Release: 16.04 Codename ...

  8. http://codeforces.com/contest/610/problem/D

    D. Vika and Segments time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. 支持向量机SVM(二)

    [转载请注明出处]http://www.cnblogs.com/jerrylead 6 拉格朗日对偶(Lagrange duality) 先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法, ...

  10. 非对称加密RSA的C#实现

    1.对称加密算法 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key). 对称加密有很多种算法,由于它效率很高,所 ...