将类添加到当前程序集中

时间:2013-03-08 14:07:14

标签: c# .net-assembly activator roslyn

我的应用程序中有一个当前程序集,我想从外部cs文件中添加一个类到这个程序集中。有可能吗?我想像插件一样使用它。现在我正在尝试使用:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();

和Activator,但没有成功。我的应用程序是使用Roslyn,所以也许它可以做到。 任何想法都将不胜感激。

编辑:下一个问题是:我可以使用外部文件(带有类的cs文件)从该文件中获取实例,但类的构造函数需要从当前的程序集引用sceneManager。那么可以向Roslyn发送类似的东西并从中获取类的实例吗?

2 个答案:

答案 0 :(得分:5)

您无法修改已加载的现有装配。

相反,您可以将代码编译为新程序集(使用Roslyn,CodeDOM,Sigil或类似的库)并使用反射加载该程序集。

答案 1 :(得分:3)

'.cs'文件本身就是只是文本。你不能用它做任何而不用通过某种途径编译它。但不是:您无法在运行时向程序集中添加额外的类。您可以在运行时通过CSharpCodeProvider或类似代码编译代码,并加载生成的程序集。但是,这很麻烦。根据上下文,如果你需要在运行时从脚本中做很多事情,那么像Iron Python这样的工具可能更好。