ILMerge

ILMerge是一个将多个.NET程序集合并到一个程序集中的实用程序。它可以免费使用,并以NuGet包的形式提供

如果您在使用它时遇到任何问题,请与我们联系。(mbarnett at microsoft dot com)。但首先尝试阅读文档

ILMerge接受一组输入程序集并将它们合并到一个目标程序集中。输入程序集列表中的第一个程序集是主程序集。当主程序集是可执行文件时,目标程序集将创建为具有与主程序集相同的入口点的可执行文件。此外,如果主程序集具有强名称,并且提供了.snk文件,则使用指定的键重新签名目标程序集,以使其具有强名称。

ILMerge打包为控制台应用程序。但它的所有功能也可以通过编程方式获得。

有几个选项可以控制ILMerge的行为。有关详细信息,请参阅该工具随附的文档。

目前的版本是2.14.1208(2014年12月8日创建)。注意:不再有在v1.1运行时中运行的ILMerge版本。

ILMerge在v4.0 .NET运行时中运行,但它也能够使用它来合并来自其他框架版本的程序集/targetplatformoption。请参阅文档。(但是,它只能为v2(及更高版本)程序集合并PDB文件。)

目前,ILMerge仅适用于基于Windows的平台。它还不支持Rotor或Mono。

如果使用ASP.NET v2.0,则它提供了一个工具(基于ILMerge)来组合在预编译期间创建的程序集。您可以从ASP.NET网站获取更多详细信息。

安装

ilmerge NuGet页面所述,该软件包可以从Visual Studio环境安装。在Solution Explorer视图中展开项目容器。右键单击references并选择Manage NuGet Packages

确保Package source设置为nuget.org

接下来,单击Tools - NuGet Package Manager - Package Manager Console。确保Package source也设置为nuget.org

要为项目安装,请使用Install-Package命令:

  1. Install-Package ilmerge -Version 3.0.21

用法

MSBuild

ILMerge可以使用NuGet包在MSBuild中使用:

  1. < Project Sdk = “ Microsoft.NET.Sdk ” >
  2. < ItemGroup >
  3. < PackageReference Include = “ ILMerge ” Version = “ 2.15.0 ” />
  4. </ ItemGroup >
  5. < Target Name = “ ILMerge ” >
  6. <! - ILMergePath属性指向ILMerge.exe控制台应用程序的位置- >
  7. < Exec Command = “ $(ILMergeConsolePath)/out:Merged.dll File1.dll File2.dll ” />
  8. </ Target >
  9. </ Project >

编辑项目.csproj.vbproj文件(在相应<Project> .. </Project>标记内,通常在文件末尾。如果编译特定目标,请使用显式目录,例如Bin\x64\Release

  1. <ItemGroup>
  2. <PackageReference Include="ILMerge" Version="2.15.0" />
  3. </ItemGroup>
  4. <Target Name="ILMerge">
  5. <!-- the ILMergePath property points to the location of ILMerge.exe console application -->
  6. <Exec Command="$(ILMergeConsolePath) Bin\x64\Release\myapp.exe /out:myapp.exe Bin\x64\Release\File1.dll Bin\x64\Release\File2.dll Bin\x64\Release\File3.dll " />
  7. </Target>

虽然XML文件中通常会忽略空格,但在这种情况下,确切的文本将作为DOS命令处理,因此为了提高可读性,请使用克拉^(shift 6)行扩展器:

  1. <ItemGroup>
  2. <PackageReference Include="ILMerge" Version="2.15.0" />
  3. </ItemGroup>
  4. <Target Name="ILMerge">
  5. <!-- the ILMergePath property points to the location of ILMerge.exe console application -->
  6. <Exec Command="$(ILMergeConsolePath) Bin\x64\Release\myapp.exe ^
  7. /out:myapp.exe ^
  8. Bin\x64\Release\File1.dll ^
  9. Bin\x64\Release\File2.dll ^
  10. Bin\x64\Release\File3.dll " />
  11. </Target>

DOS dir / b选项可以帮助列出所有依赖项:

  1. dir bin\x64\Debug\*.dll /b

从Visual Studio Developer命令提示符:

  1. #下载/安装软件包参考
  2. msbuild / t:恢复
  3. #运行ILMerge目标
  4. msbuild / tILMerge

ILMerge在批处理文件中运行:

此处不需要Visual Studio Developer命令提示符,因为msbuild未使用。

  1. @echo off
  2. :: this script needs https://www.nuget.org/packages/ilmerge
  3. :: set your target executable name (typically [projectname].exe)
  4. SET APP_NAME=myapp.exe
  5. :: Set build, used for directory. Typically Release or Debug
  6. SET ILMERGE_BUILD=Debug
  7. :: Set platform, typically x64
  8. SET ILMERGE_PLATFORM=x64
  9. :: set your NuGet ILMerge Version, this is the number from the package manager install, for example:
  10. :: PM> Install-Package ilmerge -Version 3.0.21
  11. :: to confirm it is installed for a given project, see the packages.config file
  12. SET ILMERGE_VERSION=3.0.21
  13. :: the full ILMerge should be found here:
  14. SET ILMERGE_PATH=%USERPROFILE%\.nuget\packages\ilmerge\%ILMERGE_VERSION%\tools\net452
  15. :: dir "%ILMERGE_PATH%"\ILMerge.exe
  16. echo Merging %APP_NAME% ...
  17. :: add project DLL's starting with replacing the FirstLib with this project's DLL
  18. "%ILMERGE_PATH%"\ILMerge.exe Bin\x64\Release\%APP_NAME% ^
  19. /lib:Bin\%ILMERGE_PLATFORM%\%ILMERGE_BUILD%\ ^
  20. /out:%APP_NAME% ^
  21. FirstLib.dll ^
  22. mylib1.dll ^
  23. Microsoft.lib2.dll ^
  24. SomeOtherLib.dll ^
  25. \otherlibdir\otherlib.dll
  26. :Done
  27. dir %APP_NAME%

 

ILMerge在MSBuild与ILMerge在批处理文件中运行的更多相关文章

  1. dos批处理文件中的变量小结

    很多情况下我们需要用到一些批处理文件中的变量,方便我们执行一些操作,这里简单整理下,方便需要的朋友   批处理中的变量,我把他分为两类,分别为"系统变量"和"自定义变量& ...

  2. setlocal启动批处理文件中环境变量的本地化

    setlocal启动批处理文件中环境变量的本地化 在执行 SETLOCAL 之后所做的环境改动只限于批处理文件.要还原原先的设置,必须执行 ENDLOCAL. 学习了:https://baike.ba ...

  3. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  4. 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

    在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...

  5. Docker--在Docker中运行应用

    Docker--在Docker中运行应用 一个交互式的容器 既然在Docker提供的是一个容器,底层支撑着一个基本的操作系统环境,那我们就可以通过Docker进入到容器内部与系统进行交互. 据我理解: ...

  6. 尝试在你浏览器的Console(F12)中运行一下,你会发现页面被不同的颜色块高亮了(css调试中学到的js)

    现在到处都是JavaScript,每天都能知道点新东西.一旦你入了门,你总能从这里或是那里领悟到很多知识. 一旦我发现一些有意思的东西,我喜欢去感觉他们的源代码,看一看它是怎么办到的. 今天我想分享A ...

  7. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  8. 在Linux中运行Nancy应用程序

    最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...

  9. 在WildFly中运行多个standalone模式的实例

      WildFly作为一款优秀的EJB容器,其前身为JBoss AS.JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中.假设我们现在有这样一个项目,他是以standalone的模式运行在 ...

随机推荐

  1. HashMap 与 Hashtable 的区别

    Hashtable t 小写 二者用法一致   都实现Map接口 1.HashMap 的键值可以为null,而Hashtable不允许("null" 不是 null 前者是字符串 ...

  2. OC调用c++函数

    1.调用的时候我明明改成了 .mm  , 也添加了libstdc++.dylib  调用自己(xcode )写的(cocoa static lib )c++  ,编译总是报找不到库里的函数, 最后我在 ...

  3. 6-3 Articles(a, an, some, the)

    1 Definite and Indifinite articles Indefinite articles: a, an, some Definite article:  the 2 a and t ...

  4. Uint 7.文本和字体属性,background,精灵图和3种定位

    一. 文本属性 CSS 文本属性可定义文本的外观. 通过文本属性,您可以改变文本的颜色.字符间距,对齐文本,装饰文本,对文本进行缩进,等等. <!DOCTYPE html> <htm ...

  5. 为什么开源外围包安装指导都是按照到/usr/local/目录下,/usr/local与/usr的区别

    很多应用都安装在/usr/local下面,那么,这些应用为什么选择这个目录呢?Automake工具定义了下面的一组变量: Directory variable Default value prefix ...

  6. Vue-router的三种传参方式

    第一种传递参数:name传参 两步完成name传参并显示在模板中: 第一在router/index.js中配置name属性, routes: [ { path: '/', name: 'HelloWo ...

  7. codeforces451C

    Predict Outcome of the Game CodeForces - 451C There are n games in a football tournament. Three team ...

  8. mybatis操作mysql的奇淫技巧总结(代码库)

    1.添加公共sql代码段 使用<sql> 和 <include> 标签 <sql id="userSubassemblyRecordParam"> ...

  9. 如何确定Kafka的分区数、key和consumer线程数

    [原创]如何确定Kafka的分区数.key和consumer线程数   在Kafak中国社区的qq群中,这个问题被提及的比例是相当高的,这也是Kafka用户最常碰到的问题之一.本文结合Kafka源码试 ...

  10. java java.net.URLConnection 实现http get,post

    抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接.此类的实例可用于读取和写入此 URL 引用的资源.通常,创建一个到 URL 的连接需要几个步骤: open ...