错误信息 "CS5001 程序不包含适用于入口点的静态 'Main' 方法"

88

无法执行以下代码: error CS5001 程序不包含适用于入口点的静态“Main”方法

这个错误信息是什么意思?

class Program
{
    static async Task MainAsync(string[] args)
    {
        Account.accountTest accountTest = new Account.accountTest();

        bool result = await accountTest.CreateAccountAsync();
    }
}

3
我得到了相同的错误信息,因为我使用了 async void Main 而不是 async Task Main - Eldritch Conundrum
@EldritchConundrum - async Task 是解决我的问题的答案。谢谢。如果人们已经使用 C# 版本 >= 7.1,你应该将它作为一个答案添加进去。 - undefined
2个回答

192

这意味着目前您的应用程序没有合适的入口点。

该代码将在C# 7.1中几乎工作,但您需要在项目文件中明确启用C# 7.1:

<LangVersion>7.1</LangVersion>

或更一般性地:

<LangVersion>latest</LangVersion>

你还需要将MainAsync重命名为Main。例如:

Program.cs:

using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        await Task.Delay(1000);
    }
}

ConsoleApp.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <LangVersion>7.1</LangVersion>
  </PropertyGroup>
</Project>

...构建并成功运行。


4
请查看我编辑过的答案——"LangVersion"需要大写"L"和"V",您还需要重命名方法。 - Jon Skeet
6
这就是问题所在。当我找到“高级”按钮后,我发现它被设置为最新的主要版本(默认情况下应为7.0)。我将其直接设置为7.2 C#编译器。然后它就可以工作了 :-) - Pascal
11
这对我来说就是这样了。语言版本也可以在属性页面>构建选项卡>高级中设置。 - Stuart
2
感谢@JonSkeet的回复:)。这是我方面的愚蠢错误。我只更改了调试版本的语言版本,而发布使用的是发布版本。 - gaurav thakur
1
将Main函数的返回类型从void更改为Task是我缺失的部分。 - Jacob Robbins
显示剩余13条评论

3
这可能是一个愚蠢的答案,但如果您打算创建一个类库项目,请确保没有错误地创建了一个控制台应用程序项目。 我知道至少有一个人这样做过。

我正在帮助一个团队成员处理一个MVC项目,这是问题所在。MVC项目需要将其“输出类型”设置为“类库”。我猜它不经意间被改成了“控制台应用程序”。 - Keith Banner
找到另一个人了...谢谢分享...省了我一些时间和尴尬 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接