动态加载的 C# 代码是否可以使用主机应用程序的对象?

Is dynamically loaded C# code can use objects of host app?

我想创建一些类似游戏引擎的东西,我想为这个脚本引擎使用 C# 代码。

我听说 C# 代码可以通过 Roslyn 动态 compiled/loaded,我很好奇代码是否可以引用宿主的对象。

让我解释一下。主机应用程序具有这些方法并加载外部代码:

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;   
(...)
static class MainApp
{
    static void Main()
    {
        // TODO : Load codes via Roslyn        
    }

    static void DoSomething()
    {
        // Do something
    }
}

并且加载的代码具有这些行为:

(same namespace as host application)
...
MainApp.DoSomething(); // Is it possible?
...

是的,这是可能的。如果动态加载的代码是在引用宿主应用程序程序集的情况下编译的,它可以使用应用程序中的 public 类型和成员,就像应用程序是普通库一样.