警告CS7022-程序的入口点是全局代码;忽略“Program.Main(string[])”入口点

c#-9.0

所以我有一个问题,我的错误列表中有这个警告:

严重性代码 描述 项目文件行抑制状态 警告 CS7022 程序的入口点是全局代码;忽略“Program.Main(string[])”入口点。项目目录ToProject 23 Active

这基本上是它投掷的地方

namespace MyProgram
{
    class Program
    {
        static async Task Main(string[] args) => await new Program.MainAsync();
    }
        static async Task MainAsync()
        {.. do stuff.. }
}

那是导致错误的代码行。我尝试过使用 Main 类,我确实使用了返回类型 void 并在 MainAsync 方法上调用了 GetAwaiter 和 GetResult 方法。

我试过研究错误,但我没有运气,所以希望这个线程能帮助其他一些人......

我目前在 C# 9.0 Visual Studio 2019 构建版本上运行:16.8.30717.126

编辑:忘记显示 MainAsync 在文件中......(抱歉)我试图限制我显示的方法数量,因为其中 95% 对问题没有用......但问题是,虽然我的应用程序编译,在执行我的程序时它立即退出,好像它不知道从哪里开始......

编辑 2:感谢 Hans Passant - 如果有人经历过类似的事情,请尝试他提到的内容:

“这是一个相当糟糕的 C# v9 功能。项目 > 属性 > 构建选项卡,高级按钮 > 语言版本 = 7.3 您现在应该从您不知道必须发布的代码中得到一个不错的错误消息”。

基本上在改回 C# 8.0 后,我发现这是一个隐藏的不同文件,导致了问题。

回答

从 net5.0 开始,我发现这个错误可能是由在 namespace 关键字上方有杂散分号引起的。这是错误还是预期行为超出了我的范围,但是请确保您没有任何独立的分号:

using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
; // This will cause CS7022

namespace Tomoe.Commands.Public

请务必检查所有文件,而不仅仅是 Program.cs

编辑:显然这是预期行为,请参阅https://github.com/dotnet/roslyn/issues/53472。TL;DR,命名空间上方的分号被解释为顶级语句。因为在该语句中没有调用任何内容,所以程序退出。这和做一样

static void Main() { 
    ;
}

在您的Program.cs. 虽然我确实觉得应该做出一些改变,但这背后的设计决策是非常合乎逻辑的,并且完全可以理解。

编辑 2:根据Github上的jcouv,这现在变成了错误而不是警告。希望这个“bug”不再骚扰我们!


以上是警告CS7022-程序的入口点是全局代码;忽略“Program.Main(string[])”入口点的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>