C# 使用Reflection.Emit动态创建以特定.NET运行时为目标的程序集

C# 使用Reflection.Emit动态创建以特定.NET运行时为目标的程序集,c#,.net,dynamic,reflection,reflection.emit,C#,.net,Dynamic,Reflection,Reflection.emit,我正在使用Reflection.Emit开发一个在运行时动态创建程序集的工具 该工具的目标是.NET4.5框架 我想知道是否可以指定动态生成的程序集目标的.NET运行时(例如:指定将创建.NET 3.5程序集)。这里的内置反射发射非常有限;您要做的是告诉它使用特定的mscorlib程序集,但问题是大量反射发射涉及到传递Types,这使得这非常困难。我发现解决这个问题最实用的方法是切换到-部分。此dll故意使用与Reflection.Emit相同的基本API,但它不是针对内置的类型对象操作,而是针

我正在使用Reflection.Emit开发一个在运行时动态创建程序集的工具

该工具的目标是.NET4.5框架


我想知道是否可以指定动态生成的程序集目标的.NET运行时(例如:指定将创建.NET 3.5程序集)。

这里的内置反射发射非常有限;您要做的是告诉它使用特定的
mscorlib
程序集,但问题是大量反射发射涉及到传递
Type
s,这使得这非常困难。我发现解决这个问题最实用的方法是切换到-部分。此dll故意使用与Reflection.Emit相同的基本API,但它不是针对内置的
类型
对象操作,而是针对IKVM实例操作,这些实例在
宇宙的概念中加载。然后,
Universe
可以加载所需的mscorlib dll,以及您需要的任何其他dll

对此的更改通常只是使用
语句更改
。这种方法在protobuf-net(特别是预编译工具)中使用,不仅允许不同的版本,而且允许针对整个不同的框架。是否要创建一个dll,该dll以常规.NET应用程序中的silverlight为目标?没问题。最棘手的一点(IMO)就是简单地找到正确的mscorlib和支持文件以加载到
宇宙中

查看我的博客帖子,或者查看IKVM上的示例,如


我可以根据需要提供更多信息。

谢谢。难道不可能“愚弄”类型实例,让它们从所需的mscorlib加载吗?@lysergic acid如果是,尽管做了很多尝试,但我从未成功让它工作。然而,IKVM几乎是第一次起作用。@麦角酸作为一个补充说明,很可能是当Roslyn最终发货时,里面有一些部件可以让它起作用。。。Roslyn会帮助谁?我以为它是在源代码上运行的level@lysergic-acid您可以使用Roslyn在运行时生成程序集,因此您可以使用它生成针对不同版本的框架的程序集,这并非不可回避的。它从C#而不是IL生成程序集的事实实际上并不重要。