Azure DevOps Pipeline构建遇'default literal'错误的解决咨询
解决CS8107错误:保留VS2019同时适配CI流水线
这问题我熟!其实核心原因是VS2019默认会给项目启用更高的C#语言版本(或者你在开发时不小心切换了),但你的CI代理构建环境还在使用C#7.0,而default字面量是C#7.1才引入的特性,所以合并后CI构建就报错了。不用放弃VS2019,只要把项目的语言版本明确配置好就行,给你几个解决方案:
方案1:单个项目手动设置语言版本
在VS2019里操作很简单:
- 右键你的项目 → 选择「属性」
- 切换到「生成」标签页,点击右下角的「高级」按钮
- 在弹出的「高级生成设置」窗口里,找到「语言版本」下拉框,选择
7.1或者更高版本(比如latest minor或latest,推荐选能覆盖你用到特性的最低版本,避免不必要的兼容性问题) - 保存设置后,把变更提交到仓库,重新触发CI构建即可
方案2:批量配置整个解决方案(推荐)
如果你的解决方案有多个项目,一个个改太麻烦,可以用全局配置文件统一设置:
- 在解决方案的根目录下创建一个名为
Directory.Build.props的文件 - 把以下内容粘贴进去:
<Project> <PropertyGroup> <!-- 这里可以改成你需要的版本,比如7.1、8.0或者latest --> <LangVersion>7.1</LangVersion> </PropertyGroup> </Project>
- 保存文件并提交到仓库,这样所有项目都会自动继承这个语言版本设置,不用单独修改每个项目的属性
方案3:在CI构建命令中强制指定语言版本
如果不想修改项目文件,也可以直接在CI的构建命令里添加参数强制指定:
- 如果用
dotnet命令构建:dotnet build YourSolution.sln /p:LangVersion=7.1 - 如果用MSBuild构建:
msbuild YourSolution.sln /p:LangVersion=7.1
额外检查:CI代理的.NET SDK版本
如果上面的方法都没用,可能是CI代理上的.NET SDK版本太旧——C#7.1需要至少.NET Framework 4.7.2或者.NET Core 2.0及以上的SDK支持。你可以在CI流水线里加一步命令dotnet --version或者msbuild -version,确认SDK版本是否符合要求,如果太低的话升级一下CI代理的SDK即可。
内容的提问来源于stack exchange,提问作者ilkerkaran
相关产品推荐
相关产品推荐

