使用C#和#x27;CSharpScript从另一个程序集的字符串设置局部变量

使用C#和#x27;CSharpScript从另一个程序集的字符串设置局部变量,c#,configuration,material-design,C#,Configuration,Material Design,我想在运行时分配一个MaterialDesign图标,以允许根据用户配置配置按钮 i、 e cfgvalue=“PackIconKind.救护车”; myicon.Kind=eval(cfgvalue) 我认为这可以通过使用Roslyn/CSharpScript包实现,如下所示: PackIconKind result = 0; CSharpScript.EvaluateAsync<PackIconKind>(cfgvalue,

我想在运行时分配一个MaterialDesign图标,以允许根据用户配置配置按钮

i、 e

cfgvalue=“PackIconKind.救护车”; myicon.Kind=eval(cfgvalue)

我认为这可以通过使用Roslyn/CSharpScript包实现,如下所示:

            PackIconKind result = 0;

            CSharpScript.EvaluateAsync<PackIconKind>(cfgvalue,
            ScriptOptions.Default.WithReferences("MaterialDesignThemes.Wpf")
                .WithImports("MaterialDesignThemes.Wpf"))
                .ContinueWith(s => result = s.Result).Wait();

            myicon.Kind = result;
我正在使用.Net 4.6.1和Microsoft.CodeAnalysis.CSharp 2.4.0。我使用本页作为参考:

还有一些其他的用法示例,但是他们谈到使用AddReference和CSharpScript库的1.1.1版,因此可能不再相关

使用此技术是否可以实现我想要的


提前谢谢。史蒂夫

我也犯了同样的错误。我改变了很多东西,但这是我最后的代码。 请注意,我在脚本中使用了“System.Windows.Point”。我的代码是多余的,但它应该使它适用于应该在您的代码上下文中运行的任何脚本(唯一的事情将是在脚本中正确使用)

不要忘记执行“scriptOptions=scrip…”并使用“scriptOptions”调用Evaluate。希望它能帮助你解决问题

我的代码:

var scriptOptions = ScriptOptions.Default;

    var asms = AppDomain.CurrentDomain.GetAssemblies(); // .SingleOrDefault(assembly => assembly.GetName().Name == "MyAssembly");
    foreach (Assembly asm in asms)
    {
        scriptOptions = scriptOptions.AddReferences(asm);
    }

    scriptOptions = scriptOptions.AddImports("System");
    scriptOptions = scriptOptions.AddImports("System.Windows");

    Point[] points = await CSharpScript.EvaluateAsync<Point[]>(Code, scriptOptions);
var scriptOptions=scriptOptions.Default;
var asms=AppDomain.CurrentDomain.GetAssemblys();/。SingleOrDefault(assembly=>assembly.GetName().Name==“MyAssembly”);
foreach(asms中的装配asm)
{
scriptOptions=scriptOptions.AddReferences(asm);
}
scriptOptions=scriptOptions.AddImports(“系统”);
scriptOptions=scriptOptions.AddImports(“System.Windows”);
Point[]points=await CSharpScript.evaluateSync(代码、脚本选项);
我的剧本:

    Point[] pts = new Point[100];

    for (int n = 0; n < 100; n++)
    {
        double x = n;
        double y = 3.4 * x + 7;

        pts[n] = new Point(n, y);
    }

    return pts;
Point[]pts=新点[100];
对于(int n=0;n<100;n++)
{
双x=n;
双y=3.4*x+7;
pts[n]=新点(n,y);
}
返回临时秘书处;

如果您只想转换包含枚举值的文本,可以使用enum类解析字符串并返回枚举值。对于脚本,对库的引用可能不成功。“MaterialDesignThemes.Wpf”是库的名称还是“MaterialDesignThemes.Wpf.dll”?
    Point[] pts = new Point[100];

    for (int n = 0; n < 100; n++)
    {
        double x = n;
        double y = 3.4 * x + 7;

        pts[n] = new Point(n, y);
    }

    return pts;