fody插件在.NET Core程序中的应用

fody插件在.NET Core程序中的应用

了解Fody插件

Fody 是一个强大的 .NET 编译器扩展工具,它的核心能力是在代码编译过程中,直接修改生成的 IL(中间语言),这表示可以在不直接修改源代码的情况下,为程序集添加新的功能或逻辑。

Fody 采用插件式架构,其功能通过不同的插件(称Weavers)来实现。

Fody插件优势

代码增强

  • Fody 允许开发者通过各种插件在编译时自动修改 IL 代码,从而实现功能增强。
  • 常见用途包括属性更改通知、方法拦截、资源注入等。

减少样板代码

  • 使用 Fody 可以显著减少手动编写的重复性代码,例如实现 INotifyPropertyChanged 接口时所需的大量样板代码。

性能优化

  • 某些插件可以在编译期完成原本需要在运行时处理的任务,从而提升程序性能。
  • 例如,通过 ILAccess.Fody 直接访问私有成员而避免使用反射。

简化部署

  • 如 Costura.Fody 插件可以将所有依赖的 DLL 文件打包到主 EXE 文件中,生成单一文件,便于分发和部署。

以下是一些常用的官方插件:

插件名称主要功能
Costura.Fody将引用的程序集(DLL)作为资源嵌入到主程序集中。
PropertyChanged.Fody为实现了 INotifyPropertyChanged 接口的类注入属性通知代码,极大简化MVVM模式开发。
MethodTimer.Fody在方法执行前后自动插入代码,用于统计方法的执行时间。
NullGuard.Fody自动为方法参数和返回值添加空值检查,提升代码健壮性。
InlineIL.Fody允许你在C#代码中直接嵌入IL指令,用于高级优化或实现一些底层操作。

简单应用

在 .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文件。

滚动至顶部
售前客服
周末值班
电话

电话

13910187371