我正在尝试构建灵活的脚本评估器,它可以接收全局变量的动态列表。我正在使用 DynamicLinq lib 中的 DynamicClass 来构建全局对象。但我有 CS0234 错误:
命名空间“System.Linq”中不存在类型或命名空间名称“Dynamic”
我的问题是我的全局类型实例是动态生成的,我无法将动态程序集添加到引用中。InteractiveAssemblyLoader
也不行。
我知道 DynamicExpression-s,但我正试图找到纯粹的解决方案。
var type = DynamicClassFactory.CreateType(
new List<DynamicProperty>()
{
new DynamicProperty("X", typeof(int)),
new DynamicProperty("Y", typeof(int))
});
var data = Activator.CreateInstance(type) as DynamicClass;
data.SetDynamicPropertyValue("X", 1);
data.SetDynamicPropertyValue("Y", 2);
using (var loader = new InteractiveAssemblyLoader())
{
loader.RegisterDependency(type.Assembly);
loader.RegisterDependency(typeof(ExpandoObject).Assembly);
var script = CSharpScript.Create<int>("X + Y",
ScriptOptions.Default
.AddReferences("System.Linq")
.AddReferences("System.Linq.Expressions")
.AddReferences("System.Linq.Dynamic.Core.DynamicClasses")
.AddImports("System.Linq")
.AddImports("System.Dynamic")
.AddImports("System.Linq.Dynamic.Core.DynamicClasses"),
globalsType: type,
assemblyLoader: loader
);
var t = script.Compile();
var p = await script.RunAsync(data);
}