使用C#和#x27;CSharpScript从另一个程序集的字符串设置局部变量
我想在运行时分配一个MaterialDesign图标,以允许根据用户配置配置按钮 i、 e cfgvalue=“PackIconKind.救护车”; myicon.Kind=eval(cfgvalue) 我认为这可以通过使用Roslyn/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,
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;