当程序明显包含一个静态的“Main”方法时,如何解决“程序不包含静态'Main'方法”的问题?

64

我的MS Visual C#程序一直可以编译和运行得很好。 我关闭MS Visual C#去做其他的事情。

我重新打开它并(在进行任何其他操作之前)想要“发布”我的程序,结果出现以下错误信息:

程序C:\myprogram.exe不包含适用于入口点的静态“Main”方法

什么?它是有的,而且15分钟前还能正常工作。 当然,我可以相信我在关闭它之前意外地按了某些键或做了某些事情...但是具体是什么呢?如何进行故障排除?

我的Program.cs文件看起来像这样:

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

namespace SimpleAIMLEditor
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new mainSAEForm());
        }
    }
}

...还有一些注释在其中。除此之外没有其他错误。

可以帮忙吗?

20个回答

62

文件的属性是否设置为编译?


3
就是这样,我关闭之前一直在看“创建操作”,但可能不小心按错了键,导致 Program.cs 文件无法编译。谢谢! - adeena
1
我该如何检查这个问题?我这里也遇到了同样的问题... PS:使用vs2012 - Michel Ayres
3
在项目树中选择文件,打开属性窗口。顶部的值应该是正确的。 - Quibblesome

61

由于我的一个类库项目被错误地设置为控制台应用程序,我一直在努力解决这个错误。

因此,请确保您的类库项目的输出类型是“类库”。

输入图像描述


1
在dotnet core中,这将添加以下内容到我的project.csproj文件: <PropertyGroup> .... <ApplicationIcon /> <OutputType>Library</OutputType> <StartupObject /> </PropertyGroup> - Bert

24

好的,我也在查看这个问题。而在我的情况下,解决方案也太简单了。我向解决方案中添加了一个新的空项目。新添加的项目自动设置为控制台应用程序。但由于添加的项目是“空”项目,在该新项目中不存在Program.cs文件。(正如预期的那样)

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


3
谢谢!那正是我的问题 :) - Jen

17
如果您有一个 WPF 或 Silverlight 应用程序,请确保在 "文件属性" 上将 App.xaml 的 "BuildAction" 设置为 "ApplicationDefinition"。

9

我遇到了这个错误,通过以下解决方案得以解决。

--> Right click on the project

--> and select "Properties"

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

8

我做出了改变

public static void Main(string[] args)

to

public async static void Main(string[] args)

问题在于它需要成为一个任务:
public async static Task Main(string[] args)

6

请检查您的项目属性。在“应用程序”选项卡上,将您的Program类选择为启动对象:

alt text


2
只有在存在两个静态的Main方法时才需要设置这个。 - configurator
8
如果下拉菜单是空的,会怎么样? - Asbjørn Ulsberg
不小心更改了我的类属性,结果删除了该属性,即使重新输入也是如此。感谢解决我的问题 :) - Alistair Bendall

3

我曾遇到这个问题,是因为我没有使用最新版本的C#(本文撰写时为C# 7.3),并且我需要将下面的internal访问修饰符更改为public

internal class Program
 {
    public static void Main(string[] args)
    {
        //My Code
    }
  }

或者修改.csproj文件,使用最新版本的C#(这种方法可以让我仍然将上述类设置为internal):

<PropertyGroup>
    <LangVersion>latest</LangVersion>
    <NoWin32Manifest>true</NoWin32Manifest>
</PropertyGroup>

3

很奇怪,您的程序是否能够成功编译和运行,只有在“发布”时才失败?还是现在每次都无法编译?

另外,您是否可能将文件属性的“生成操作(Build Action)”更改为除“编译(Compile)”之外的其他选项了?


1
是的 - 它在每次编译时都失败了,而且是的 - 我不小心将 Program.cs 的构建操作更改为“无”。 :) - adeena
2
一个声望超过20k的用户如何将“评论”发布为答案,并仍然获得赞同?或者这实际上是回答了问题,只是我没有注意到吗? - Alisson Reinaldo Silva
没关系,这是2008年的事情(我以为很近因为它在LQ队列中,我的错)。 - Alisson Reinaldo Silva
@Alisson 首先,是的,答案来自2008年,但第二段也回答了问题。 - configurator
@configurator 是的,我的错,我只是没有注意到。我认为你应该编辑你的答案,让它看起来更像一个真正的答案,并且应该被接受(因为你是第一个发布的)。但不幸的是这些事情会发生。 - Alisson Reinaldo Silva

2

我遇到了同样的错误,因为我重命名了Program类的命名空间
在项目的"应用程序"选项卡中,"启动对象"字段仍然引用旧的命名空间。选择新的启动对象解决了问题,也从该列表中删除了过时的条目。
您可能还需要更新同一"应用程序"选项卡中的"默认命名空间"字段。


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