如何强制 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 创建带有命名空间和类的控制台项目(就像过去的好日子一样)?的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 Visual Studio 在 https 中运行网站
你如何强制 Visual Studio 为 aspx/ascx 文件重新生成 .designer 文件?
Visual Studio 安装项目:如何强制卸载程序以管理员模式运行?