当前位置: 首页 > news >正文

我的c#用到Newtonsoft.Json.dll,Fleck.dll这两个dll能否打到一个exe 中,而不是一起随着exe拷贝

✅ 推荐方案:使用 Costura.Fody

Costura 会自动把所有引用的 DLL 内嵌进你的 .exe 中(不依赖外部文件),构建完就是一个自包含的单文件 EXE,适合发布使用。


🧰 步骤详解

① 安装 NuGet 包(必须)

打开你的项目 → 右键 → 管理 NuGet 包 → 安装以下两个包:

Install-Package Fody
Install-Package Costura.Fody

② 确保项目中引用了目标 DLL(如 Fleck.dll, Newtonsoft.Json.dll

  • 你必须通过 “添加引用” → “浏览 DLL” 或 NuGet 安装方式让它们出现在 引用

  • 确保它们属性里 Copy Local = true


③ 编辑你的 .csproj(可选确认)

.csproj 文件中(右键项目 → 编辑项目文件)加入以下:

<Weavers><Costura />
</Weavers>

如果是使用 NuGet 自动安装,通常已经自动添加。


④ 构建你的项目(Release 模式)

构建后你会看到:

bin\Release\
│
├── YourApp.exe     ✅ 单一文件,包含所有 DLL
├── *.pdb           (调试用,可删)
└── 无需其他 DLL

你可以直接复制 .exe 给别人运行(前提是目标机器已装 .NET Framework 4.8)。


✅ Costura 支持的内容

类型支持
DLL 嵌入✅ 所有托管 DLL(包括 Newtonsoft.Json, Fleck)
子 DLL 调用反射✅ 支持
非托管 DLL / .so⚠️ 默认不支持,要特殊处理

🔍 验证方法

你可以用解包工具(如 ILSpy)打开生成的 EXE,如果看到 .resources.dll 中包含了 Fleck, Newtonsoft.Json 等说明嵌入成功。


🚫 替代方案(不推荐)

方法原因
ILMerge维护已停止,部分项目合并失败或有兼容性问题
手动加载资源 DLL可行但复杂,需写代码从资源中加载 DLL(AppDomain.CurrentDomain.AssemblyResolve

✅ 总结

目标方法
.NET Framework 4.8 打包所有 DLL 到一个 .exeCostura.Fody 最稳定、最简单
自动打包、支持反射、无需改代码✅ 完全支持

在你的项目中已经正确引用了 FodyCostura.Fody,并且 .csproj 文件中也已经包含了 Costura.Fody.propstargets 的导入项:

<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.props" ... />
<Import Project="..\packages\Costura.Fody.6.0.0\build\Costura.Fody.targets" ... />

但还 缺少关键的配置文件FodyWeavers.xml,这个文件就是告诉 Fody 使用哪些插件(例如 Costura)来编织 IL。


✅ 正确做法:添加 FodyWeavers.xml 文件

在你的项目根目录(与 .csproj 同级)新建一个文件:

FodyWeavers.xml

内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<Weavers><Costura />
</Weavers>

这个文件就是 Fody 的插件配置清单。


📁 文件结构应该是这样:

SedeiniEditor\
│
├── SedeiniEditor.csproj
├── FodyWeavers.xml   👈 你需要加这个文件
├── Program.cs
├── SedeIniEditForm.cs
└── ...

🧪 构建验证

你可以打开 bin\Release\ 目录构建后的文件,应该看到:

  • SedeiniEditor.exe

  • 没有 Fleck.dll / Newtonsoft.Json.dll ❌(说明已嵌入)

  • 如果你解压 .exe 或用 ILSpy 打开,会看到嵌入的资源里包含相关 DLL。


📌 可能问题排查

问题原因解决方案
.exe 构建后仍依赖外部 DLL没有 FodyWeavers.xml添加此文件
提示无法找到 .targets 文件没有还原 NuGet 包点击“还原 NuGet 包”或 nuget restore
报 MSBuild 不识别 <Weavers>误添加到 .csproj 而不是独立文件不要添加 <Weavers>.csproj,它属于 FodyWeavers.xml

✅ 总结

任务操作
启用 Costura 打包 DLL在项目目录添加 FodyWeavers.xml 文件
文件内容<Weavers><Costura /></Weavers>
构建后生成单一 .exe自动完成,无需手动配置

http://www.lryc.cn/news/614314.html

相关文章:

  • 无人机仿真环境搭建
  • 使用pytest对接口进行自动化测试
  • 微软XBOX游戏部门大裁员
  • QS菜单栏的安全与隐私Tile组件(GMS中的)加载逻辑
  • 使用 C# 通过 .NET 框架开发应用程序的安装与环境配置
  • Godot ------ 通过鼠标对节点进行操作
  • 僵尸进程、孤儿进程、进程优先级、/proc 文件系统、CRC 与网络溢出问题处理(实战 + 原理)
  • 强制用户更改WordPress密码的重要性及实现方法
  • Linux 内存管理之page folios
  • 电脑定时开关机终极指南
  • 静态路由主备切换
  • 2025产品经理接单经验分享与平台汇总
  • 腾讯云 CodeBuddy IDE:可以使用gpt5的ide
  • 操作系统-实验-进程
  • CVRF 是什么?微软弃用 MS 编号后,网络安全的下一个标准
  • 文件结构树的├、└、─ 符号
  • Java文件操作和IO
  • R语言代码加密(1)
  • 无人机航拍数据集|第9期 无人机风力电机表面损伤目标检测YOLO数据集2995张yolov11/yolov8/yolov5可训练
  • 【前端】纯代码实现Power BI自动化
  • 深入解析K-means聚类:从原理到调优实战
  • Milvus向量数据库版本升级
  • Agent 开发进阶路线:从基础功能到自主决策
  • [Python]代码随想录Day35[动态规划][背包问题]
  • ELK+Redis+Nginx多节点部署实战:从日志收集到可视化分析
  • Docker容器部署discuz论坛与线上商城
  • Centos7升级redis
  • springboot读取编译时传递的参数
  • Spring AI 系列之四十 - Spring AI Alibaba-集成百炼智能体
  • 用browse实现菜单功能的方法