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

原文:[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-09-17 04:50:45

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

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就能完美运行的小工具.那该怎么办呢? 下文介绍一种超简单的方法,不用写一行代码就可轻松实现. 这里我们需要用到一款名为Fody.Costura的工具.Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中.安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里. 使用方法 在VS中,通过Nuget为

sk buff-sk_buff:源IP/mac 和目标ip/mac 调换,我这么做对么

问题描述 sk_buff:源IP/mac 和目标ip/mac 调换,我这么做对么 /* mac layer /struct ethhdr *eth *temp_eth;eth = eth_hdr(skb);temp_eth = eth_hdr(skb);ether_addr_copy(eth->h_source temp_eth->h_dest);ether_addr_copy(eth->h_dest temp_eth->h_source);/ ip layer */struct

eclipse中的源码如何打包为.exe文件

问题描述 eclipse中的源码如何打包为.exe文件 如何将eclipse中编写的程序源码导出,最后转为.exe文件,就像网上下载的软件那样的格式,让那些没安装eclipse的电脑也能运行你写的程序,求赐教.详细的步骤和使用的软件 解决方案 eclipse只是开发工具,它支持很多平台和编程语言,假设你用java编写客户端程序,那么可以参考http://jingyan.baidu.com/article/358570f6727bb7ce4724fc88.htmlhttp://blog.csdn.

将源码合并成一个文件

  最近忙着申请专利的事情.碰到一个问题就是将所有代码合并成一个word文件.可以通过以下2中脚本来实现. linux: find . -name '*.txt' -exec cat {} \; >aaa 将 txt改成  java 或 js ........ windows: @echo off REM 文件过滤器 set file_filter=*.java *.js *.css REM 指定原目录 set src_dir=F:\java\workspace_64\MR-demo\src R

Merging a WPF application into a single EXE(WPF应用程序合并成单个Exe文件)

I always dislike handing off little applications to people. Not because I can't, but because of the steps involved to make sure it all just works. Small apps are the most problematic because I never want to take the time to create a whole installer p

c# 调用C++dll报错vshost32.exe 已停止工作

问题描述 调用下面接口[DllImport(@"OpenNetStream.dll")]//SDK开始播放publicstaticexternintOpenSDK_StartRealPlay(IntPtrSID,IntPtrPlayWnd,stringCameraId,IntPtrToken,intVideoLevel,stringSafeKey,stringAppKey);接口说明[in]szSessionId会话ID[in]hPlayWnd播放窗口句柄,如果窗口句柄为NULL表示纯

C# 版dll 程序集合并工具

最近要开发一个控件给同事用,开发中会引用一些第三方DLL,这样交给用户很不方便,希望的效果是直接交付一个DLL文件.网上找了一些资料.  1.       使用 Costura.Fody ,这个强大之处是可以在build阶段直接将依赖的DLL合并在目标EXE中,支持非托管DLL进行mixed mode 打包,不足之处是 只能将DLL合并到EXE中,不支持DLL和DLL的合并,目前满足不了我的需求. 参考资料 http://www.cnblogs.com/instance/archive/2015

合并DLL

前言 你可能不希望在发布程序时附带上一个外部的 DLL,因为可能会有些用户在无意中把 DLL 删除了而造成 EXE 不能正确运行,也有可能该 DLL 会被别人拿去使用,也有可能,此 DLL 会成为破解者破解你的程序的突破口.无论出于何种原因,如果你想把一个 DLL 合并到一个 EXE 中的话,本文向你介绍这种方法. Win32 程序调用 DLL 的机制 Win32 EXE 在调用一个外部 DLL 中的函数时,首先要调用 LoadLibary 函数来载入此 DLL 到程序的进程地址空间.如果 Lo