.NET 6下合并多个DLL为单个文件的可用工具与技术咨询
.NET 6类库合并多DLL的工具与方案
针对.NET 6类库的DLL合并需求,以下是几个可行的工具和技术,替代你之前在.NET Framework中使用的方案:
1. ILRepack.Lib.MSBuild.Task
这是ILRepack的.NET Core适配版本,专门支持.NET 6类库的合并需求,还能处理XML文档的合并(和你之前用ILRepack合并XML的需求匹配)。它通过MSBuild任务集成到构建流程,无需额外命令行操作。
- 用法:NuGet安装该包后,在项目的
.csproj中添加配置,指定要合并的依赖集和输出路径,示例配置:
<ItemGroup> <ILRepackInclude Include="依赖DLL路径" /> </ItemGroup> <PropertyGroup> <ILRepackOutput>$(OutputPath)\合并后的类库.dll</ILRepackOutput> <ILRepackXmlMerge>true</ILRepackXmlMerge> <!-- 合并XML文档 --> </PropertyGroup>
2. Fody + Costura.Fody(新版)
新版的Costura.Fody已经完全适配.NET 6,和你在.NET Framework中的使用逻辑一致:将依赖DLL嵌入到目标类库的资源中,运行时自动提取加载。
- 用法:依次安装
Fody和Costura.FodyNuGet包,添加FodyWeavers.xml配置文件(可自定义要嵌入的依赖),构建后目标类库会包含所有依赖的二进制内容。
3. ILMerge.Lib(社区维护版)
微软官方ILMerge的社区维护分支,提供了.NET 6兼容版本,支持类库DLL的合并,可通过命令行或MSBuild任务调用,能灵活控制合并规则(比如排除特定依赖、设置合并优先级)。
4. 手动嵌入资源+自定义加载逻辑
如果不想依赖第三方工具,可以手动实现:
- 将所有依赖DLL设置为嵌入资源(在项目文件中设置
<EmbeddedResource>); - 在类库的静态构造函数中注册
AssemblyResolve事件,当CLR无法找到依赖时,从嵌入资源中读取并加载对应的程序集。示例代码:
static 你的类库类名() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { var assemblyName = new AssemblyName(args.Name).Name + ".dll"; var resourceName = $"你的项目命名空间.{assemblyName}"; using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName); if (stream == null) return null; var assemblyBytes = new byte[stream.Length]; stream.Read(assemblyBytes, 0, assemblyBytes.Length); return Assembly.Load(assemblyBytes); }; }
这种方式完全可控,适合需要配合混淆逻辑的场景。
5. 混淆+合并一站式工具
针对你之前用SmartAssembly/.NET Reactor的混淆合并需求:
- ConfuserEx:开源混淆工具,支持.NET 6类库,可在混淆的同时合并依赖DLL;
- 新版SmartAssembly/.NET Reactor:这两个商业工具的最新版本已经适配.NET 6,能直接对.NET 6类库进行混淆和DLL合并操作,用法和.NET Framework下基本一致。
内容的提问来源于stack exchange,提问作者stgerb
相关产品推荐
相关产品推荐

