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

Posted

技术标签:

【中文标题】如何强制 Visual Studio 2022 创建带有命名空间和类的控制台项目(就像过去的好日子一样)?【英文标题】:How to force Visual Studio 2022 create console projects with namespaces and classes (like in old good days)? 【发布时间】:2021-12-22 22:42:36 【问题描述】:

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

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

所有其他东西在哪里?为什么现在默认了?

【问题讨论】:

docs.microsoft.com/en-us/visualstudio/ide/… 以前所有这些东西都是必需的,现在不需要了。这是将字符串写入控制台所需的最少代码.. @phuzi 肯定这是一个不错的新开发,但我也不喜欢它。它是 C#,而不是 Python。 @phuzi 我知道这没有必要,但几乎所有程序都需要参数解析。所以现在我不得不从头开始手写那个五线谱还是什么? 阅读本文第一部分:docs.microsoft.com/en-us/dotnet/core/tutorials/… 【参考方案1】:

点击链接。它重定向到https://docs.microsoft.com/nl-nl/dotnet/core/tutorials/top-level-templates。它有一段说明:

如果您想使用旧模板,请参阅Use the old program style 部分。

该部分提到这是新的默认设置。要绕过它,请创建一个 .NET 5 目标应用程序,并修改您的项目文件:

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

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

【讨论】:

好吧,我想使用旧式格式的 dotnet 6.0。没有主要方法,没有参数,没有命名空间 - 什么都没有。所有这些东西现在都需要手写还是什么? 不,它是按照编译约定生成的。你不再需要using System; namespace Foo class Program void Main(string[] args) 了。 我需要参数。不写 main 方法现在去哪里找呢? @AlekDepler 您仍然可以在新模板中使用args 这应该被标记为答案...简单地说,您可以创建一个以.net5为目标的项目,然后手动将其更改为.net 6,以便您可以使用新功能。 【参考方案2】:

您可以通过***语句类文件中具有该名称的特殊变量访问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;

见:

https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/top-level-statements

至于为什么,一直在推动清理源文件中不必要的空格、大量花括号、每个文件顶部的长导入列表以及显式命名空间声明,大多数人都会在其中将命名空间与无论如何,程序集名称和解决方案文件夹。

对于许多人来说,C# 中的简单事情需要 10 行代码,而在 node、python 或 ruby​​ 中它们是单行代码,这让很多人感到眼花缭乱。它只是没有生产力。 Razor 模板和 Razor 文件也是如此。你只需要一个 IDE 来做她正确的事。通过这些更改,即使您不使用 Visual Studio,从 GitHub 提高工作效率也应该变得更加容易。

【讨论】:

【参考方案3】:

带有 .NET 6 的 Visual Studio 2022 在创建 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 中,它会运行得很好。

【讨论】:

以上是关于如何强制 Visual Studio 2022 创建带有命名空间和类的控制台项目(就像过去的好日子一样)?的主要内容,如果未能解决你的问题,请参考以下文章

visualstudio2019如何运行c语言

如何强制 Visual Studio 在 https 中运行网站

你如何强制 Visual Studio 为 aspx/ascx 文件重新生成 .designer 文件?

Visual Studio 安装项目:如何强制卸载程序以管理员模式运行?

如何强制在 Visual Studio 2013 中打开解决方案文件 (SLN)?

Visual Studio Docker Tools如何从头开始强制容器重建