如何强制Visual Studio 2022使用命名空间和类创建控制台项目(就像过去的好日子一样)?

i1icjdpr  于 2022-11-25  发布在  其他
关注(0)|答案(6)|浏览(627)

刚切换到VS2022,创建了新项目,看到这个:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

其他的东西呢?为什么现在默认是这样?

58wvjzkj

58wvjzkj1#

单击该链接。它将重定向到https://learn.microsoft.com/nl-nl/dotnet/core/tutorials/top-level-templates。其中有一段文字说明:
如果要使用旧模板,请参阅使用旧程序样式部分。
该部分提到这是新的默认设置。要避开它,请创建一个面向.NET 5的应用程序,并修改您的项目文件:

-   <TargetFramework>net5.0</TargetFramework>
+   <TargetFramework>net6.0</TargetFramework>

我想一个解决方法是创建一个自定义项目模板。

b09cbbtk

b09cbbtk2#

如果您使用的是Visual Studio,则可以安装经典控制台模板https://marketplace.visualstudio.com/items?itemName=Doomdied.ClassicConsole1
它添加旧的经典控制台回来,然后你可以忘记新的。

lqfhib0f

lqfhib0f3#

您可以通过顶级语句类文件中具有该名称的特殊变量来访问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中高效工作也会变得容易得多。

sg3maiej

sg3maiej4#

Visual Studio 2022 with .NET 6在创建C#控制台应用程序时使用了新模板。新模板减少了编写简单C#程序所需的样板代码量。我相信此更改旨在使初级程序员和C#新手受益。
新款式:

  • Program.cs中出现在任何函数外部的语句会自动放置在Main()中。
  • 函数声明被移出Main()并变为静态。
  • 为通用名称空间(如System、System.IO、System.Linq等)隐式添加了许多using语句。

示例:

// 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中,它将运行良好。

vnzz0bqm

vnzz0bqm5#

现在有一个选项可以禁用top-level statements

我刚刚试过,它产生了一个老式的项目。:-)
你也不要松file-scoped namespaces,它们仍然工作。

sqyvllje

sqyvllje6#

“其他东西”都在那里;这只是一个新的约定。它并不像在C#中那样明显,但这是一种新的方式。当然,您可以通过在Visual Studio中创建项目时选中Do no use top-level statements复选框来使用Main(string args)的旧样式,或者在命令行中使用--use-program-main选项,如下所示:

dotnet new console --use-program-main

至于使用这种新样式访问命令行参数的神奇之处,请参见我的答案here

相关问题