警告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”不再骚扰我们!