【问题标题】:Add class into current assembly将类添加到当前程序集中
【发布时间】:2013-03-08 14:07:14
【问题描述】:

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

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

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

编辑:它的下一个问题是:我可以使用外部文件(带有类的cs文件)从这个文件中获取实例,但是类的构造函数需要从当前汇编中引用场景管理器。那么是否可以向 Roslyn 发送类似的引用并从中获取类的实例?

【问题讨论】:

    标签: c# .net-assembly activator roslyn


    【解决方案1】:

    您不能修改已加载的现有程序集。

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

    【讨论】:

      【解决方案2】:

      “.cs”文件本身就是文本。如果不通过某种途径编译它,你就不能用它做任何事情。但是不可以:您不能在运行时将额外的类添加到程序集中。您可以在运行时通过CSharpCodeProvider 或类似方法编译代码,然后加载生成的程序集。不过,这很麻烦。根据具体情况,如果您需要在运行时通过脚本执行大量操作,则 Iron Python 之类的工具可能更可取。

      【讨论】:

      • 好的,我正在使用 Roslyn 进行运行时脚本,所以我尝试使用它加载新程序集。
      • 仔细一想,我发现了一个小问题。我需要从文件(在我的程序集中)创建一个类的实例,但构造函数需要从当前程序集中引用 sceneManager。有可能吗?
      • @wolen 可能吗?当然;琐碎的?不;您需要以某种方式传递该实例,这可能涉及程序集引用,或者可能涉及将其作为 object
      • “微不足道?不”这让我有点害怕。但是我会尝试找到一些关于它的文章并解决它。
      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 2011-10-13
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多