ILMerge在MSBuild与ILMerge在批处理文件中运行
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命令:
Install-Package ilmerge -Version 3.0.21
用法
MSBuild
ILMerge可以使用NuGet包在MSBuild中使用:
< Project Sdk = “ Microsoft.NET.Sdk ” >
< ItemGroup >
< PackageReference Include = “ ILMerge ” Version = “ 2.15.0 ” />
</ ItemGroup >
< Target Name = “ ILMerge ” >
<! - ILMergePath属性指向ILMerge.exe控制台应用程序的位置- >
< Exec Command = “ $(ILMergeConsolePath)/out:Merged.dll File1.dll File2.dll ” />
</ Target >
</ Project >
编辑项目.csproj或.vbproj文件(在相应<Project> .. </Project>标记内,通常在文件末尾。如果编译特定目标,请使用显式目录,例如Bin\x64\Release:
<ItemGroup>
<PackageReference Include="ILMerge" Version="2.15.0" />
</ItemGroup>
<Target Name="ILMerge">
<!-- the ILMergePath property points to the location of ILMerge.exe console application -->
<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 " />
</Target>
虽然XML文件中通常会忽略空格,但在这种情况下,确切的文本将作为DOS命令处理,因此为了提高可读性,请使用克拉^(shift 6)行扩展器:
<ItemGroup>
<PackageReference Include="ILMerge" Version="2.15.0" />
</ItemGroup>
<Target Name="ILMerge">
<!-- the ILMergePath property points to the location of ILMerge.exe console application -->
<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 " />
</Target>
DOS dir / b选项可以帮助列出所有依赖项:
dir bin\x64\Debug\*.dll /b
从Visual Studio Developer命令提示符:
#下载/安装软件包参考
msbuild / t:恢复
#运行ILMerge目标
msbuild / t:ILMerge
ILMerge在批处理文件中运行:
此处不需要Visual Studio Developer命令提示符,因为msbuild未使用。
@echo off
:: this script needs https://www.nuget.org/packages/ilmerge
:: set your target executable name (typically [projectname].exe)
SET APP_NAME=myapp.exe
:: Set build, used for directory. Typically Release or Debug
SET ILMERGE_BUILD=Debug
:: Set platform, typically x64
SET ILMERGE_PLATFORM=x64
:: set your NuGet ILMerge Version, this is the number from the package manager install, for example:
:: PM> Install-Package ilmerge -Version 3.0.21
:: to confirm it is installed for a given project, see the packages.config file
SET ILMERGE_VERSION=3.0.21
:: the full ILMerge should be found here:
SET ILMERGE_PATH=%USERPROFILE%\.nuget\packages\ilmerge\%ILMERGE_VERSION%\tools\net452
:: dir "%ILMERGE_PATH%"\ILMerge.exe
echo Merging %APP_NAME% ...
:: add project DLL's starting with replacing the FirstLib with this project's DLL
"%ILMERGE_PATH%"\ILMerge.exe Bin\x64\Release\%APP_NAME% ^
/lib:Bin\%ILMERGE_PLATFORM%\%ILMERGE_BUILD%\ ^
/out:%APP_NAME% ^
FirstLib.dll ^
mylib1.dll ^
Microsoft.lib2.dll ^
SomeOtherLib.dll ^
\otherlibdir\otherlib.dll
:Done
dir %APP_NAME%
ILMerge在MSBuild与ILMerge在批处理文件中运行的更多相关文章
- dos批处理文件中的变量小结
很多情况下我们需要用到一些批处理文件中的变量,方便我们执行一些操作,这里简单整理下,方便需要的朋友 批处理中的变量,我把他分为两类,分别为"系统变量"和"自定义变量& ...
- setlocal启动批处理文件中环境变量的本地化
setlocal启动批处理文件中环境变量的本地化 在执行 SETLOCAL 之后所做的环境改动只限于批处理文件.要还原原先的设置,必须执行 ENDLOCAL. 学习了:https://baike.ba ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...
- Docker--在Docker中运行应用
Docker--在Docker中运行应用 一个交互式的容器 既然在Docker提供的是一个容器,底层支撑着一个基本的操作系统环境,那我们就可以通过Docker进入到容器内部与系统进行交互. 据我理解: ...
- 尝试在你浏览器的Console(F12)中运行一下,你会发现页面被不同的颜色块高亮了(css调试中学到的js)
现在到处都是JavaScript,每天都能知道点新东西.一旦你入了门,你总能从这里或是那里领悟到很多知识. 一旦我发现一些有意思的东西,我喜欢去感觉他们的源代码,看一看它是怎么办到的. 今天我想分享A ...
- 在Linux和Windows的Docker容器中运行ASP.NET Core
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...
- 在Linux中运行Nancy应用程序
最近在研究如何将.NET应用程序移植到非Windows操作系统中运行,逐渐会写一些文章出来.目前还没有太深的研究,所以这些文章大多主要是记录我的一些实验. 这篇文章记录了我如何利用NancyFx编写一 ...
- 在WildFly中运行多个standalone模式的实例
WildFly作为一款优秀的EJB容器,其前身为JBoss AS.JBoss作为一款开源的应用服务器,被广泛的应用在各种项目当中.假设我们现在有这样一个项目,他是以standalone的模式运行在 ...
随机推荐
- string find()函数
链接 [https://www.cnblogs.com/wkfvawl/p/9429128.html]
- 微信JSSDK使用步骤(用于在微信浏览器中自定义分享,分享到朋友圈,拍照,扫一扫等功能)
一.使用JSSDK需要一个公众号(需要认证!): (1).把自己项目的服务器地址输入. (2).把MP_verify_m7Qp93BAuIGDWRVO.txt 文件下载下来,放到该服务器域名指向的根 ...
- UC和QQ两个主流浏览器 * 点击触发微信分享到朋友圈或发送给朋友的功能(转载)
转载(声明:仅供学习使用) /** * 此插件主要作用是在UC和QQ两个主流浏览器 * 上面触发微信分享到朋友圈或发送给朋友的功能 * 代码编写过程中 参考: * http://mjs.sinaimg ...
- vue 点击当前元素添加class 去掉兄弟的class 获取当前点击元素的文字
点击当前标签给其添加class,兄弟标签class删除 然后获取当前点击元素的文字 演示地址: https://xibushijie.github.io/static/addClass.html &l ...
- 安装mysql8.0出现服务无法启动,服务没报告任何错误
改为net start mysql80 参考https://blog.csdn.net/gzejia/article/details/82156994
- GateOne Web SSH 环境搭建
环境配置安装python及tornadoyum -y install python-pippip install tornado GateOne安装下载源码:git clone https://git ...
- Prometheus-配置解析
1.Prometheus整体架构图 2.配置文件 # 全局配置 global: scrape_interval: 15s # 多久 收集 一次数据 evaluation_interval: 30s # ...
- GO语言系列(二)- 基本数据类型和操作符
一.文件名 & 关键字 & 标识符 1.所有go源码以.go结尾 2.标识符以字母或下划线开头,大小写敏感 3._是特殊标识符,用来忽略结果 4.保留关键字 二.Go程序的基本结构 p ...
- 分布式监控系统开发【day37】:需求讨论(一)
本节内容 为什么要做监控? 常用监控系统设计讨论 监控需求讨论 如何实现监控服务器的水平扩展? 监控系统架构设计 一.为什么要做监控? 熟悉IT监控系统的设计原理 开发一个简版的类Zabbix监控系统 ...
- dpkg用管道批量删除deb
dpkg -l |grep deepin|awk '{print $2}'|xargs sudo dpkg -P