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

时间:2012-03-07 19:20:45

标签: c# visual-studio-2010

我开始将我的代码组织成seperarate .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
    {

现在,当我尝试调试/预览我的应用程序时(BTW这是Visual Studio 2010 Express中的Windows应用程序),我收到此错误消息:

  

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

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

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

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

28 个答案:

答案 0 :(得分:100)

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

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

答案 1 :(得分:58)

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

答案 2 :(得分:14)

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

[STAThread]
static void Main()
{
}

答案 3 :(得分: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());
         }
     }

 }

答案 4 :(得分:4)

嘿,我得到了同样的错误,这个错误的解决方案只是写出Capital M而不是小m ..例如: - static void Main() 我希望它有所帮助..

答案 5 :(得分:4)

如果您确实有Main方法但仍然出现此错误,请确保包含Main方法的文件具有&#34; Build action&#34;设置为&#34;编译&#34;和&#34;复制到输出目录&#34;设置为&#34;不要复制&#34;。

答案 6 :(得分:3)

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

静态 异步任务 Main(字符串[]参数)

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

添加

<LangVersion>latest</LangVersion>

对app.csproj有所帮助。

答案 7 :(得分:3)

  1. 选择App.xaml并显示其属性。将构建操作设置为 ApplicationDefinition
  2. App.xaml及其相应的* .cs文件必须放在* .csproj文件的根目录中,i。即不要进入“Source”文件夹。

答案 8 :(得分:2)

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

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

答案 9 :(得分:1)

如果要允许从命令中指定参数,则它们必须如下所示:

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

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

答案 10 :(得分:1)

将以上代码放入Program.cs之后,请按照下列步骤操作:

  1. 右键单击项目

  2. 选择“属性”

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

  4. 启动对象:namepace.Program

答案 11 :(得分:1)

编辑.csproj文件

<OutputType>Library</OutputType>

欢呼!

答案 12 :(得分:1)

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

答案 13 :(得分:1)

我遇到了这个错误,并通过此解决方案解决了。

--> Right click on the project

--> and select "Properties"

--> then set "Output Type" to "Class Library".

答案 14 :(得分:1)

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

答案 15 :(得分:1)

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

在我的情况下,我从包含<EnableDefaultCompileItems>false</EnableDefaultCompileItems>的示例项目中复制了.csproj,但没有包含Program.cs文件。修复是删除EnableDefaultCompileItems或在编译中包含Program.cs

答案 16 :(得分:0)

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

namespace ClassLibrary1
{
    public class Class1
    {
    }
}

对此...

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

答案 17 :(得分:0)

hellow你的主类被删除了所以添加新的类,名称设置为Main.cs和害虫代码或如果在窗口中的porblem那么相同的问题

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");

            }
        }
}

答案 18 :(得分: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个单独的项目,因为控制台输出主要是测试代码,并且您可能不希望冒险将其投入生产代码中。

答案 19 :(得分:0)

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

答案 20 :(得分:0)

检查项目是否设置为&#34;启动项目&#34;

右键单击项目并选择&#34;设置为启动项目&#34;从菜单中。

答案 21 :(得分:0)

萨拉姆, 我同时拥有 Visual Studio 2017 Visual Studio 2019

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


Visual Studio 2017

Visual Studio 2017


Visual Studio 2019

Visual Studio 2019

答案 22 :(得分:0)

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

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

然后转到项目属性&gt;申请&gt;启动对象下拉列表,应该看到namespace.MyMainForm,选择它,清理并构建解决方案。它应该工作。

答案 23 :(得分:0)

我正在使用Visual Studio并且还遇到了这个问题。它花了我一些时间,但在我的程序中它是由于我不小心删除了一个名为&#34; Program&#34;这是自动生成的。

答案 24 :(得分:0)

我也遇到过这个问题。然后我意识到我选择的是Console Application(Package)而不是Console Application。

答案 25 :(得分:-1)

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

答案 26 :(得分:-1)

enter image description here

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

答案 27 :(得分:-4)

简单解决方案。

1.BUILD - &gt;清洁项目名称 (它将清除您之前未完成的构建“它与刷新类似”)

2.BUILD - &gt; BUILD PROJECT-NAME。

然后你可以简单地启动你的脚本它会起作用。  请找附件!!