진입 점에 적합한 정적 'main'메서드를 포함하지 않습니다.


83

나는 매일 코드를 별도의 .cs 파일로 구성하기 시작했으며 UI와 함께 작동하는 메서드가 계속 작동 할 수 있도록 동일한 네임 스페이스와 공용 부분 클래스 이름 아래에 .cs 코드를 생성하여 메서드가 상호 운용 가능합니다.

내 헤더는 다음을 호출하는 기본 코어 파일을 포함하여 4 개의 파일에서 다음과 같이 보입니다.

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 응용 프로그램) 다음 오류 메시지가 표시됩니다.

진입 점에 적합한 정적 'main'메서드를 포함하지 않습니다.

Application-> Startup 개체의 응용 프로그램 속성을 살펴 보았지만 옵션을 제공하지 않습니다. 내 InitializeComponent ()가있는 .cs 파일에서 시작하도록 응용 프로그램에 알리려면 어떻게해야합니까? 명령?

  • 지금까지 해결책없이 둘러 보았습니다.
  • 각 .cs 파일의 속성은 '컴파일'로 설정됩니다.
  • 솔루션 탐색기에 App.xaml 파일이 표시되지 않지만 app.config 파일이 표시됩니다.

나는 여전히 매우 새롭고 이것은 C # 코드로 구성 방법에 대한 첫 번째 시도입니다.


12
당신은 주요 방법이 있습니까 ??
bobek

솔직히 말해서 내 코드 어디에도 Main이라는 메서드가 보이지 않습니다. 나도이 프로젝트에서 몇 달 동안 작업하고 있습니다.
atwellpub

1
main올바른 서명이있는 라는 정적 메서드가 필요합니다 . 이것이 컴파일러가 프로그램을 시작하는 방법을 아는 방법입니다.
David Heffernan 2012 년

5
프로젝트에이 같은 무언가를 추가하려고[STAThread] static void Main(string[] args) { Application.Run(new shell()); }
LB

1
@LB : 그가 그것을 받아 들일 수 있도록 대답으로 만드십시오.
여호수아

답변:


129

이 문제도 살펴보고 있었는데 제 경우에는 해결책이 너무 쉬웠습니다. 솔루션에 새로운 빈 프로젝트를 추가했습니다. 새로 추가 된 프로젝트는 자동으로 콘솔 애플리케이션으로 설정됩니다. 그러나 추가 된 프로젝트가 '빈'프로젝트 였기 때문에 새 프로젝트에는 Program.cs가 없었습니다. (예상대로)

내가해야 할 일은 프로젝트 속성의 출력 유형을 클래스 라이브러리로 변경하는 것뿐이었습니다.


솔루션의 약간 과잉이라고 생각합니다. @eyossi의 솔루션을 따르는 것이 훨씬 쉬울 것입니다.
TimWagaman 2015 년

하지만 콘솔 애플리케이션이나 클래스 라이브러리를 원하십니까? 오류를 수정하기 위해 응용 프로그램 유형 만 변경하지 마십시오. 오류가 무엇을 알려주는지 알고 있습니다. 콘솔 응용 프로그램에는 static void main()코드 실행을 시작할 위치를 결정하기 위해 진입 점 ( )이 필요합니다 . 클래스 라이브러리는 그렇지 않습니다. 이미 실행중인 다른 라이브러리에서 호출합니다.
KyleMit 2014

이것은 @pixaloop가 제안하는 것의 과잉 버전입니다. 이 답변을 읽은 후 빈 프로젝트를 추가하면 출력이 콘솔로 기본 설정된다는 것을 기억했습니다. 그래서 그냥 가서 바 꾸었습니다. 답변으로 게시하고 싶었지만 (훨씬 더 간단하기 때문에) 다른 사람이 이미 그랬음을 확인했습니다.
EternalWulf 2014 년

고마워요. 내가 본 마지막 장소 였을 것입니다!
eaglei22

전혀 과잉 살인하지 않습니다. 이것은 내 상황에서 정확한 문제였습니다. 컴파일러는 StartUp 프로젝트와 같은 Console Application 인main 다른 두 프로젝트에서 찾고 있었습니다 . 속성 화면에서 두 개의 "도움"프로젝트를 클래스 라이브러리 로 변경 하면 즉시 수정되었습니다.
Ctrl S

81

프로젝트> 속성에서 출력 유형을 "클래스 라이브러리"의 출력 유형으로 변경합니다. 기본적으로이 설정은 "콘솔 응용 프로그램"으로 설정되었을 수 있습니다.


1
이것이 바로 제가 한 일이고 완벽하게 작동합니다. 'Empty'프로젝트를 추가 한 경우 기본값은 Console입니다.
EternalWulf 2014 년

21

이 메서드를 클래스에 추가하고 여전히 오류가 발생하는지 확인하십시오.

[STAThread]
static void Main()
{
}

13

이 오류가 발생하여이 솔루션을 사용하여 해결했습니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.
  2. "속성"을 선택합니다.
  3. "출력 유형"을 "클래스 라이브러리"로 설정합니다.

예,하지만 클래스 라이브러리를 디버깅하려면 다른 프로젝트가 필요합니다. 목적을 패배
Fandango68

나를 위해 일했다 난 단지 유틸리티 프로젝트가 아닌 시작 프로젝트이 오류가 발생했기 때문에
여호수아 스웨인

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을 선택하고 해당 속성을 표시합니다. 빌드 작업ApplicationDefinition으로 설정합니다 .
  2. App.xaml 및 해당 * .cs 파일은 "Source"폴더가 아닌 * .csproj 파일의 루트 디렉터리에 있어야합니다.

1
이것이 저의 경우입니다. Ctrl + c를 눌러 App.xml을 프로젝트에 복사했고 빌드 작업이 "Page"로 설정되었습니다.
Jacky Cheng

7

Main 메서드가 있지만 여전히이 오류가 발생하는 경우 Main 메서드를 포함하는 파일에 "Build action"이 "Compile"로 설정되고 "Copy to ouput directory"가 "Do not copy"로 설정되어 있는지 확인하십시오.


감사합니다! 아마도 몇 시간 후에 구문 오류를 생성 할 수 없다는 것을 깨달았 기 때문에 거기를 살펴 보았습니다.
Gerard ONeill

6

.csproj 파일 편집

<OutputType>Library</OutputType>

건배!


1
이것은 실제로 작동하지만 Library(대문자로 L)
있어야합니다.

.net core 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

.csproj를 편집하는 대신 Visual Studio 2019에서 GUI를 사용할 수 있습니다. 1. 솔루션 탐색기에서 프로젝트를 선택합니다. 2. 주 도구 모음에서 "프로젝트"-> "<project_name> 속성"을 클릭합니다. 3. 출력 유형 : 클래스 도서관 4. 저장
여호수아 스웨인

5

나를 위해 실제로 "기능 'async main'은 C # 7.0에서 사용할 수 없습니다. 언어 버전 7.1 이상을 사용하십시오."라는 오류가 실제로 발생했습니다. 이 문제로 인해 오류 목록에 "진입 점에 적합한 정적 '주'메서드가 포함되어 있지 않습니다."라는 메시지가 표시되었지만 출력 창에 "사용할 수 없음"오류가 표시되었습니다. 이를 해결하기 위해 고급 빌드 설정에서 언어 버전을 'C # 최신 부 버전 (기본값)'에서 'C # 최신 부 버전 (최신)'으로 변경했습니다.


잘 잡았습니다. 실제 버전 문제는 출력 창에만 명시됩니다
int-i

4

저도 같은 오류가 발생했고이 오류에 대한 해결책은 작은 m 대신 Capital M을 작성하는 것입니다. 예 :-static void Main () 도움이 되길 바랍니다 ..


3

VS 2017에서이 문제가 원인 :

정적 비동기 작업 Main (string [] args)

( 'async main'기능은 C # 7.0에서 사용할 수 없습니다. 언어 버전 7.1 이상을 사용하십시오. )

첨가

<LangVersion>latest</LangVersion>

app.csproj에 도움이되었습니다.


나는 처음에 VS2019로 솔루션을 만든 다음 VS2017에서 열려고했기 때문에 똑 같았습니다. Mine은 dotnetcore 콘솔 앱입니다.
trebor

2

시작 양식을 사용하려고하지만 어떤 이유로 프로젝트 속성이 기본이되는 시작으로 설정되는 Windows Forms 프로젝트처럼 보입니다.

응용 프로그램 프레임 워크를 활성화 한 경우 Main이 활성화되어 있는지 확인하지 못할 수 있습니다 (잘못된 구성 임).


Application Framework 설정과 Main 메서드가 어디에도 존재하지 않는 것처럼 보일 때 Main ()을 찾도록 소프트웨어에 지시 할 수있는 모든 것에 대해 좀 더 듣고 싶습니다.
atwellpub

Application Framework 설정은 VB.NET에만 적용됩니다. C # Forms 응용 프로그램에는 항상 "main"이 진입 점으로 있습니다.
A. Wilson

2

살람, 내가 모두 가지고 Visual Studio 2017Visual Studio 2019

Visual Studio 2019에는이 오류가 표시되지 않지만 2017에는 표시됩니다. Visual Studio 2019를 설치해보세요.


Visual Studio 2017

비주얼 스튜디오 2017


Visual Studio 2019

비주얼 스튜디오 2019


1

명령에서 매개 변수를 지정할 수 있도록하려면 다음과 같아야합니다.

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

둘 이상의 매개 변수를 지정할 수 없습니다. 그렇지 않으면 위에서보고 된 오류도 발생합니다.


1

여기 오는 다른 사람들의 경우 :

제 경우 <EnableDefaultCompileItems>false</EnableDefaultCompileItems>에는 Program.cs 파일 을 포함 하지 않고 포함 된 샘플 프로젝트에서 .csproj를 복사했습니다 . 수정은 EnableDefaultCompileItems를 제거하거나 컴파일에 Program.cs를 명시 적으로 포함하는 것입니다.


1

hellow 귀하의 메인 클래스가 삭제되었으므로 이름이 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");

            }
        }
}

우와, 실수로 iOS 프로젝트에서 내 Main 파일을 드래그했습니다. 감사합니다
Dan Beaulieu

1

클래스 라이브러리 프로젝트를 사용하는 경우 프로젝트의 애플리케이션 섹션 아래 속성에서 클래스 라이브러리를 출력 유형으로 설정하십시오.


1

위의 코드를 Program.cs에 넣은 후 다음 단계를 수행하십시오.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하십시오.

  2. "속성"을 선택합니다.

  3. "출력 유형"을 "Windows 응용 프로그램"으로 설정합니다.

  4. 시작 개체 : namepace.Program



0

저도이 문제에 직면했습니다. 그러다가 콘솔 애플리케이션이 아닌 콘솔 애플리케이션 (패키지)을 선택하고 있다는 것을 깨달았습니다.


0

Visual Studio를 사용 중이며이 문제도있었습니다. 시간이 좀 걸렸지 만 프로그램에서 자동으로 생성되는 "Program"이라는 클래스를 실수로 삭제했기 때문에 발생했습니다.


0

Windows Forms 응용 프로그램에서 동일한 문제에 직면 한 미래의 독자를 위해 한 가지 해결책은 다음 줄을 기본 / 시작 양식 클래스에 추가하는 것입니다.

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

그런 다음 프로젝트 속성> 응용 프로그램> 시작 개체 드롭 다운으로 이동하여 namespace.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();
        }
    }

웹 응용 프로그램을 작성하는 동안 문제가 있었지만로드 시간이 엄청나면서 동일한 프로젝트를 콘솔 응용 프로그램으로 빠르게 변환하고 전체 솔루션을로드하지 않고 빠른 메서드 테스트를 수행하고 싶었습니다.

내 진입 점은 /App_Code/Main.cs에 있으며 다음을 수행해야했습니다.

  1. 프로젝트 설정-> 속성-> 애플리케이션-> 출력 유형 = 콘솔 애플리케이션
  2. /App_Code/Main.cs 만들기
  3. 위의 코드를 추가하고 내 프로젝트의 메서드를 참조하십시오.
  4. Main.cs 파일-> 속성-> 빌드 작업 = 컴파일을 마우스 오른쪽 버튼으로 클릭합니다.

그런 다음 1 단계에서 언급 한대로 출력을 Class Library로 설정하여 웹 사이트를 시작하거나 Console Application을 콘솔 모드로 전환 할 수 있습니다.

2 개의 개별 프로젝트 대신이 작업을 수행 한 이유는 무엇입니까?

2 개의 개별 프로젝트를 실행하는 데 문제를 일으킨 Entity Framework 및 기타 특정 참조에 대한 참조가 있기 때문입니다.

더 쉬운 솔루션을 위해 콘솔 출력은 주로 테스트 코드이고 프로덕션 코드에서 위험을 감수하고 싶지 않기 때문에 2 개의 별도 프로젝트를 권장합니다.


-1

의도하지 않았을 수도 있지만 내 도커 파일을 프로젝트 대신 솔루션 폴더로 이동하면 오류가 제거되었습니다. Docker와 독립적으로 솔루션을 실행하고 싶을 때 유용했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.