진입 점에 적합한 정적 '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 2017와Visual 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.