是否可以创建程序集或模块/类的动态副本?我能够轻松地找到如何使用AssemblyBuilder
/ ModuleBuilder
从头开始创建动态程序集或模块(如here所示),但有没有办法创建现有的副本汇编或键入各自的Builder类型?
例如,假设您有一个标准的控制台应用程序,其中包含必需的Program
类和Main
方法,并且您将另一个类添加到项目中,称为“A”。我的目标是使用A
或类似内容在Main
方法中创建ModuleBuilder
类的动态副本。
我想复制班级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
。我也不需要能够保存组件。
答案 0 :(得分:1)
从上面的评论中看,您希望生成代码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/