首页
学习
活动
专区
圈层
工具
发布

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

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

了解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会在编译过程中自动工作:

收集所有被项目引用的托管 DLL。

将这些 DLL 作为资源嵌入到主输出的程序集(通常是.exe 或 .dll)中。

同时,它会修改程序的入口点,在程序运行时自动从嵌入的资源中加载这些依赖项。

如图所示:

安全防范

引用的 DLL通过Fody插件嵌入进主输出的程序(比如dll)内,就是作为dll的资源存在的。

Virbox Protector支持对.net core dll进行保护,但我们不建议对内嵌的dll进行先加壳,然后在输出到另一个文件内;

这主要是在Windows系统上加壳后程序运行时不需要查找映射区域,在Linux系统上运行时Fody插件会自动将资源文件进行映射,导致程序运行时找不到映射的区域。

因此,我们建议直接主输出的程序(比如dll)进行保护,然后加壳时选择资源加密来保护内嵌的dll文件。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OJs3rAdd5oCRbX6u5I7jzqqw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券