【问题标题】:Does not contain a static 'main' method suitable for an entry point不包含适合入口点的静态“main”方法
【发布时间】:2012-03-07 19:20:44
【问题描述】:

我开始将我的代码组织到单独的 .cs 文件中,并且为了允许与 UI 一起使用的方法继续这样做,我将在相同的命名空间和公共部分类名下创建 .cs 代码,所以这些方法可以互操作。

我的头在四个文件中看起来像这样,包括我的主要核心文件调用:

public shell()
{
InitializeComponent(); 
}

与 UI 配合使用的 .cs 文件的标头区域(并且似乎导致了这个新的冲突):

using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
using System.Data.SqlServerCe;
using System.Diagnostics;
using System.Threading;
using System.Collections.Specialized;
using System.Net;
using System.Runtime.InteropServices;
using watin = WatiN.Core;
using WatiN.Core.Native.InternetExplorer;
using System.Web; 


namespace WindowsFormsApplication1
{

    public partial class shell : Form
    {

现在,当我尝试调试/预览我的应用程序(顺便说一句,这是 Visual Studio 2010 Express 中的 Windows 应用程序)时,我收到以下错误消息:

不包含适合入口点的静态“main”方法

我在 Application->Startup 对象中查看了应用程序属性,但它没有提供任何选项。如何通知应用程序从具有我的 InitializeComponent() 的 .cs 文件开始;命令?

  • 到目前为止,我环顾四周,没有找到解决办法。
  • 每个 .cs 文件的属性都设置为“编译”。
  • 我在解决方案资源管理器中没有看到 App.xaml 文件,但我看到了 app.config 文件。

我还是个新手,这是我第一次尝试用 c# 代码组织方法。

【问题讨论】:

  • 你有main方法吗??
  • 老实说,我在代码中的任何地方都没有看到名为 Main 的方法。我也已经在这个项目上工作了几个月了。
  • 您需要一个名为main 的静态方法,并具有正确的签名。这就是编译器知道如何启动程序的方式。
  • 尝试在您的项目中添加类似的内容[STAThread] static void Main(string[] args) { Application.Run(new shell()); }
  • @L.B:将其创建为答案,以便他接受。

标签: c# visual-studio-2010


【解决方案1】:

我也在研究这个问题,在我的情况下,解决方案太简单了。我在解决方案中添加了一个新的空项目。新添加的项目会自动设置为控制台应用程序。但由于添加的项目是一个“空”项目,因此该新项目中不存在 Program.cs。 (如预期)

我需要做的就是将项目属性的输出类型更改为类库

【讨论】:

  • 我认为解决方案有点矫枉过正。遵循@eyossi 的解决方案会容易得多。
  • 但是您想要一个控制台应用程序还是一个类库?不要只是更改应用程序的类型来修复错误;知道错误告诉你什么。控制台应用程序需要一个入口点 (static void main()) 来确定从哪里开始执行代码;类库不会——它们被其他已经在执行的库调用。
  • 这是@pixaloop 建议的矫枉过正的版本。阅读此答案后,我记得添加空项目时默认输出到控制台。所以我只是去改变它。想将其发布为答案(因为它更简单),但看到其他人已经这样做了。
  • 谢谢伙计。那将是我最后去看的地方!
  • 一点也不矫枉过正。这是我的情况的确切问题。编译器在我的另外两个项目中寻找main,它们是控制台应用程序,就像启动项目一样。在其属性屏幕中将这两个“辅助”项目更改为 类库 会立即修复它。
【解决方案2】:

将项目>属性下的输出类型更改为“类库”。默认情况下,此设置可能已设置为“控制台应用程序”。

【讨论】:

  • 这正是我所做的,完美无缺。如果您添加了“空”项目,则默认为控制台。
  • 谢谢,这对我来说非常有效。我想补充的另一件事是,当您右键单击项目并转到属性时,“输出类型”将在“常规”下可用。所以整个路径基本上是 [Your Project Name] > Properties > Application > General > Output Type
【解决方案3】:

我遇到了这个错误并使用这个解决方案解决了它。

  1. 右键单击项目
  2. 选择“属性”
  3. 将“输出类型”设置为“类库”。

【讨论】:

  • 是的,但您需要另一个项目来调试类库。失败的目的
  • 为我工作,因为我只是在实用程序项目中遇到此错误,而不是在启动项目中
  • 这是正确的。如果你用“Hello World”之类的东西来启动你的项目,然后把它拿出来,你必须面对这个方向。
【解决方案4】:

尝试将此方法添加到类中,看看是否仍然出现错误:

[STAThread]
static void Main()
{
}

【讨论】:

  • 就我而言,我想要一个控制台应用程序。因此,将入口点添加到我的课程中就可以了。我是 VS 2022 菜鸟,但我更喜欢旧的控制台模板。这很令人困惑,控制台应用程序应该开箱即用,无需编写任何代码。 Microsoft IMO 做出错误的 UI 决定。
【解决方案5】:

如果您没有名为Program.cs 的文件,只需添加一个新类并将其命名为Program.cs

然后粘贴这段代码:

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Windows.Forms;

 namespace Sales {
     static class Program {

         /// <summary>
         /// The main entry point for the application.
         /// </summary>
         [STAThread]
         static void Main() {
             Application.EnableVisualStyles();
             Application.SetCompatibleTextRenderingDefault(false);
             Application.Run(new Form1());
         }
     }

 }

【讨论】:

    【解决方案6】:
    1. 选择 App.xaml 并显示其属性。将 Build Action 设置为 ApplicationDefinition
    2. App.xaml 及其对应的 *.cs 文件必须放在 *.csproj 文件的根目录下,即。 e.不在“源”文件夹中。

    【讨论】:

    • 对我来说就是这种情况。我 ctrl+c 将 App.xml 复制到项目中,并将构建操作设置为“Page”。
    【解决方案7】:

    如果您有 Main 方法但仍然出现此错误,请确保包含 Main 方法的文件将“构建操作”设置为“编译”,并将“复制到输出目录”设置为“不复制”。

    【讨论】:

    • 谢谢!也许再过几个小时,我就会意识到我无法生成语法错误,因此查看了那里..
    【解决方案8】:

    编辑 .csproj 文件

    &lt;OutputType&gt;Library&lt;/OutputType&gt;

    干杯!

    【讨论】:

    • 这确实有效,但必须是Library(大写L
    • 它应该是.net core中的默认值docs.microsoft.com/fr-fr/visualstudio/msbuild/…原来当你的项目是默认值Library被覆盖为构建期间的exe。正在解析 SDK 'Microsoft.NET.Sdk.Web.ProjectSystem'... 属性重新分配:$(OutputType)="Exe"(之前的值:"Library")
    • 您可以使用 Visual Studio 2019 中的 GUI,而不是编辑 .csproj。 1. 在解决方案资源管理器中选择项目 2. 从主工具栏 3. 输出类型:类库 4. 保存
    【解决方案9】:

    在 VS 2017 中出现此问题的原因是:

    静态异步任务 Main(string[] args)

    功能 'async main' 在 C# 7.0 中不可用。请使用语言版本 7.1 或更高版本

    添加

    &lt;LangVersion&gt;latest&lt;/LangVersion&gt;

    对 app.csproj 有帮助。

    【讨论】:

    • 我也有同样的情况,我想是因为我最初使用 VS2019 创建了解决方案,然后尝试在 VS2017 中打开它。我的是一个 dotnetcore 控制台应用程序。
    【解决方案10】:

    对我来说,错误实际上是由“功能‘异步主’在 C# 7.0 中不可用。请使用语言版本 7.1 或更高版本”产生的。此问题导致错误列表中出现“不包含适用于入口点的静态‘main’方法”消息,但“输出”窗口显示“不可用”错误。 为了纠正这个问题,我在高级构建设置下将语言版本从“C# 最新次要版本(默认)”更改为“C# 最新次要版本(最新)”。

    【讨论】:

    • 好收获。实际版本问题仅在输出窗口中说明
    【解决方案11】:

    嘿,我遇到了同样的错误,这个错误的解决方案就是写大写 M 而不是小 m.. 例如:- static void Main() 希望对你有帮助。。

    【讨论】:

      【解决方案12】:

      看起来像是一个尝试使用启动表单的 Windows 窗体项目,但由于某种原因,项目属性设置为启动为 Main。

      如果您启用了应用程序框架,您可能无法看到 Main 处于活动状态(这是无效配置)。

      【讨论】:

      • 我有兴趣了解更多关于应用程序框架设置的信息,以及当 Main 方法似乎在任何地方都不存在时任何可能告诉软件查找 Main() 的内容。
      • 我相信应用程序框架设置仅适用于 VB.NET。 C# Forms 应用程序始终将“main”作为入口点。
      【解决方案13】:

      萨拉姆, 我有 Visual Studio 2017Visual Studio 2019

      Visual Studio 2019 不会显示此错误,但 2017 会显示。尝试安装 Visual Studio 2019。


      Visual Studio 2017
      


      Visual Studio 2019
      

      【讨论】:

        【解决方案14】:

        将上述代码放入 Program.cs 后,按照以下步骤操作

        1. 右击项目

        2. 选择Properties

        3. Output Type 设置为Windows Application

        4. 启动对象:namepace.Program

        【讨论】:

        【解决方案15】:

        当您想允许从命令中指定参数时,它们必须如下所示:

         [STAThread]
         static void Main(params string[] paramaters)
         {
        

        你不能指定多个参数,否则也会导致上面报错。

        【讨论】:

          【解决方案16】:

          对于其他来这里的人:

          在我的例子中,我从一个包含&lt;EnableDefaultCompileItems&gt;false&lt;/EnableDefaultCompileItems&gt; 的示例项目中复制了一个 .csproj,但没有包含 Program.cs 文件。修复是删除 EnableDefaultCompileItems 或在编译中显式包含 Program.cs

          【讨论】:

            【解决方案17】:

            您好,您的主类已被删除,因此请添加名称设置为 Main.cs 的新类并害虫该代码,或者如果窗口中出现问题,那么同样的问题

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using Foundation;
            using UIKit;
            
            namespace your_PKG_name.iOS
            {
                   public class Application
                    {
                        // This is the main entry point of the application.
                        static void Main(string[] args)
                        {
                            // if you want to use a different Application Delegate class from "AppDelegate"
                            // you can specify it here.
                            UIApplication.Main(args, null, "AppDelegate");
            
                        }
                    }
            }
            

            【讨论】:

            • h'whoops,不小心将我的主文件拖出 iOS 项目。谢谢
            【解决方案18】:

            有效的条目如下所示:

            public static class ConsoleProgram
                {
                    [STAThread]
                    static void Main()
                    {
                        Console.WriteLine("Got here");
                        Console.ReadLine();
                    }
                }
            

            我在编写 Web 应用程序时遇到了问题,但由于加载时间很长,我想快速将同一个项目转换为控制台应用程序,并在不加载整个解决方案的情况下执行快速方法测试。

            我的入口点放在 /App_Code/Main.cs 中,我必须执行以下操作:

            1. 设置项目 -> 属性 -> 应用程序 -> 输出类型 = 控制台应用程序
            2. 创建 /App_Code/Main.cs
            3. 在其中添加上面的代码(并引用我项目中的方法)
            4. 右键Main.cs文件->属性->构建动作=编译

            在此之后,我可以将输出(如步骤 1 中所述)设置为 Class Library 以启动网站,或设置 Console Application 以进入控制台模式。

            为什么我这样做而不是两个独立的项目?

            仅仅是因为我引用了 Entity Framework 和其他特定的引用,导致运行 2 个单独的项目时出现问题。

            为了更简单的解决方案,我仍然推荐 2 个单独的项目,因为控制台输出主要是测试代码,您可能不想冒险在生产代码中输出。

            【讨论】:

              【解决方案19】:

              如果您使用的是类库项目,请在项目的应用程序部分下的属性中将类库设置为输出类型。

              【讨论】:

                【解决方案20】:

                发生这种情况的另一种情况是有人(无意中)更改了Program.cs构建操作Build Action 的值应为C# compiler

                我不小心将 Build Action 更改为 None,这会将 program.cs 从项目中删除,因此在编译开始时没有包含在内。

                【讨论】:

                  【解决方案21】:

                  如果您确实有一个公共静态主要方法,则可能是您的构建设置,如以下问题所述:Troubleshooting "program does not contain a static 'Main' method" when it clearly does...?

                  【讨论】:

                    【解决方案22】:

                    我也遇到过这个问题。然后我意识到我选择的是控制台应用程序(包)而不是控制台应用程序。

                    【讨论】:

                      【解决方案23】:

                      我正在使用 Visual Studio,也遇到了这个问题。我花了一些时间,但在我的程序中,这是因为我不小心删除了一个名为“程序”的类,它是自动生成的。

                      【讨论】:

                        【解决方案24】:

                        对于在 Windows 窗体应用程序中遇到相同问题的未来读者,一种解决方案是将这些行添加到您的主/启动表单类中:

                            [STAThread]
                            static void Main()
                            {
                                Application.EnableVisualStyles();
                                Application.SetCompatibleTextRenderingDefault(false);
                                Application.Run(new MyMainForm());
                            }
                        

                        然后转到项目属性 > 应用程序 > 启动对象下拉菜单,应该会看到 namespace.MyMainForm,选择它,清理并构建解决方案。它应该可以工作。

                        【讨论】:

                          【解决方案25】:

                          查看项目是否设置为“启动项目”

                          右键单击项目并从菜单中选择“设置为启动项目”。

                          【讨论】:

                            【解决方案26】:

                            如果您像我一样,那么您可能从类库开始,然后将其切换到控制台应用程序。如果是这样,请更改此...

                            namespace ClassLibrary1
                            {
                                public class Class1
                                {
                                }
                            }
                            

                            到这里……

                            namespace ConsoleApp1
                            {
                                class Program
                                {
                                    static void Main(string[] args)
                                    {
                                    }
                                }
                            }
                            

                            【讨论】:

                              【解决方案27】:

                              只需右键单击项目并选择属性,然后在类库上设置输出类型

                              【讨论】:

                                【解决方案28】:

                                如果您使用 Visual Studio Code 将 csproj 文件上的 Project Sdk="Microsoft.NET.Sdk.Web" 更改为 Project Sdk="Microsoft.NET.Sdk"。

                                【讨论】:

                                  【解决方案29】:

                                  您是否不小心删除了整个 Program.cs 文件? 如果您已删除,

                                  using System;
                                  using System.Collections.Generic;
                                  using System.Linq;
                                  using System.Threading.Tasks;
                                  using System.Windows.Forms;
                                  namespace ListWievKullanımı
                                  {
                                     static class Program
                                     {
                                          /// <summary>
                                          /// The main entry point for the application.
                                          /// </summary>
                                          [STAThread]
                                          static void Main()
                                          {
                                              Application.EnableVisualStyles();
                                              Application.SetCompatibleTextRenderingDefault(false);
                                              Application.Run(new Form1());
                                          }
                                      }
                                  }
                                  

                                  这可能对你有用。 Program.cs

                                  【讨论】:

                                  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                                  【解决方案30】:

                                  也许是无意的,但是将我的 docker 文件移动到解决方案文件夹而不是项目中消除了错误。当我仍然想独立于 docker 运行解决方案时,这很有帮助

                                  【讨论】:

                                    猜你喜欢
                                    • 2013-06-10
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 2021-04-21
                                    • 2012-04-21
                                    • 1970-01-01
                                    • 1970-01-01
                                    • 1970-01-01
                                    相关资源
                                    最近更新 更多