Asp.Net Core:程序中不包含适用于入口点的静态“Main”方法

27

我试图将基于洋葱架构设计方法的Asp.Net WebApi项目迁移到Asp.Net Core上。然而,在构建我的类库时,编译器要求在Program.cs中找到静态Main方法,我收到以下错误提示:

C:\Projects\Some\src\Some.Core\error CS5001: Program does not contain a static 'Main' method suitable for an entry point

我认为整个解决方案只应该有一个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": {}
  }
}

欢迎提出建议。

9个回答

44
通过在我的 classlib.csproj 文件中明确设置 OutputType 标签,解决了类似的问题:
<PropertyGroup>
  <TargetFramework>netcoreapp2.2</TargetFramework>
  <OutputType>Library</OutputType>
</PropertyGroup>

太棒了!很难理解为什么 dotnet new classlib 不会将其放入 .csproj 文件中,或者为什么 dotnet new classlib 创建的骨架可以编译,但是一旦我进行一些更改以实际提供一些代码,它就不能编译,但对我来说这已经足够好了。 - Auspex
挽救了我的一天。仍然。 - samba2
项目属性 > 应用程序 > 一般 > 输出类型 - Rami Alloush

13

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

输入图像描述在这里


2
谢谢你的评论,这正是我所遇到的问题。我有一个额外的控制台应用程序,它不是启动项目,在将其输出更改为类库后,一切都开始运作了。 - Felipe Suárez

9
为了避免在类库中出现“程序不包含适用于入口点的静态'Main'方法”的错误,请从buildOptions中删除emitEntryPoint。
  "buildOptions": {
    "emitEntryPoint": true
  },

emitEntryPoint参数告诉编译器是创建控制台应用程序还是库。更多信息,请参见此post


17
这应该在哪里找到? - David

4
如果 `Main` 方法有 `async` 关键字,确保所选的 C# 语言版本为 7.1 或更高。您可以通过手动向 .csproj 文件添加以下元素来解决该问题。 参考文献
<PropertyGroup>
  <LangVersion>latest</LangVersion>
</PropertyGroup>

-1

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

简而言之,请尝试将您的解决方案/项目移出同步网络驱动器!


-1

一个显而易见的解决方案是查看官方的 MSDN 错误代码描述此处

我使用了 async 修饰符,并且必须升级到 C# 语言版本 7.1+。


-1

不确定这是否是正确的解决方案;

在使用.NET 6和控制台应用程序时,遇到了这个错误,并添加了一个类库项目(用于单元测试),并将其引用到控制台应用程序中。

在控制台应用程序中,我在Program.cs文件中添加了以下Main方法,问题得到了解决:

namespace your_namespace
{
    internal class Program
    {
        public static void Main(string[] args)
        {

        }
    }
}


-1
在 .csproj 文件中删掉以下这些行:
<ItemGroup>
  <Compile Remove="Program.cs" />
</ItemGroup>
<ItemGroup>
  <Content Include="Program.cs" />
</ItemGroup>

-2
<PropertyGroup>
<LangVersion>latest</LangVersion>
    <OutputType>Library</OutputType>
  </PropertyGroup>

1
仅提供代码的答案虽然可以解决问题,但通常不太好,因为它们通常没有描述为什么这是一个好的解决方案。您可以通过阅读有关良好答案的介绍来改进您的答案:https://stackoverflow.com/help/how-to-answer - user191152

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