7

是否可以创建程序集或模块/类的动态副本?AssemblyBuilder我可以很容易地找到如何使用/ ModuleBuilder(如此处所示从头开始创建动态程序集或模块,但是有没有办法将现有程序集或类型的副本创建为其各自的 Builder 类型?

编辑 1

例如,假设您有一个标准控制台应用程序,其中包含必需的Program类和Main方法,并且您将另一个类添加到项目中,称为“A”。我的目标是在使用方法或类似方法中创建A类的动态副本。MainModuleBuilder

编辑 2

我想要复制 class 的原因A是因为我想要一个完全相同的 class 副本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);

我基本上只是想将 an 装箱Assembly为 anAssemblyBuilderTypeas TypeBuilder。我也不需要能够保存程序集。

4

1 回答 1

1

从您上面的评论来看,您似乎想要生成代码 C# 并且也可以编译它。如果是这样,我建议您应该查看 CodeDom 而不是使用AssemblyBuilderand ModuleBuilder。它将直截了当且易于理解。

以下链接将为您提供帮助:

http://msdn.microsoft.com/en-us/library/650ax5cx.aspx

http://www.codeproject.com/Articles/7119/Compiling-with-CodeDom

http://blogs.msdn.com/b/davideb/archive/2009/06/03/codedom-vs-t4-two-approaches-to-code-generation.aspx

顺便说一句,如果您想构建一个类似于 Reflector 的工具,它将加载外部程序集并生成回代码,那么您也应该使用 CodeDom。

从这里参考:

https://www.simple-talk.com/dotnet/.net-framework/-.net-reflector-meets-the-codedom/

于 2013-05-03T18:04:31.690 回答