C# 通过Costura.Fody把DLL合并到exe程序中

C#_一键生成绿色软件——Costura.Fody实战DLL与EXE合并指南 本文详细介绍了使用Costura.Fody工具将C#项目中的DLL依赖合并到单一EXE文件中的实战指南。通过安装配置、核心选项详解和避坑指南,帮助开发者轻松生成无需附带依赖文件的绿色软件,极大简化了WinForms/WPF等桌面应用的分发流程,提升用户体验。 阅读详情
AI摘要

文章讲述了如何使用Costura.Fody工具将包含非托管DLL(如UnRAR64.dll)的C#项目打包成独立exe,包括设置为嵌入资源、配置XML以及参考链接。,

打包独立的exe程序有多种方法,这里只说Costura.Fody。

我们用VS发布应用程序可以借助Costura.Fody直接打包成一个独立的exe程序,但是一些非托管的做了几次都没打进去,最后成功了,这里记录一下。

首先安装Costura.Fody

在这里插入图片描述
在这里插入图片描述

或者可以通过这里获取
https://github.com/Fody/Costura/tree/develop

我的版本是5.7.0安装好了后会自动生成FodyWeavers.xml

<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
	<Costura>
	</Costura>
</Weavers>

具体的配置可以参考上面的官方下载

非托管DLL

我的项目中使用了UnRAR64一个解压缩的DLL,是C++的非托管DLL,在项目编译的时候Costura并不能自动把这个DLL打入exe。

[DllImport("unrar64.dll")]

总结我失败的原因,需要几个步骤:
1,把UnRAR64.dll设置成嵌入的资源
2,把这个文件复制到目录Costura64下
3,需要在xml里配置非托管的文件名

如图:
在这里插入图片描述

<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
	<Costura>
		<Unmanaged64Assemblies>
			UnRAR64
		</Unmanaged64Assemblies>
	</Costura>
</Weavers>

小技巧

如何关闭Fody,有时候为了测试,我们可以屏蔽FodyWeavers.xml中的Costura,这样就失效了,例如:

<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
	<!--<Costura>
		<Unmanaged64Assemblies>
			UnRAR64
		</Unmanaged64Assemblies>
	</Costura>-->
</Weavers>

补充:

新的6.0版本需要修改目录改为了
Costura-win-x64
Costura-win-x86

<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
	<Costura IncludeRuntimeReferences="true" >
		<Unmanaged64Assemblies>
			UnRAR64
		</Unmanaged64Assemblies>
	</Costura>
</Weavers>

还有一些参数IncludeRuntimeReferences,可以把引用的NuGet包里的dll也打入exe

参考:
https://github.com/Fody/Costura/tree/develop
https://blog.youkuaiyun.com/qq_39200794/article/details/122146823

VS2015使用Costura.Fody将dll打包到exe 一、Costura.Fody是什么? Costura.Fody是一个Fody框架下的插件,可通过Nuget安装到VS工程中。 安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里。 二、使用步骤 1.安装Fody 步奏如下: 可以在VS的程序包管理器控制台中输入Install-Package Fody -Version 4.2.1来安装4.2.1版本的Fody 2.安装Costura.Fody 步奏如下: 在VS的程序包管理器控制台中输入Install-Package Co 阅读详情

相关推荐

使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件

我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,不能在其他电脑运行,那么很多同学可能在想了,能不能把我们编写好的程序打包成一个EXE文件,最好双击就能运行,当然可以了,那我们进入正题吧。 我们可以使用Costura.Fody插件完成,而且一行代码都不用写,并且超简单,我们一起来通过简单几步完成打包所有依赖项。 第一步:安装Costura.Fody 首先用Visual Studio 2017打开你的解决方案,...

u014090257的博客 2528

【WinForm】使用Costura.Fody打包编译成可独立运行的桌面程序

文章开场白免了吧,切入正题,在建项目的时候要注意,选择Windows 窗体应用(.NET Framework),然后打开 在解决方案资源管理器中,选择刚才的项目名,鼠标右键找到并打开管理NuGet包,然后在浏览选项卡里,输入一个Costura.Fody并查找,有就点安装,安装前需要注意选择支持的对应版本和依赖项 接下来,重新编译项目,没报错的话,项目里会出现一个隐藏的文件FodyWeavers.xml,这样就是可以了,这是Costura的配置文件,参考官方的文档修改吧,能按自己设置的条件编译程序,一般.

8068

C#使用SqlCipher以及使用Costura.Fody合并DLL进EXE

C#使用SqlCipher以及使用Costura.Fody合并DLL进EXE创建C# Windows 桌面 窗体应用使程序支持长路径默认项目属性的BUG使用NuGetSqlCipher的使用Costura.Fody的使用(合并SqlCipher的一大堆DLL) 创建C# Windows 桌面 窗体应用 框架.NET Framework 4.6.2 使程序支持长路径 4.6.2以后才System.IO模块才开始支持长路径 参看: https://www.cnblogs.com/zerodai/p/1022

coldwind的专栏 3036

把C#程序(含多个Dll)合并成一个Exe的简单方法

开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了。但是,很多时候我们本想开发一款只需要一个exe就能完美运行的小工具。那该怎么办呢?下文介绍一种超简单的方法,不用写一行代码就可轻松实现。这里我们需要用到一款名为Fody.Costura的工具。Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中。安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里。

anlog的专栏 1688

C#_打包发布变成一个绿色版本软件——Costura.Fody合并DLL和EXE

C#_打包发布变成一个绿色版本软件——Costura.Fody合并DLL和EXE 前言:之前使用C#制作软件后使用Costura.Fody打包都挺顺利的,没有遇到什么麻烦,可是现在使用Costura.Fody打包时遇到了点问题,做笔记记录解决过程以便于日后复习。 1、安装NuGet程序安装包Costura.Fody(本人使用VS2017,不可安装最新版) 2、解决编译报错问题 3、重新编译打包 安装NuGet程序安装包Costura.Fody(着重注意安装的版本)过新的版本会报错误 解决编译报错问题

会选科技的博客 3031

C#单文件EXE打包实战:Costura.Fody部署方案详解

单文件EXE是.NET桌面应用部署的核心诉求,本质在于解决运行时依赖、DLL版本冲突与终端环境受限等可靠性问题。其技术原理涉及编译期资源嵌入、运行时AssemblyResolve事件钩子及非托管DLL的路径管控。相比.NET 5+单文件发布易受杀毒软件拦截、ILMerge兼容性差等问题,Costura.Fody凭借MSBuild深度集成、细粒度配置能力和对.NET Framework项目的稳定支持,成为工业上位机、医疗设备软件等严苛场景的首选方案。本文聚焦C# WinForms/WPF项目中Costura.

weixin_33804582的博客 314

利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)

利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe) 原文:利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了。这样交给用户很不方便,希望的效果是直接交付一个exe文件。...

weixin_30642561的博客 812

C#单文件打包实战:ILMerge、Costura.Fody与.NET原生方案详解

在C#桌面应用开发中,动态链接库(DLL)依赖管理是部署环节的常见挑战。其核心原理在于.NET运行时需要定位并加载所有引用的程序集,传统分发方式要求EXE与依赖DLL共存于同一目录,否则会引发“找不到指定模块”的运行时错误。为解决这一问题,单文件打包技术应运而生,它通过将依赖项内嵌或合并到主可执行文件中,实现了应用程序的独立部署,极大提升了分发效率和用户体验。这项技术在工业自动化、工具软件分发及跨环境演示等场景中具有重要价值。本文聚焦于C#生态中三种主流方案:ILMerge适用于纯托管代码的合并,Costu

weixin_31856057的博客 303

C#利用Costura.Fody制作绿色单文件程序(含多个Dll)合并成一个Exe)

开发程序的时候经常会引用一些第三方的DLL,然后编译生成的exe文件就不能脱离这些DLL独立运行了。这样交给用户很不方便,希望的效果是直接交付一个exe文件。 这时候就需要借助一款名为Fody.Costura的插件。Fody.Costura是一个Fody框架下的插件,可通过Nuget安装到VS工程中。安装之后,就可以将项目所依赖的DLL(甚至PDB)文件全部打包到EXE文件里。 使用 Costura.Fody ,这个强大之处是可以在build阶段直接将依赖的DLL合并在目标EXE中,支持非托管DLL进行

chongxing01的专栏 4337

把C#程序(含多个Dll)合并成一个Exe的超简单方法

当CLR试图加载一个程序集但加载失败时,它会引发AppDomain.AssemblyResolve事件。我们的程序可以监听这个事件,并且在这个事件的处理函数中返回这个CLR试图加载的程序集,从而使程序得以继续正常运行。Fody.Costura在构建项目时会把EXE引用到的DLL全部嵌入到EXE文件中。当程序在运行的过程中用到其中某个DLL的时候(此时由于CLR无法找到该DLL文件,导致AppDomain.AssemblyResolve事件被触发)再从EXE文件的嵌入资源中提取所需的DLL。

.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 1774

【Linux】常见指令的使用

Linux常用指令

qq_74897518的博客 1479

[C#]使用Costura.Fody将源DLL合并到目标EXE

原文链接 一、本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址下载: https://github.com/Fody/Costura/releases ②从百度网盘下载: https://pan.baidu.com/s/1kV9W34b ③【推荐】从Nuget地址安装工具: https://www.nuget.org/packages/Costura.Fody/ 并从Visual Studio中的程序包管理器控制台进行安装: 建

qq_40143976的博客 1192

「0基础安装本地Hermes」本地部署Hermes|为Hermes装上UI图形界面

Hermes已经发布有一段时间了,不少小伙伴也装配上了这个Agent。相对于之前发布爆火的Openclaw,Hermes对于很多小白不是很友好,它没有属于自己的UI界面,只能在本地终端运行,前不久Github上有人发布自己的作品,让终端里的Hermes拥有属于自己的UI界面,EKKOLearnAI开发的Hermes UI界面项目为终端运行的Hermes提供了可视化操作方式,降低了使用门槛。该项目通过Web界面与本地Hermes Agent交互,实现更友好的操作体验。

qq_55438365的博客 1874

C# 使用Costura.Fody 将多dll合成一个exe,安装ILmerge和MSBuild.ILMerge.Task

1、使用Costura.Fody 将多dll合成一个exe 工具菜单选择NuGet 控制台命令 PM> Install-Package Costura.Fody 设置需要的DLL配置考入本地 2、安装ILmerge和MSBuild.ILMerge.Task 过程简介:在VS2013中通过NuGet安装ILmerge和MSBuild.ILMerge.Task,在程序编译时,经过这两个插件直接自动将exe和dll打包成一个exe放置在debug或release文件夹中,或者将dll合成一个dll。

秋̶᭄ꦿ攻城狮࿆ྂ 3101

从零构建:用Arduino和MCP2515模块搭建你的第一个CAN Bus网络

本文详细介绍了如何使用Arduino和MCP2515模块从零搭建CAN Bus网络,实现温湿度数据的传输与显示。涵盖硬件连接、软件配置、发送端与接收端代码实现,以及系统调试和进阶应用,帮助初学者快速掌握CAN总线通信技术。

d6e7f8的博客 834

ubuntu20.04安装Qt5.15.2并配置环境

qt官方取消了离线安装的方式,所以推荐在线安装,当然,如果想要自己通过源码编译也可以,参考官方文档:https://wiki.qt.io/Building_Qt_5_from_Git。 在线安装: 1.到官方网站下载:wget https://download.qt.io/official_releases/online_installers/qt-unified-linux-x64-online.run 2.修改文件权限:chmod 777 qt-unified-linux-x64-online.run

f120854632的博客 8807

将 C# 项目打包为单一 EXE 的完整指南

本文介绍了如何使用 Fody.Costura 工具将 C# 项目及其依赖的多个 DLL 文件打包成单一 EXE 文件。通过 NuGet 安装 Fody 和 Costura 插件,配置 FodyWeavers.xml,编译后即可自动嵌入所有引用程序集。该方法无需修改代码,兼容 .NET Framework 与 .NET Core/5+,适用于 WinForms、WPF 等桌面应用,极大简化部署流程。

lingshuangcanxue 2244

OpenHarness代码解读

Harness 是包裹在大模型之外、为其赋予完整执行能力的全套基础设施。模型负责提供智能与推理,Harness 则为模型提供感知、行动、记忆、工具与安全约束,使其从语言模型变成可自主完成复杂任务的实用智能体。我这里把向量数据库方案定义为:把对话片段、事件、偏好、工具结果等切成 memory chunks,做 embedding,存进向量库,查询时靠 ANN 相似度召回,再交给 LLM 读。AAAI 的综述类论文就明确指出,很多 LLM agent 的长期记忆就是这么做的。AAAI 期刊把文件系统方案。

qq_52053775的博客 188

C#将依赖的dll打包到一个exe的最简单方式

C#将程序依赖的所有Dll打包到exe中

lnsclt的博客 2439

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真

51单片机+L298驱动步进电机+L297测速+LCD1602显示+按键调试+Proteus仿真 *Proteus仿真 L298N是双H桥式驱动器。 L297是步进电机控制集成芯片(包括环形分配器),可产生四相驱动信号,应用于微处理机控制两相双极性和四相单极性步进电机。电动机可由半阶梯、正常和斩波驱动模式驱动,同时设于晶片内的PWM斩波线路容许以开关形式控制线路的电流。此器件只需要时钟、方向和模式输入信号。相位是由内部产生的,因此可减轻微处理机和程序设计的负担。 实例代码 /************

perseverance51博客 4585

移动端实战指南:深入理解 & 接入 IAB OMSDK

OMSDK(OpenMeasurementSDK)是IABTechLab推出的标准化测量工具,用于统一移动端/原生App广告的可见性和验证流程。其核心包括Native库(采集设备数据)和OMID JavaScript层(实现通信),通过标准化接口让开发者只需接入一套SDK即可兼容多个测量厂商,减少冲突和性能损耗。v1.4版本强化了对CTV和原生App场景的支持,而v1.5新增了画中画检测等功能。集成流程需通过IAB技术实验室注册下载,并遵循严格的命名空间规则。测试阶段需嵌入验证脚本并通过指定工具验证

帅次的博客 1193

C#单文件EXE打包实战:Costura.Fody、AOT与ILRepack选型指南

单文件EXE是Windows桌面应用交付的核心诉求,本质是解决.NET程序的依赖隔离与运行时兼容问题。其技术原理涵盖IL织入、原生AOT编译和程序集合并三类路径,分别对应不同项目生命周期与约束条件。在工业上位机、设备配套软件等强交付场景中,需兼顾.NET Framework/.NET 6+兼容性、非托管DLL支持、强签名保留及启动性能。当前主流方案中,Costura.Fody凭借NuGet一键集成与调试友好性成为维护型项目的事实标准;.NET AOT则为新项目提供无运行时依赖的极致轻量方案;ILRepack

weixin_33787529的博客 304

ComfyUI整合包、秋叶ComfyUI、Florence节点报错下载并加载Florence2模型No module named ‘timm.layers‘、ComfyUI报错解决

步骤操作1打开2地址栏输入cmd并回车3输入命令:4安装完成后重新打开 ComfyUI,执行工作流,即可解决报错。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1244
上一篇: C# 中大小端Endian
下一篇: Unity场景ab包加载压缩(LZ4,LZMA)格式的测试
Thinbug
博客等级 码龄22年 2万+粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thinbug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值