从.NET6开始,使⽤console新的C#模板⽣成顶级语句
从 .NET 6 开始,使⽤ console 模板的新 C# 项⽬会⽣成与以前版本不同的代码:
C#复制
// See aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
新的输出使⽤最新的 C# 功能,这些功能简化了需要为程序编写的代码。 通常,控制台应⽤模板⽣成以下代码:
writeline教程
C#复制
using System;
namespace MyApp // Note: actual namespace depends on the project name.
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
这两种形式代表同⼀个程序。 两者都适⽤于 C# 10.0。 使⽤较新版本时,只需编写 Main ⽅法的主体。 ⽆需包含其他程序元素。 可通过两个选项使⽤现有教程:
使⽤新的程序样式,添加功能时添加新的顶级语句。
使⽤ Program 类和 Main ⽅法将新程序样式转换为旧样式。
如果要使⽤旧模板,请参阅部分。
使⽤新的程序样式
使新程序更简单的功能是顶级语句、全局 指令和隐式 指令 。
术语是指编译器会为主程序⽣成命名空间、类和⽅法元素。 你可以查看新应⽤程序的代码,并假设它包含早期模板所⽣成的 Main ⽅法内的语句。 你可以向程序添加更多语句,就像⽤传统⽅式将更多语句添加到 Main ⽅法⼀样。 甚⾄可以添加函数。 它们被创建为嵌套在⽣成
的 Main ⽅法中的本地函数。
顶级语句和指令都简化了构成应⽤程序的代码。 若要按照现有教程操作,请将所有新语句添加到模板⽣成的 Program.cs ⽂件中。 假设在本教程的说明中,你编写的语句位于 Main ⽅法中的左⼤括号和右⼤括号之间。
如果你更喜欢使⽤较旧的格式,则可以复制本⽂第⼆个⽰例中的代码,并像以前⼀样继续学习本教程。
有关顶级语句的详细信息,请参阅有关的教程。
隐式 using 指令
术语“隐式 指令”是指编译器会根据项⽬类型⾃动添加⼀组 指令。 对于控制台应⽤程序,以下指令隐式包含在应⽤程序中:
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
其他应⽤程序类型包括更多对这些应⽤程序类型通⽤的命名空间。
如果需要未隐式包含的 using 指令,可以将这些指令添加到包含顶级语句的 .cs ⽂件或其他 .cs ⽂件中。 对于应⽤程序的所有 .cs ⽂件中所需的 using 指令,请使⽤指令。
禁⽤隐式 using 指令
如果要删除该⾏为并⼿动控制项⽬中的所有命名空间,请在项⽬⽂件中添加 。
全局 using 指令
全局 指令导⼊整个应⽤程序的命名空间,⽽不是单个⽂件。 可以通过向项⽬⽂件添加  项或将 global using 指令添加到代码⽂件来添加这些全局指令。
还可以在项⽬⽂件中添加⼀个具有 Remove 属性的  项,以删除特定的。 例如,如果通过  启⽤隐式 using 指令功能,则添加以
下 <Using> 项会从隐式导⼊的命名空间中删除 System.Net.Http 命名空间:
XML复制
<ItemGroup>
<Using Remove="System.Net.Http" />
</ItemGroup>
使⽤旧程序样式
.NET 6 控制台应⽤模板将⽣成新样式的顶级语句程序,但使⽤ .NET 5 则不会。 创建 .NET 5 项⽬时将获得旧程序样式。 然后可以编辑项⽬⽂件以使其⾯向 .NET 6,但保留 Program.cs ⽂件的旧程序样式。
重要
创建⾯向 .NET 5 的项⽬需要 .NET 5 模板。 可以使⽤ 命令或通过来⼿动安装 .NET 5 模板。
1. 创建⾯向 .NET 5 的新项⽬。
dotnet复制
dotnet new console --framework net5.0
2. 在⽂本编辑器中打开项⽬⽂件,并将 <TargetFramework>net5.0</TargetFramework> 更改
为 <TargetFramework>net6.0</TargetFramework>。
下⾯是说明更改的⽂件差异:
diff复制
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
-  <TargetFramework>net5.0</TargetFramework>
+  <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
3. 可选步骤:仍可通过将指令和的属性添加到项⽬⽂件中,来使⽤某些较新的 .NET 6 和 C# 功能。
diff复制
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
+  <ImplicitUsings>enable</ImplicitUsings>
+  <Nullable>enable</Nullable>
</PropertyGroup>
</Project>
在 Visual Studio 中使⽤旧程序样式
在 Visual Studio 中创建新的控制台项⽬时,系统会提⽰你使⽤⼀个下拉框来标识希望使⽤的⽬标框架。 将该值更改为“5.0”。 创建项⽬后,编辑项⽬⽂件以将其更改回 “6.0”。
1. 创建新项⽬时,设置步骤将导航到“其他信息”设置页。 在此页上,将框架设置从“.NET 6.0 (长期⽀持)”更改为“.NET 5.0”,然
后选择“创建”按钮 。
2. 创建项⽬后,到“项⽬资源管理器”窗格。 双击项⽬⽂件,并将 <TargetFramework>net5.0</TargetFramework> 更改
为 <TargetFramework>net6.0</TargetFramework>。
下⾯是说明更改的⽂件差异:
diff复制
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
-  <TargetFramework>net5.0</TargetFramework>
+  <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
或者,在“解决⽅案资源管理器”窗格中右键单击项⽬,然后选择“属性”。 这将打开⼀个设置页,可在其中更改“⽬标框架”。
3. 可选步骤:仍可通过将指令和的属性添加到项⽬⽂件中,来使⽤某些较新的 .NET 6 和 C# 功能。
diff复制
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
+  <ImplicitUsings>enable</ImplicitUsings>
+  <Nullable>enable</Nullable>
</PropertyGroup>
</Project>
模板反馈
是 .NET 6 中的⼀项新功能。 在  中添加⼀个向上或向下的投票,让我们知道你是否⽀持在项⽬模板中使⽤此功能。
本教程介绍以下操作:
了解控制顶层语句使⽤的规则。
使⽤顶级语句了解算法。
重构对可重⽤组件的探索。
先决条件
需要将计算机设置为运⾏ .NET 6,其中包括 C# 10 编译器。 ⾃  或  起,开始提供 C# 10 编译器。
本教程假设你熟悉 C# 和 .NET,包括 Visual Studio 或 .NET CLI。
开始探索
借助顶级语句,你可以将程序的⼊⼝点置于类的静态⽅法中,以避免额外的⼯作。 新控制台应⽤程序的典型起点类似于以下代码:C#复制
using System;
namespace Application
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
上⾯的代码是运⾏ dotnet new console 命令并创建新控制台应⽤程序的结果。 这 11 ⾏只包含⼀⾏可执⾏代码。 可以通过新的顶级语句功能简化该程序。 由此,你可以删除此程序中除两⾏以外的所有⾏:
C#复制
// See aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
重要
适⽤于 .NET 6 的 C# 模板使⽤顶级语句。 如果你已升级到 .NET 6 预览版,则应⽤程序可能与本⽂中的代码不匹配。 有关详细信息,请参阅有关的⽂章
.NET 6 SDK 还为使⽤以下 SDK 的项⽬添加了⼀组隐式 指令:
Microsoft.NET.Sdk
Microsoft.NET.Sdk.Web
Microsoft.NET.Sdk.Worker
这些隐式 global using 指令包含项⽬类型最常见的命名空间。
此功能简化了开始探索新想法所需的操作。 你可以将顶级语句⽤于脚本编写场景,或⽤于探索。 掌握基础知识后,便可以开始重构代码,并为⽣成的可重⽤组件创建⽅法、类或其他程序集。 顶级语句⽀持快速试验和初学者教程。 它们还提供⼀条从试验到完整程序的平滑路径。
顶级语句按照其在⽂件中出现的顺序执⾏。 顶级语句只能⽤在应⽤程序的⼀个源⽂件中。 如果将其⽤于多个⽂件,编译器将⽣成错误。构建神奇的 .NET 应答机
对于本教程,让我们构建⼀个控制台应⽤程序,该应⽤程序使⽤随机答案回答“是”或“否”问题。 你将逐步⽣成功能。 你可以专注于你的任务,⽽不是典型程序结构所需的⼯作。 然后,当你满意该功能后,可根据⾃⼰的情况重构应⽤程序。
将问题写回控制台是⼀个良好的起点。 ⾸先,可以编写以下代码:
C#复制
Console.WriteLine(args);
不声明 args 变量。 对于包含顶级语句的单个源⽂件,编译器会将 args 识别为表⽰命令⾏参数。 参数的类型是⼀个 string[],就像在所有C# 程序中⼀样。
你可以运⾏以下 dotnet run 命令对代码进⾏测试:
.NET CLI复制

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。