我正在使用Reflection.Emit开发一个在运行时动态创建Assembly的工具。
该工具的目标是.NET 4.5框架。
我想知道是否可以指定动态生成的程序集所针对的.NET运行时(例如:指定将创建.NET 3.5程序集)。
答案 0 :(得分:6)
内置反射发射在这里非常有限;你想要做的是告诉它使用特定的mscorlib
程序集,但问题是很多反射 - 发射涉及传递Type
,这使得难以置信的努力。我发现解决此问题的最实用的方法是切换到IKVM.Reflection.dll - IKVM.NET的一部分。这个dll与Reflection.Emit具有相同的基本API 非常刻意,但它不是针对内置的Type
对象进行操作,而是针对IKVM实例进行操作,这些实例是以一个概念加载的。 Universe
。然后Universe
可以加载所需的mscorlib dll,以及您需要的任何其他dll。
对此的更改通常是 只更改using
语句。这种方法在整个protobuf-net(特别是预编译工具)中使用,不仅允许不同的版本,而且还可以定位整个不同的框架。想要从常规.NET应用程序创建一个针对silverlight的DLL吗?不是问题。最棘手的一点(IMO)变得简单地找到正确的mscorlib和支持文件加载到Universe
。
请参阅我的博文Enter the IKVM - 或查看有关IKVM的示例,例如Function Pointer Types。
我可以根据需要提供更多信息。