【问题标题】:Asp.Net Core: Program does not contain a static 'Main' method suitable for an entry pointAsp.Net Core:程序不包含适合入口点的静态“Main”方法
【发布时间】:2016-12-15 04:56:38
【问题描述】:

我正在尝试将基于 Onion 架构设计方法的 Asp.Net WebApi 项目移植到 Asp.Net Core。但是,当我构建我的类库时,编译器正在 Program.cs 中寻找静态 Main 方法,我得到:

C:\Projects\Some\src\Some.Core\error CS5001:程序不包含 适用于入口点的静态“Main”方法

我假设整个解决方案应该只有一个 Program.cs / 入口点,它位于我的 WebApi 项目中。我不正确吗?否则,我该如何解决这个错误?我错误地认为"emitEntryPoint": true 达到了这个目的。

这是我的类库的 project.json 的示例:

{
  "version": "1.0.0-*",
  "description": "Some.Core Class Library",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Routing": "1.0.0",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.Identity": "1.0.0",
    "Microsoft.Extensions.Configuration": "1.0.0",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0"
  },

  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },
  "runtimes": {
    "win7-x64": {}
  }
}

建议表示赞赏。

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    通过在我的 classlib.csproj 文件中显式设置 OutputType 标记解决了类似问题:

      netcoreapp2.2
    

    【讨论】:

      【解决方案2】:

      为避免类库中出现“程序不包含适合入口点的静态'Main'方法”的错误,请从buildOptions中移除emitEntryPoint-

        "buildOptions": {
          "emitEntryPoint": true
        },
      

      emitEntryPoint 告诉编译器是创建一个控制台应用程序还是一个库。更多信息请参考post

      【讨论】:

      • 这个应该在哪里找到?
      【解决方案3】:

      我将解决方案中非启动项目的输出类型更新为类库,问题已解决。

      【讨论】:

      • 感谢您的评论,这正是我遇到的问题。我有一个额外的控制台应用程序,它不是启动项目,在将其输出更改为类库后,它都开始工作了
      【解决方案4】:

      如果 Main 方法具有 async 修饰符,请确保所选 C# 语言版本为 7.1 或更高版本。您可以通过手动将以下元素添加到 .csproj 文件来解决此问题。 Reference

      <PropertyGroup>
        <LangVersion>latest</LangVersion>
      </PropertyGroup>
      

      【讨论】:

        【解决方案5】:

        一个明显的解决方案是查看官方MSDN错误代码描述here

        我有 async 修饰符,不得不迁移到 C# 语言版本 7.1+

        【讨论】:

          【解决方案6】:

          我一直在使用 .NET Core 2.0 在 macOS 上处理此错误,这似乎与我将解决方案存储在 Google Drive 文件夹中有关。这当然不是因为我在我的项目中缺少主要方法,尽管我间歇性地看到文件/文件夹从 Rider 中消失并重新添加它们(添加现有项目)正在解决问题。我在 VS for Mac 和 VS Code 中遇到了同样的错误,但它们似乎没有更新文件夹内容以反映丢失的文件,因此更难查明问题。

          tl;dr 尝试将您的解决方案/项目移出同步的网络驱动器!

          【讨论】:

            【解决方案7】:
            <PropertyGroup>
            <LangVersion>latest</LangVersion>
                <OutputType>Library</OutputType>
              </PropertyGroup>
            

            【讨论】:

            • 纯代码答案虽然可能解决手头的问题,但效果较差,因为它们通常不会描述为什么它是一个好的解决方案。你可以通过阅读这篇关于好答案的介绍来改进你的答案:stackoverflow.com/help/how-to-answer
            猜你喜欢
            • 1970-01-01
            • 2012-04-21
            • 1970-01-01
            • 1970-01-01
            • 2013-06-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多