首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ILMerge 程序集未正确合并

ILMerge 是一个命令行工具,用于将多个 .NET 程序集合并为一个程序集。它可以将程序集中的类型和资源合并到一个单独的程序集中,从而减少应用程序的复杂性。

在使用 ILMerge 时,可能会遇到程序集未正确合并的问题。这通常是由于以下原因导致的:

  1. 程序集之间存在循环引用。在这种情况下,ILMerge 无法确定哪个程序集应该首先加载。
  2. 程序集之间存在版本不一致。在这种情况下,ILMerge 可能会选择错误的程序集版本。
  3. 程序集之间存在冲突的类型或资源。在这种情况下,ILMerge 可能会选择错误的类型或资源。

为了解决这些问题,可以尝试以下方法:

  1. 确保程序集之间没有循环引用。
  2. 确保程序集之间的版本一致。
  3. 使用 /ndebug 选项来禁用调试信息的合并。
  4. 使用 /allowMultiple 选项来允许合并多个程序集。
  5. 使用 /targetplatform 选项来指定目标平台。
  6. 使用 /internalize 选项来内部化程序集。
  7. 使用 /useLatest 选项来使用最新版本的程序集。

如果问题仍然存在,可以尝试使用其他工具,如 ILRepack,它可以更好地处理程序集合并问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET 使用 ILMerge 合并多个程序,避免引入额外的依赖

我们有多种工具可以将程序合并成为一个。打包成一个程序可以避免分发程序的时候带上一堆依赖而出问题。 ILMerge 可以用来将多个程序合并成一个程序。...本文介绍使用 ILMerge 工具和其 NuGet 工具包来合并程序和其依赖。 ---- 以 NuGet 包的形式使用 ILMerge ILMerge 提供了可供你项目使用的 NuGet 包。...将这些依赖和我们生成的主程序合并成一个程序,这样分发程序的时候只需要一个程序即可。...如果你希望在你的项目当中进行尝试,可以把所有 /log 参数之后的那些程序名称改为你自己的名称。 那么在编译的时候使用命令 msbuild /t:ILMerge 就可以完成程序合并了。...,如果是控制台程序,则为 exe /out 输出文件的名称(或路径)(此路径可以和需要合并程序名称相同,这样在合并完之后会覆盖同名称的那个程序) /log 所有需要合并程序名称(或路径) /targetplatform

99530

.NET 使用 ILRepack 合并多个程序(替代 ILMerge),避免引入额外的依赖

我们有多种工具可以将程序合并成为一个。比如 ILMerge、Mono.Merge。...这些需要合并的参数中,第一个参数是主程序,而后续其他的都是待合并程序。区别主程序和其他程序的原因是输出的程序需要有名称、版本号等等信息,而这些信息将使用主程序集中的信息。...将所有依赖合并指的是将缺少的依赖也一起作为命令行参数传入要合并程序集中。 而另一种是增加一个参数 /lib,即添加一个被搜索的依赖程序的目录。将这个目录指定后,则可以正确解析依赖完成合并。...而且这些依赖将成为合并后的程序的依赖,不会合并程序集中。...同时很早就有支持 Portable PDB 的拉取请求,但至今合并

65850

.NET 将多个程序合并成单一程序的 4+3 种方法

有没有什么方法可以把这些依赖和我们的程序合并到一起呢? 本文介绍四种将程序和依赖打包合并到一起的方法,每一种方法都有其不同的原理和优缺点。...: .NET 使用 ILMerge 合并多个程序,避免引入额外的依赖 - walterlv ILRepack ILRepack 基于 Mono.Ceil 来进行 IL 合并,其使用方法可以参见我的博客...: .NET 使用 ILRepack 合并多个程序(替代 ILMerge),避免引入额外的依赖 - walterlv ILMerge-GUI 工具(已过时,但适合新手随便玩玩) 你可以在以下网址中找到...使用 SourceYard 源代码包,是直接将源代码合并到了目标项目里面。 使用 ILMerge / ILRepack,是在 IL 级别对程序进行了合并。...这是一个分别通过 Fody、SourceYard 和 ILMerge / ILRepack 生成的程序的反编译图。

83230

C# 版dll 程序合并工具

微软的ILMerge工具。 下载地址:https://www.microsoft.com/en-us/download/details.aspx?...自己开发ILMergeGUI  微软的ILMerge需要安装才能使用,结合Costura.Fody可以将ILMerge合并到自己开发的工具中,并且无需安装ILMerge....ILMerge关键API: public void SetInputAssemblies(string[] assems); 设置输入的程序,每一项为程序包含文件绝对路径的全名,其中参数第一个程序为主程序... TargetKind { get; set; } 获取或设置目标平台类型(Windows应用程序、DOS应用程序、DLL) public enum Kind         {            ...            WinExe = 2,             SameAsPrimaryAssembly = 3,         } 此工具设置为SameAsPrimaryAssembly,即与输入文件的主程序相同

1.8K70

C# 将dll打包到程序ILMerge

本文告诉大家如何把 dll 打包到程序中。很多时候的 软件 在运行的时候需要包括很多 dll 或其他的文件,这样的软件在给其他小伙伴,就需要做一个压缩包,或者用安装软件。...这样感觉不太好,所以本文告诉大家一个方法,把所有的 dll 放在一个文件,于是把自己的软件给小伙伴就只需要给他一个程序。...ILMerge 首先下载 ILMerge 然后安装,感觉安装很简单 假如有 1.exe 和 1.dll 准备把 1.dll 合并到 2.exe 那么可以使用下面代码 ilmerge /target:...exe /out:E:\2.exe /log E:\1.exe /log E:\1.dll /targetplatform:v4 这里的 target 为目标平台 out 就是输出的文件 log 就是准备合并的...参见:http://www.cnblogs.com/blqw/p/LoadResourceDll.html ILMerge将源DLL合并到目标EXE - HackerVirus - 博客园 ----

1.3K10

.NET 的程序加载上下文

从字节数组加载的程序都是在没有上下文的情况下加载的,除非程序的标识(在应用策略后建立)与全局程序缓存中的程序标识匹配;在此情况下,将会从全局程序缓存加载程序。...使用 ILRepack / ILMerge 合并依赖 前面我们说过,加载位置上下文中的程序可以依赖默认加载上下文中的程序,而反过来却不行。...如果插件程序依赖了一些主程序没有的依赖,那么插件可以考虑将所有的依赖合并入插件单个程序集中,避免依赖其他程序,导致不得不去非探测路径加载程序。...关于使用 ILRepack 合并依赖的内容,可以阅读我的另一篇博客: .NET 使用 ILRepack 合并多个程序(替代 ILMerge),避免引入额外的依赖 - walterlv 首先推荐使用 ILRepack...来进行合并,如果你愿意,也可以使用 ILMerge: .NET 使用 ILMerge 合并多个程序,避免引入额外的依赖 ---- 参考资料 Loading .NET Assemblies out

24030

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

本文主要是使用微软的ILMerge工具将源DLL合并到目标EXE,因此,需要下载以下工具: https://www.microsoft.com/en-us/download/details.aspx?...工具安装完毕后,需使用cmd命令提示符进入该目录使用该工具,命令为: CD C:\Program Files (x86)\Microsoft\ILMerge 如下图所示: ?...如果要运行以上程序,ConsoleApp12.exe 与 Newtonsoft.Json.dll 是必不可少的,但这样子看起来好别扭,如果能合并成一个文件,多好啊。...下面的工作将对以上两个文件进行合并,会使用以上介绍的ILMerge.exe工具。 假如在D盘上的Test文件夹,将对以上两个文件进行合并,如下图所示: ?...点击新生成的New_ConsoleApp12.exe,程序将正常地运行,如下图所示: ? 我们可以使用ILSpy.exe查看刚才合并之后的New_ConsoleApp12.exe,如下图所示: ?

3.3K00

提取Chrome中Cookie工具分享

这个工具将从Google Chrome浏览器中提取Cookie,是一个.NET程序,可以在C2中通过工具如PoshC2使用或CobaltStrike的命令。 项目地址点击底部阅读原文查看。...该URL允许程序通过websockets上的API与Chrome的devtools进行交互,从而为我们提供了这些devtools的全部功能。...但是,为了使用WebSockets与Chrome进行通信,添加了WebSocket4Net程序包。...如果要在C2上运行此命令(例如使用PoshC2的sharpcookiemonster命令或通过CobaltStrike的命令),请execute-assembly使用ILMerge将生成的可执行文件与依赖库合并...例如,首先重命名原始二进制文件,然后运行: ILMerge.exe /targetplatform:"v2,C:\Windows\Microsoft.NET\Framework\v2.0.50727"

1.6K20

异常:System.BadImageFormatException,未能加载正确程序XXX或其某一依赖项

常:System.BadImageFormatException,未能加载正确程序XXX或其某一依赖项 看到这个异常,我估计谁都会头大一阵子,不过还好,由于前面知道要设置为x86,加上以前观察过IIS7...关于应用程序池的高级设置,所以这个问题也就简单了。...打开IIS7,在左侧列表中,选中“应用程序池”,然后在右边列表中,选中当前网站所在的程序池,最后点击右侧的链接“高级设置” 找到“启用 32 位应用程序”,将它的值设置为 “True”,并点击“确定”。...信息服务(IIS)管理器”,在最右边的窗口中点击“应用程序池”,在用到的应用程序池上右键“高级设置”。...02、启用32位应用程序为True即可。 ?

5.3K20

不同程序,名称空间类名和方法签名都一样的方法,如何调用

有时候,你可能会遇到这样的问题,不同程序,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。...创建两个不同的程序 我们来创建两个不同的程序,但是他们的名称空间一样: dotnet new classlib -o ClassLibrary1 -n ClassLibrary1 dotnet new...运行就会得到这样的结果: ClassLibrary1.Class1.Where ClassLibrary2.Class1.Where 为什么会有这种问题 一般来说你会在三种情况下遇到这个问题: 某个开源项目使用 ILmerge...把多个程序合并成一个程序。...总结 通过别名的方式,我们可以解决不同程序,名称空间类名和方法签名都一样的方法,如何调用的问题。

1.3K20

不同程序,名称空间类名和方法签名都一样的方法,如何调用

有时候,你可能会遇到这样的问题,不同程序,名称空间类名和方法签名都一样的方法,如何调用。本文将介绍如何通过别名的方式来解决这个问题。...创建两个不同的程序 我们来创建两个不同的程序,但是他们的名称空间一样: dotnet new classlib -o ClassLibrary1 -n ClassLibrary1 dotnet new...运行就会得到这样的结果: ClassLibrary1.Class1.Where ClassLibrary2.Class1.Where 为什么会有这种问题 一般来说你会在三种情况下遇到这个问题: 某个开源项目使用 ILmerge...把多个程序合并成一个程序。...总结 通过别名的方式,我们可以解决不同程序,名称空间类名和方法签名都一样的方法,如何调用的问题。 参考 extern alias (C# Reference)^1

13520

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

[http://www.cnc6.cn] 一、本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址下载: https://github.com...pan.baidu.com/s/1kV9W34b ③【推荐】从Nuget地址安装工具: https://www.nuget.org/packages/Costura.Fody/ 并从Visual Studio中的程序包管理器控制台进行安装...最新版本请打开Nuget地址进行获取 二、安装之后,Costura.dll等已经被引用进来,如下图所示: 三、新建一个引用Newtonsoft.Json.dll的解决方案,这个就借用上一篇内容【[C#]使用ILMerge...将源DLL合并到目标EXE(.NET4.6.2)】的例子,解决方案下载地址: https://pan.baidu.com/s/1jIzjpkU 代码如下: using System; using System.Collections.Generic...五、我们可以使用ILSpy.exe查看刚才生成之后的ConsoleApp12.exe,如下图所示: 从以上可以看出,可以使用Costura.Fody将源DLL合并到目标EXE。

2.2K00
领券