首页 > 解决方案 > CSharpCompilation 与 Roslyn 在单独的 AppDomain 与 GlobalsType

问题描述

我正在尝试在单独的 AppDomain 中运行自定义 C# 代码,该 AppDomain 具有受限制的权限,其全局类型应在脚本中解析。例如,

public class Global {
    public string Name {get; set;}
}

随着我的脚本是..

return Name;

应该返回 Name 的值。

这很容易用 Roslyn 完成,但结果 Roslyn 需要一个 Unrestricted PermissionSet 来编译和执行脚本,所以我不能只做 CSharpScript.Evaluate(...)

所以我希望将脚本编译成字节数组使用

CSharpCompilation.CreateScriptCompilation("foo", 
    syntaxTree: CSharpSyntaxTree.ParseText(script, ..), 
    globalsType: typeof(Global), ...)

我已经成功完成了。我可以使用反射调用一个简单的脚本,例如(返回“abc”;),但是我坚持如何传递我的全局对象的实例,以便在执行时解决它。

这甚至可能吗?

标签: c#roslynroslyn-code-analysis

解决方案


推荐阅读