了解Fody插件
Fody 是一个强大的 .NET 编译器扩展工具,它的核心能力是在代码编译过程中,直接修改生成的 IL(中间语言),这表示可以在不直接修改源代码的情况下,为程序集添加新的功能或逻辑。
Fody 采用插件式架构,其功能通过不同的插件(称Weavers)来实现。
Fody插件优势
代码增强
- Fody 允许开发者通过各种插件在编译时自动修改 IL 代码,从而实现功能增强。
- 常见用途包括属性更改通知、方法拦截、资源注入等。
减少样板代码
- 使用 Fody 可以显著减少手动编写的重复性代码,例如实现 `INotifyPropertyChanged` 接口时所需的大量样板代码。
性能优化
- 某些插件可以在编译期完成原本需要在运行时处理的任务,从而提升程序性能。
- 例如,通过 ILAccess.Fody 直接访问私有成员而避免使用反射。
简化部署
- 如 Costura.Fody 插件可以将所有依赖的 DLL 文件打包到主 EXE 文件中,生成单一文件,便于分发和部署。
以下是一些常用的官方插件:

简单应用
在 .NET Core 项目中,若想将引用的 DLL 嵌入到主程序集中,从而减少最终发布时的文件数量,**Fody** 及其插件 **Costura.Fody** 是经常使用的插件,它可以通过在编译时修改中间语言(IL)来实现。
以下介绍了使用 Costura.Fody 将依赖的 DLL 嵌入到主输出文件中的操作流程。
安装配置
首先,在你的 .NET Core 项目中使用 NuGet 包管理器安装必要的包。
- 通过 Visual Studio 的 **“管理 NuGet 程序包”** 搜索并安装 `Costura.Fody`。这个包通常会同时安装其依赖的 `Fody` 包。
- 或者,在包管理器控制台中执行命令:
Install-Package Costura.Fody
配置文件
安装完成后,项目根目录下会自动生成一个名为 **`FodyWeavers.xml`** 的配置文件,内容如图所示:

构建项目
完成配置后,重新构建项目即可。
其中`Costura.Fody`会在编译过程中自动工作:
1. 收集所有被项目引用的托管 DLL。
2. 将这些 DLL 作为资源嵌入到主输出的程序集(通常是.exe 或 .dll)中。
3. 同时,它会修改程序的入口点,在程序运行时自动从嵌入的资源中加载这些依赖项。
如图所示:

安全防范
引用的 DLL通过Fody插件嵌入进主输出的程序(比如dll)内,就是作为dll的资源存在的。
Virbox Protector支持对.net core dll进行保护,但我们不建议对内嵌的dll进行先加壳,然后在输出到另一个文件内;
这主要是在Windows系统上加壳后程序运行时不需要查找映射区域,在Linux系统上运行时Fody插件会自动将资源文件进行映射,导致程序运行时找不到映射的区域。
因此,我们建议直接主输出的程序(比如dll)进行保护,然后加壳时选择资源加密来保护内嵌的dll文件。
4001102288 欢迎批评指正
All Rights Reserved 新浪公司 版权所有
