是否可以创建程序集或模块/类的动态副本?我能够轻松地找到如何使用 AssemblyBuilder
/ModuleBuilder
从头开始创建动态程序集或模块(如 here 所示),但是有没有办法创建一个现有程序集或类型的副本作为其各自的构建器类型?
编辑1
例如,假设您有一个标准的控制台应用程序,其中包含必需的 Program
类和 Main
方法,您将另一个类添加到项目中,称为“A”。我的目标是使用 ModuleBuilder
或类似的方法在 Main
方法中创建 A
类的动态副本。
编辑2
我想复制 A
类的原因是因为我想要精确 A
类的副本,包括方法,字段,属性等,但动态创建。我不想要的是必须使用 TypeBuilder/CodeDom 手动创建类型及其所有成员(方法、字段、属性等),因为在某些情况下,我可能不知道有关类及其内部工作原理的所有详细信息,或者类可能很大且乏味/无法使用此方法重现。
希望一些伪代码可以说明我在寻找什么:
// create AssemblyBuilder using the assembly of the A class so you end up with a
// dynamic copy of the assembly
AssemblyBuilder ab = new AssemblyBuilder(Assembly.GetAssembly(typeof(A)));
// get the Type as a TypeBuilder from the AssemblyBuilder
TypeBuilder tb = ab.GetModule("Test.exe").GetType(typeof(A).FullName);
我基本上只是想将 Assembly
装箱为 AssemblyBuilder
或将 Type
装箱为 TypeBuilder
。我也不需要能够保存程序集。
最佳答案
从您上面的评论来看,您似乎想要生成代码 C# 并且也可以对其进行编译。
如果是这样,我建议您应该查看 CodeDom 而不是使用 AssemblyBuilder
和 ModuleBuilder
。它将直接且易于理解。
下面的链接可以帮助您:
http://msdn.microsoft.com/en-us/library/650ax5cx.aspx
http://www.codeproject.com/Articles/7119/Compiling-with-CodeDom
顺便说一句,如果您想构建一个类似于 Reflector 的工具,它将加载外部程序集并生成回代码,那么您也应该使用 CodeDom。
引用这里:
https://www.simple-talk.com/dotnet/.net-framework/-.net-reflector-meets-the-codedom/
关于c# - 创建现有程序集/模块的动态副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364466/