Thi*_*heT 6 c# reflection dynamic-assemblies
是否可以创建程序集或模块/类的动态副本?我可以很容易地找到如何从头开始创建使用动态装配或模块AssemblyBuilder/ ModuleBuilder(所看到这里),但有一种方式来创建一个现有的集或类型的副本,其各自的生成器类型?
例如,假设您有一个标准的控制台应用程序,其中包含必需的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);
Run Code Online (Sandbox Code Playgroud)
我基本上只想把它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/