从 dotnet 5 开始,如何将 AssemblyBuilder 生成的模块保存在磁盘上?

问题描述

以下示例对于 dotnet 5.0 已过时:https://docs.microsoft.com/en-us/dotnet/api/system.reflection.emit.assemblybuilder?view=net-5.0#examples

即使查询字符串包含 ?view=net-5.0,该示例也无法成功编译。我已经将其中一些过时的功能更新为新 API。

但是,我仍然需要保存生成的模块 (DLL) 以通过 PEVerify 或 IL Verifier 检查 IL。

那么,Save() 中缺少的 AssemblyBuilder 方法是什么?


目前我的解决方法是将 <TargetFramework>net5.0</TargetFramework> 中的 <TargetFramework>net48</TargetFramework> 替换为 .csproj,但这完全是一团糟。

而且,虽然 dotnet 命令行工具禁止使用 -f net48,但我们仍然可以在 .csproj 中手动更改它并获得正确的项目。

解决方法

目前您不能,因为该功能 is not yet implemented in .NET Core/.NET 5.0 and probably won't be in .NET 6.0 either

除非所述功能在 .NET 中实现,ILPack 应该满足您的要求。

关于破碎的例子,我有opened an issue on GitHub

,

目前我的解决方法是将 <TargetFramework>net5.0</TargetFramework> 中的 <TargetFramework>net48</TargetFramework> 替换为 .csproj,但这完全是一团糟。

另外,虽然dotnet命令行工具禁止使用-f net48(即.net Framework),但我们仍然可以在.csproj中手动修改,得到正确的工程。