动态加载的 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
类型和成员,就像应用程序是普通库一样.
我想创建一些类似游戏引擎的东西,我想为这个脚本引擎使用 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
类型和成员,就像应用程序是普通库一样.