转:在.NET FX 4.8项目中使用C# 8/9/10的新语法
在.NET FX 4.8项目中使用C# 8/9/10的新语法
Innovative BIM techniques
受到某些特殊原因的限制,有时候.NET项目被锁死在.NET Framework 4.8,而无法升级到.NET 5等更高版本,导致代码中能够使用的C#语法最高只能支持到C# 7.3,而无法使用C# 8及更高版本的语法。
C# 8及更高版本引入了不少很有实用价值的新语法,能否在.NET版本被限制在4.8的情况下使用这些新语法特性呢?答案是:可以部分实现。
C# 8及更高版本的C#所引入的新语法,大体上可以分为两大类:需要.NET运行时支持的与不需要.NET运行时支持的。
对于前一种情况,在.NET版本没有升级的情况下,很显然是无法在老版本项目中使用的;但对于第二种情况,则是有可能实现的。
实现方法:在solution文件(*.sln)所在目录下,新建一个名为“Directory.Build.props”文件,文件内容为
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LangVersion>latest</LangVersion>
</PropertyGroup>
</Project>
这样就可以在.NET Framework 4.8项目中使用C# 8/9/10所引入的新语法了(但仅限于不需要新运行时支持的语法特性)。比如,可以使用:
- using declaration
- Static local functions
- switch match pattern expression
- Target-typed
new
expressions - lambda expression type inference
- File Scoped Namespaces
其他一些语法也能够支持,但可能需要额外补充一些.NET 4.8缺失的类型,比如:
- Init only setters
- Index and Range
github上有个PolySharp项目,通过Source Generator自动补充新版本语法所需要的额外类型,我试了下,对于一般的C#项目是可用的,但对于包含WPF XAML代码文件的项目,编译时会报错,原因未知。此时,只能自行手动补充确实的类型的定义。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2021-11-27 开源的图表控制,winform
2008-11-27 [收集] SVN自动备份脚本