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


79

我开始将我的代码整理到单独的.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”方法

我在“应用程序”->“启动”对象中查看了应用程序属性,但没有任何选择。我如何通知应用程序从具有InitializeComponent()的.cs文件开始;命令?

  • 到目前为止,我一直没有解决方案。
  • 每个.cs文件的属性均设置为“编译”。
  • 我的解决方案资源管理器中没有看到App.xaml文件,但是我看到了app.config文件。

我仍然很新,这是我第一次尝试使用c#代码进行组织的方法。


12
你有主要方法吗?
bobek 2012年

老实说,我在代码的任何地方都看不到称为Main的方法。我也已经在这个项目上工作了几个月。
atwellpub,2012年

1
您需要一个main具有正确签名的称为的静态方法。这就是编译器知道如何启动程序的方式。
David Heffernan'3

5
尝试向您的项目中添加类似的内容[STAThread] static void Main(string[] args) { Application.Run(new shell()); }
LB

1
@LB:将其创建为答案,以便他可以接受。
2012年

Answers:


126

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

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


我认为解决方案有些过大。遵循@eyossi的解决方案会容易得多。
TimWagaman 2012年

但是您想要控制台应用程序还是类库?不要只更改应用程序的类型来纠正错误;知道错误告诉您什么。控制台应用程序需要一个入口点(static void main())来确定从哪里开始执行代码。类库没有-它们已经由其他正在执行的库调用。
KyleMit 2014年

这是@pixaloop建议的过度杀伤性版本。阅读此答案后,我记得添加空项目时默认会将输出输出到控制台。所以我就去改变它。想要将其发布为答案(因为它要简单得多),但看到其他人已经这样做了。
EternalWulf 2014年

谢啦。那将是我最后看过的地方!
eaglei22

一点也不矫kill过正。这是我所遇到的确切问题。就像我的StartUp项目一样,编译器还在main其他两个项目中寻找Console Application的项目。在其“属性”屏幕中将这两个“辅助”项目更改为“类库” ,即可立即对其进行修复。
Ctrl S

80

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


1
这正是我所做的,完美。如果添加了“空”项目,则默认为控制台。
EternalWulf 2014年

21

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

[STAThread]
static void Main()
{
}


11

如果没有名为的文件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());
         }
     }

 }

9
  1. 选择App.xaml并显示其属性。将Build Action设置为ApplicationDefinition
  2. App.xaml及其对应的* .cs文件必须放置在* .csproj文件的根目录中,即不要放置在“源”文件夹中。

1
对我来说就是这种情况。我ctrl + c将App.xml复制到项目中,并将构建操作设置为“页面”。
成龙

7

如果确实有Main方法,但仍然出现此错误,请确保包含Main方法的文件的“ Build action”设置为“ Compile”,“ Copy to ouput directory”设置为“ Do not copy”。


谢谢!也许再过几个小时,我意识到,我不能生成语法错误,因而看上去有..
杰拉德·奥尼尔

5

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


接得好。实际的发行版本仅在输出窗口说明
INT-我

5

编辑.csproj文件

<OutputType>Library</OutputType>

欢呼!


1
这确实有效,但必须Library(用大写L
字母

它应该是.net核心docs.microsoft.com/fr-fr/visualstudio/msbuild/中的默认值。事实证明,当您的项目为<Project Sdk =“ Microsoft.NET.Sdk.Web”>时,默认值为在构建过程中,库被覆盖为Exe。正在解决SDK'Microsoft.NET.Sdk.Web.ProjectSystem'...属性重新分配:$(OutputType)=“ Exe”(先前的值:“ Library”)
Romain Hautefeuille

4

嘿,我有同样的错误,解决这个错误的方法是只写大写的M而不是小M。例如:-static void Main()我希望它能对您有所帮助。


3

在VS 2017中出现此问题是由于:

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

“异步主功能”在C#7.0中不可用。请使用语言版本7.1或更高版本

新增中

<LangVersion>latest</LangVersion>

到app.csproj帮助。


我有相同的想法,因为我最初是使用VS2019创建解决方案,然后尝试在VS2017中打开它。我的是一个dotnetcore控制台应用程序。
trebor

2

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

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


我想听听有关Application Framework设置的更多信息,以及可能在Main方法似乎不存在的任何地方告诉该软件寻找Main()的信息。
atwellpub,2012年

我相信Application Framework设置仅适用于VB.NET。C#Forms应用程序始终将“ main”作为入口点。
A.威尔逊

2

达累斯萨拉姆,我都Visual Studio 2017Visual Studio 2019

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


Visual Studio 2017

Visual Studio 2017


Visual Studio 2019

Visual Studio 2019


1

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

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

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


1

对于其他一些来这里的人:

以我为例,我从一个示例项目中复制了一个.csproj,而其中<EnableDefaultCompileItems>false</EnableDefaultCompileItems>不包含Program.cs文件。解决的方法是删除EnableDefaultCompileItems或将Program.cs明确包含在编译中


1

在这里,您的主类被删除了,所以添加新的类,将其名称设置为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");

            }
        }
}

抱歉,我不小心将Main文件拖出了iOS项目。谢谢
Dan Beaulieu

1

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


1

将上面的代码放在Program.cs中后,请按照下列步骤操作:

  1. 右键点击项目

  2. 选择“属性”

  3. 将“输出类型”设置为“ Windows应用程序”

  4. 启动对象:namepace.Program




0

我正在使用Visual Studio,也有此问题。我花了一些时间,但是在我的程序中是由于我不小心删除了自动生成的名为“程序”的类引起的。


0

对于将来遇到与Windows Forms Application相同问题的读者,一种解决方案是将这些行添加到主/启动表单类中:

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

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


0

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

右键单击该项目,然后从菜单中选择“设置为启动项目”。


0

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

namespace ClassLibrary1
{
    public class Class1
    {
    }
}

为此...

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

0

有效条目如下:

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中所述)设置为“类库”以启动网站,或将“控制台应用程序”设置为进入控制台模式。

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

仅仅是因为我有对Entity Framework的引用以及其他特定的引用,这些引用在运行2个单独的项目时造成了问题。

对于更简单的解决方案,我仍然建议2个独立的项目,因为控制台输出主要是测试代码,并且您可能不希望冒着在生产代码中花钱的风险。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.