为何C#中"file"被视为关键字?VS2022预览版编译报错CS9056
问题解答
为什么file被视为关键字?
file是C# 11引入的上下文关键字,用于实现「文件范围类型」特性。VS 2022预览版17.4.0自带的编译器已支持C# 11特性,即便你的项目使用.NET 5 SDK(默认对应C# 9),高版本编译器也会启用C# 11的相关检查——编译器版本与SDK版本是分离的,VS升级后会优先使用自带的新版编译器。
file关键字的用途
它用来声明文件范围类型,语法示例:
file class FileScopedClass { // 该类仅能在当前源文件内被访问 }
这种类型的可见范围被严格限制在定义它的源文件中,无法被其他文件引用,适合封装仅当前文件需要的辅助类型,避免命名冲突或不必要的类型暴露。
如何禁用该限制?
无需修改自动生成的代码,只要强制指定项目使用低于C# 11的语言版本即可:
- 通过项目文件设置:在
.csproj文件中添加或修改<LangVersion>节点,指定对应版本(比如.NET 5 SDK对应C# 9):<PropertyGroup> <LangVersion>9.0</LangVersion> </PropertyGroup> - 通过VS界面设置:右键项目→属性→生成→点击「高级」按钮→在「语言版本」下拉菜单中选择「C# 9.0」(或更低版本,只要低于C# 11即可)。
设置完成后,编译器会按照指定的旧语言版本规则编译,file不再被视为关键字,代码可正常编译。
内容的提问来源于stack exchange,提问作者PMF
相关产品推荐
相关产品推荐

