WPF에 Main ()이 없습니까?


128

프로그래밍에 관해서는 초보자이지만 보편적 인 규칙 중 하나는 프로그램이 Main ()으로 시작한다는 것입니다. WPF 프로젝트를 만들 때 보이지 않습니다. WPF에서 Main ()의 이름이 다른 것입니까?


13
App.xaml.cs에서 OnStartup을 재정 의하여 동등한 기능을 얻을 수 있습니다. StartupEventArgs.Args에는 명령 줄 인수가 포함되어 있습니다.
Foole

1
@Foole, 아니요, 질문을 볼 수 없습니다 .
Sinatr

답변:


73

빌드 중에 생성되지만 직접 제공 할 수 있습니다 (필요에 따라 프로젝트 속성에서 명확하게 표시). obj / debug에서 앱 파일을 찾으십시오. 나는 ( "C # 2010 익스프레스"의 제공)가 App.g.i.cs와를 :

namespace WpfApplication1 {


    /// <summary>
    /// App
    /// </summary>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public partial class App : System.Windows.Application {

        /// <summary>
        /// InitializeComponent
        /// </summary>
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public void InitializeComponent() {

            #line 4 "..\..\..\App.xaml"
            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);

            #line default
            #line hidden
        }

        /// <summary>
        /// Application Entry Point.
        /// </summary>
        [System.STAThreadAttribute()]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        public static void Main() {
            WpfApplication1.App app = new WpfApplication1.App();
            app.InitializeComponent();
            app.Run();
        }
    }
}

1
에도 같은 내용이 App.g.cs있습니다. 그러나 나는 Main()프로젝트 를 추가 할 때마다 추가하려고 노력했으며 , 여기에있는 것으로 되돌릴 것입니다. 다른 클래스에서 내 클래스를 만들려고했지만 프로젝트 속성이 다른 클래스가 아닌 MyProject.App 만 발견하므로 리디렉션 할 수 없습니다.
vapcguy

1
또는 App.xaml.csVisual Studio에서 엽니 다 . 탐색 줄> 방법 드롭 다운 목록> 선택 Main(회색으로 표시)을 사용하십시오. 이것은 당신을 데려갑니다 App.g.i.cs.
P.Brian.Mackey

136

Main () 메소드가 자동으로 작성됩니다. 직접 제공하려면 VS2013 및 VS2017에서 테스트해야합니다.

  • 솔루션 탐색기에서 App.xaml을 마우스 오른쪽 단추로 클릭하고 속성을 선택하십시오.
  • '빌드 조치'를 '페이지'로 변경하십시오 (초기 값은 'ApplicationDefinition'입니다).

그런 다음 App.xaml.cs에 Main () 메서드를 추가하십시오. 다음과 같이 될 수 있습니다.

[STAThread]
public static void Main()
{
    var application = new App();
    application.InitializeComponent();
    application.Run();
}

2
[STAThread]는 응용 프로그램의 COM 스레딩 모델을 설정합니다. 일반적으로 STA으로 설정하면 정확히 무엇을 걱정하지 않아도됩니다. 관심이 있으시면 msdn.microsoft.com/de-de/library/…를
Andreas Kahler

이러지 마! 이렇게하면 전체 프로젝트에 대해 디자이너의 App.xaml 스타일에 정의 된 StaticResources가 영구적으로 중단됩니다.
Himbeer

13

Main() CLR과 WPF에 의해 자동으로 제공됩니다.

C # 컴파일러는 /m의 구현을 포함하는 유형을 지정 하는 명령 행 스위치 를 사용합니다 Main(). 일반적으로 시작 객체를 명시 적으로 지정하지 않으면 CLR은 정적 Main()메서드 가있는 모든 클래스를 조회하여 호출합니다. (@Marc Gravel이 그의 의견에서 지적한 것처럼)

WPF의 경우 C # 컴파일러가 해당 클래스를 진입 점으로 사용하도록 / m 스위치가 지정 Main()될 때 자동으로 생성됩니다 App.xaml. 그러나 프로젝트 속성을 보면 시작 개체를 선택할 수있는 설정이 있습니다. 따라서 원하는 경우을 구현하는 고유 한 클래스를 제공 할 수 있습니다 Main().

이 경우 Application인스턴스 를 생성 하고 호출 해야 할 책임이 있습니다.Run() 메소드를 하여 WPF 인프라가 올바르게 시작되는지 확인해야합니다.


실제로, /m그것이 없으면 유형이 무엇인지 상관 하지 않습니다 . 당신은 명시하지 않은 경우 그냥 찾으려고 어떤 적합Main 방법을, 그리고 0 또는 하나 이상을 발견하면 뿌려줍니다. 예를 들어 언어 사양 (§1.1)의 "Hello World"샘플 Hello이 유형 이름으로 사용 됩니다.
Marc Gravell

2
pedantic : main()CLR (런타임)에서 제공하는 것은 실제로 정확하지 않으며 실제로 CLR을 생성하는 컴파일러입니다.
행크

청중에게 이전과 같이 자신의 Application 인스턴스 (예 :)를 추가 MyApp.App app = new MyApp.App();하고 호출 해야 할 것을 상기시키기 위해 +1을 추가했습니다 . 잘 했어 또한 전에 추가 해야 하며 다행히도 원래 방법이 여전히 있습니다 (App.g.cs에서 볼 수 있으므로 다시 추가 할 필요가 없습니다!). .Run()Main()app.InitializeComponent();app.Run()InitializeComponent()
vapcguy

7

Main()컴파일 중에 생성됩니다. 당신은 그것을에서 찾을 수 있습니다 App.g.cs(에서 obj/{Debug,Release}폴더).


6

main()응용 프로그램의 표준 진입 점이지만 모든 응용 프로그램은 그런 식으로 구성됩니다. XAML 프로젝트에서 App.XAML 파일은 파일의 시작 지점을 지정합니다.StartupUri="MainWindow.xaml" .

다른 사람들이 언급했듯이 실제 주요 기능은 프로젝트의 XAML 파일 내용을 기반으로 생성됩니다.


1

메인 윈도우가없는 다른 프로젝트에서로드되지 않는 파일을 새 파일로 복사 하고이 오류가 발생했습니다.

나를 위해 Andreas Kahler와 반대되는 접근 방식으로 수정했습니다.

창 파일을 만들고 시작 파일을이 파일로 설정 한 후 페이지를 App.xaml 'Build Action'속성의 ApplicationDefinition으로 전환했습니다.


0

기본 App.xaml 및 MinWindow.xaml을 제거한 경우 .csproj를 편집하는 것이 좋습니다. App.xaml을 수동으로 추가 한 후 .csproj는 다음과 같습니다.

<Page Include ="App.xaml">
       <DependentUpon>MSBuild:Compile</DependentUpon>
       <SubType>Code</SubType>
</Page>

이것을 다음으로 변경하십시오.

<ApplicationDefinition Include="App.xaml">
    <Generator>MSBuild:Compile</Generator>
    <SubType>Designer</SubType>
</ApplicationDefinition>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.