C#计算器代码运行报RuntimeBinderException:System.__ComObject无Language定义
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.__ComObject' does not contain a definition for 'Language'
这个报错的核心原因是你调用的MSScriptControl是老旧的32位COM组件,出现这个问题有两个常见触发场景:
- 你的项目运行在64位环境下,无法正确加载32位COM组件,导致创建的对象是通用
System.__ComObject类型,找不到对应的Language属性和Eval方法 - 你使用的是.NET Core/.NET 5+等新版本.NET框架,原生不支持这个遗留COM组件的调用
解决方案1:适配MSScriptControl组件(仅适合.NET Framework项目)
把项目强制设置为32位运行即可:
- 右键你的项目,选择「属性」
- 切换到「生成」标签页
- 平台目标选择
x86,保存设置后重新运行项目
解决方案2:替换为原生计算逻辑(全版本.NET兼容,更推荐)
完全抛弃老旧的COM组件,用.NET内置的DataTable.Compute方法实现表达式计算,修改后的代码如下:
private void result_Click(object sender, RoutedEventArgs e) { result.Background = Brushes.BlueViolet; string str = null; try { System.Data.DataTable dt = new System.Data.DataTable(); var res = dt.Compute(screen.Text, ""); str = Convert.ToString(res); screen.Text = screen.Text + "=" + str; } catch (SystemException) { screen.Text = "syntax error"; } }
这个方案不需要任何额外依赖,兼容32/64位环境,也支持所有主流.NET版本。
内容的提问来源于stack exchange,提问作者howareyou
相关产品推荐
相关产品推荐

