C#,简单修改Visual Studio 2022设置以支持C#最新版本的编译器,尊享编程之趣

本文主要是介绍C#,简单修改Visual Studio 2022设置以支持C#最新版本的编译器,尊享编程之趣,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 PLS README & CHAPTER 5

用一个超简单的例子说明各版本 C# 的差异。

使用新版本(比如C#.11),当然有一定的好处。我们在写程序的时候一般这样:

Visual Studio 2022 默认只能这样写

string imageFile = Path.Combine(Application.StartupPath, "demo.jpg");
using (Bitmap bmp = new Bitmap(width: 640, height: 480))
{using (Graphics g = Graphics.FromImage(bmp)){using (Bitmap src = new Bitmap(imageFile)){g.DrawImage(src, 0, 0, width: 640, height: 480);}}
}

因为支持的C#版本,比较低一些。

修改Visual Studio 支持的C#版本(最新版本)后,可以这样写:

string imageFile = Path.Combine(Application.StartupPath, "demo.jpg");
using Bitmap bmp = new Bitmap(width: 640, height: 480);
using Graphics g = Graphics.FromImage(bmp);
using Bitmap src = new Bitmap(imageFile);
g.DrawImage(src, 0, 0, width: 640, height: 480);

当然,使用更高版本的C#,其好处远不止这点,大家可以慢慢体会。

本文的文字主要来自于 Microsoft . 大多数可以略过。(只需要读下面的红色文字即可!

2 C# 语言版本控制

最新的 C# 编译器根据项目的一个或多个目标框架确定默认语言版本。 Visual Studio 不提供用于更改值的 UI,但可以通过编辑 .csproj 文件来更改值。 此默认选择可确保使用与目标框架兼容的最新语言版本。 你将从访问与项目目标兼容的最新语言功能中受益。 此默认选择还可确保不会使用需要类型或运行时行为在目标框架中不可用的语言。 选择比默认版本更高的语言版本可能导致难以诊断编译时和运行时错误。

C# 11 仅在 .NET 7 及更高版本上受支持。 C# 10 仅在 .NET 6 及更高版本上受支持。 C# 9 仅在 .NET 5 及更高版本上受支持。

有关 Visual Studio 版本支持的 NET 版本的详细信息,请查看 Visual Studio 平台兼容性页面。 有关 Visual Studio for Mac 版本支持的 NET 版本的详细信息,请查看 Visual Studio for Mac 平台兼容性页面。 查看 C# 的 Mono 页面,了解 Mono 与 C# 版本的兼容性。

3 默认值

编译器根据以下规则确定默认值:

目标    版本    C# 语言版本的默认值
.NET    7.x    C# 11
.NET    6.x    C# 10
.NET    5.x    C# 9.0
.NET Core    3.x    C# 8.0
.NET Core    2.x    C# 7.3
.NET Standard    2.1    C# 8.0
.NET Standard    2.0    C# 7.3
.NET Standard    1.x    C# 7.3
.NET Framework    全部    C# 7.3
如果你的项目是以具有相应预览语言版本的预览框架为目标,那么使用的语言版本是预览语言版本。 你可在任何环境中使用该预览版提供的最新功能,而不会影响面向已发布 .NET Core 版本的项目。

重要

Visual Studio 2017 的新项目模板向新项目文件添加了一个 <LangVersion>latest</LangVersion> 条目。 如果你升级这些项目的目标框架,则它们替代默认行为。 更新 .NET SDK 时,应从项目文件中删除 <LangVersion>latest</LangVersion>。 然后项目将使用建议用于目标框架的编译器版本。 可更新目标框架以访问更新的语言功能。

4 替代默认值


如果必须明确指定 C# 版本,可以通过以下几种方式实现:

手动编辑项目文件。
为子目录中的多个项目设置语言版本。
配置 LangVersion 编译器选项。
 提示

可以在“项目属性”页查看 Visual Studio 中的语言版本。 在“生成”选项卡下,“高级”窗格将显示所选版本。

若要了解当前使用的语言版本,请在代码中添加 #error version(区分大小写)。 这样做可使编译器报告编译器错误 CS8304,并显示一条消息,其中包含正在使用的编译器版本和当前选择的语言版本。 有关详细信息,请参阅 #error(C# 参考)。

5 编辑项目文件

编辑你的项目文件比如 demo.proj 文件;
可在项目文件中设置语言版本。 例如,如果你明确希望访问预览功能,请添加如下元素:

退出 VS,找到 任何一行 </PropertyGroup>,在后面添加下面三行 xml,重新进入 VS 即可。

<PropertyGroup><LangVersion>preview</LangVersion>
</PropertyGroup>



值 preview 使用编译器支持的最新可用的预览 C# 语言版本。

配置多个项目


若要配置多个目录,可以创建包含 元素的 Directory.Build.props 文件。 通常是在解决方案目录中完成这件事。 将以下内容添加到解决方案目录中的 Directory.Build.props 文件:


<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>


包含该文件的目录的所有子目录中的版本都将使用 C# 预览版。 有关详细信息,请查看自定义生成。

6 C# 语言版本引用


下表显示当前所有 C# 语言版本。 如果编译器较旧,它可能不一定能识别每个值。 如果安装的是最新的 .NET SDK,则可以访问列出的所有内容。

值    含义
preview    编译器接受最新预览版中的所有有效语言语法。
latest    编译器接受最新发布的编译器版本(包括次要版本)中的语法。
latestMajor
或 default    编译器接受最新发布的编译器主要版本中的语法。
11.0    编译器只接受 C# 11 或更低版本中包含的语法。
10.0    编译器只接受 C# 10 或更低版本中所含的语法。
9.0    编译器只接受 C# 9 或更低版本中所含的语法。
8.0    编译器只接受 C# 8.0 或更低版本中所含的语法。
7.3    编译器只接受 C# 7.3 或更低版本中所含的语法。
7.2    编译器只接受 C# 7.2 或更低版本中所含的语法。
7.1    编译器只接受 C# 7.1 或更低版本中所含的语法。
7    编译器只接受 C# 7.0 或更低版本中所含的语法。
6    编译器只接受 C# 6.0 或更低版本中所含的语法。
5    编译器只接受 C# 5.0 或更低版本中所含的语法。
4    编译器只接受 C# 4.0 或更低版本中所含的语法。
3    编译器只接受 C# 3.0 或更低版本中所含的语法。
ISO-2
或 2    编译器只接受 ISO/IEC 23270:2006 C# (2.0) 中所含的语法。
ISO-1
或 1    编译器只接受 ISO/IEC 23270:2003 C# (1.0/1.2) 中所含的语法。

这篇关于C#,简单修改Visual Studio 2022设置以支持C#最新版本的编译器,尊享编程之趣的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/422836

相关文章

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的