gpt4 book ai didi

c# - 从 C# 中的程序集中提取类

转载 作者:行者123 更新时间:2023-11-30 23:06:12 24 4
gpt4 key购买 nike

是否可以从使用 Reflection.Emit 创建的程序集中提取类并将其物理保存到目录中?

我想使用此操作来动态生成具有特定内容(类、方法...)的项目。

有没有办法不用外部工具反编译就可以用代码保存动态类?

最佳答案

可以,只要你在调用AssemblyBuilder.DefineDynamicAssembly时传入AssemblyBuilderAccess.RunAndSaveAssemblyBuilderAccess.Save即可。 .然后你可以使用 Save method将它写入磁盘 - 对于通过 Peverify 运行它非常有用看看你做错了什么:)

请注意,这会保存 IL - 而不是 C# 源代码,因此您仍然需要反编译它们。如果您想要不反编译的 C# 源代码,那么您需要生成 C# 源代码作为您的来源 - 可能是通过 Roslyn 或 CSharpCodeProvider 传递它以获取 IL。

注意:并非所有操作在以这种方式使用时都是有效的 - 如果您要跳过可访问性检查,例如,访问您无法控制的类型的非公共(public)成员。这在某些仅运行时场景中是允许的,但在从磁盘加载的程序集中并不可靠。同样,很多事情在 IL 中都是可能的,但没有直接的 C# 等价物。

关于c# - 从 C# 中的程序集中提取类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48380934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com