You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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位运行即可:

  1. 右键你的项目,选择「属性」
  2. 切换到「生成」标签页
  3. 平台目标选择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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:18:01