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

.NET Web项目C#7 switch模式匹配编译错误排查与解决

.NET Web应用中C#7模式匹配switch语句编译报错的解决

问题场景

我有一个目标框架为.NET 4.7的Web应用,原本通过if/else判断传入消息是否包含特定字符串,想改用带模式匹配的switch语句——这段代码在另一个目标框架为.NET 4.5.2的Windows服务项目中能正常编译运行:

switch (message)
{
    case "SomeString":
    ...
    break;

    case var b when b.Contains("AnotherString"):  // 报错行
    ....
    break;
}

编译错误信息

Web应用编译时,上述报错行触发一系列语法错误:

Error   CS1002  ; expected
Error   CS1002  ; expected
Error   CS1003  Syntax error, ':' expected
Error   CS1513  } expected

排查过程

  • 按常规认知,C#版本依赖目标.NET框架,但将Web应用目标框架改为.NET 4.5.2后,问题依旧存在;
  • 尝试将C#版本从“最新主版本”改为7.0时,出现新的编译错误;
  • 使用VS2017,手动在.csproj中添加<LangVersion>7</Langversion>或在VS生成设置中指定C#7,触发如下错误:

Error CS1617 Invalid option '7' for /langversion; must be ISO-1, ISO-2, Default or an integer in range 1 to 6.

最终解决方法

  • 删除.csproj文件中旧的DotNetCompilers 1.0.0引用,保留4.2.0版本;
  • 复制其他可正常编译C#7特性项目的roslyn/csc文件夹到当前Web应用的bin目录;
  • 将项目的LangVersion设置为6;

完成以上操作后,C#7特性(包括上述带when条件的switch语句)均可正常编译运行。

内容的提问来源于stack exchange,提问作者id10t

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:38