刚切换到VS2022,创建了新项目,看到这个:
// See https://aka.ms/new-console-template for more information Console.WriteLine("Hello, World!");
其他的东西呢?为什么现在默认是这样?
58wvjzkj1#
单击该链接。它将重定向到https://learn.microsoft.com/nl-nl/dotnet/core/tutorials/top-level-templates。其中有一段文字说明:如果要使用旧模板,请参阅使用旧程序样式部分。该部分提到这是新的默认设置。要避开它,请创建一个面向.NET 5的应用程序,并修改您的项目文件:
- <TargetFramework>net5.0</TargetFramework> + <TargetFramework>net6.0</TargetFramework>
我想一个解决方法是创建一个自定义项目模板。
b09cbbtk2#
如果您使用的是Visual Studio,则可以安装经典控制台模板https://marketplace.visualstudio.com/items?itemName=Doomdied.ClassicConsole1它添加旧的经典控制台回来,然后你可以忘记新的。
lqfhib0f3#
您可以通过顶级语句类文件中具有该名称的特殊变量来访问args:
args
if (args.Length > 0) { foreach (var arg in args) { Console.WriteLine($"Argument={arg}"); } } else { Console.WriteLine("No arguments"); }
类似地,只需返回一个int来设置退出代码:
string? s = Console.ReadLine(); int returnValue = int.Parse(s ?? "-1"); return returnValue;
请参阅:
至于原因,已经有一个推动清理源文件中不必要的空格、大量的花括号、每个文件顶部的长导入列表和显式命名空间声明的推动,其中大多数人都将命名空间与程序集名称和解决方案文件夹同步。在C#中,一些简单的事情需要几十行代码,而这些代码在node、python或ruby中是一行。这是一个令人头痛的问题。这是不高效的。Razor模板和Razor文件也是如此。你只需要一个IDE来做正确的事情。有了这些改变,即使你没有使用Visual Studio,从GitHub中高效工作也会变得容易得多。
sg3maiej4#
Visual Studio 2022 with .NET 6在创建C#控制台应用程序时使用了新模板。新模板减少了编写简单C#程序所需的样板代码量。我相信此更改旨在使初级程序员和C#新手受益。新款式:
Main()
示例:
// New style Console.WriteLine("Code in Main()"); Test(); void Test() { Console.WriteLine("Test"); }
大致相当于:
// Old style using System; namespace MyApp { internal class Program { static void Main(string[] args) { Console.WriteLine("Code in Main()"); Test(); } static void Test() { Console.WriteLine("Test"); } } }
没有什么可以阻止您使用旧样式。您可以将上面的旧样式代码复制并粘贴到Program.cs中,它将运行良好。
vnzz0bqm5#
现在有一个选项可以禁用top-level statements:
top-level statements
我刚刚试过,它产生了一个老式的项目。:-)你也不要松file-scoped namespaces,它们仍然工作。
file-scoped namespaces
sqyvllje6#
“其他东西”都在那里;这只是一个新的约定。它并不像在C#中那样明显,但这是一种新的方式。当然,您可以通过在Visual Studio中创建项目时选中Do no use top-level statements复选框来使用Main(string args)的旧样式,或者在命令行中使用--use-program-main选项,如下所示:
Main(string args)
--use-program-main
dotnet new console --use-program-main
至于使用这种新样式访问命令行参数的神奇之处,请参见我的答案here。
6条答案
按热度按时间58wvjzkj1#
单击该链接。它将重定向到https://learn.microsoft.com/nl-nl/dotnet/core/tutorials/top-level-templates。其中有一段文字说明:
如果要使用旧模板,请参阅使用旧程序样式部分。
该部分提到这是新的默认设置。要避开它,请创建一个面向.NET 5的应用程序,并修改您的项目文件:
我想一个解决方法是创建一个自定义项目模板。
b09cbbtk2#
如果您使用的是Visual Studio,则可以安装经典控制台模板https://marketplace.visualstudio.com/items?itemName=Doomdied.ClassicConsole1
它添加旧的经典控制台回来,然后你可以忘记新的。
lqfhib0f3#
您可以通过顶级语句类文件中具有该名称的特殊变量来访问
args
:类似地,只需返回一个int来设置退出代码:
请参阅:
至于原因,已经有一个推动清理源文件中不必要的空格、大量的花括号、每个文件顶部的长导入列表和显式命名空间声明的推动,其中大多数人都将命名空间与程序集名称和解决方案文件夹同步。
在C#中,一些简单的事情需要几十行代码,而这些代码在node、python或ruby中是一行。这是一个令人头痛的问题。这是不高效的。Razor模板和Razor文件也是如此。你只需要一个IDE来做正确的事情。有了这些改变,即使你没有使用Visual Studio,从GitHub中高效工作也会变得容易得多。
sg3maiej4#
Visual Studio 2022 with .NET 6在创建C#控制台应用程序时使用了新模板。新模板减少了编写简单C#程序所需的样板代码量。我相信此更改旨在使初级程序员和C#新手受益。
新款式:
Main()
中。Main()
并变为静态。示例:
大致相当于:
没有什么可以阻止您使用旧样式。您可以将上面的旧样式代码复制并粘贴到Program.cs中,它将运行良好。
vnzz0bqm5#
现在有一个选项可以禁用
top-level statements
:我刚刚试过,它产生了一个老式的项目。:-)
你也不要松
file-scoped namespaces
,它们仍然工作。sqyvllje6#
“其他东西”都在那里;这只是一个新的约定。它并不像在C#中那样明显,但这是一种新的方式。当然,您可以通过在Visual Studio中创建项目时选中Do no use top-level statements复选框来使用
Main(string args)
的旧样式,或者在命令行中使用--use-program-main
选项,如下所示:至于使用这种新样式访问命令行参数的神奇之处,请参见我的答案here。