Wpf 애플리케이션 프로젝트에서 시작개체 선택 방법?

안녕하세요. :smile:

WPF 시작 개체 항목에서 App.xaml 대신 새로운 App 클래스를 바로 선택할 수는 없을까요?
동작에는 전혀 문제 없지만 혹시 방법이 있다면, 그리고 또 시작 원리에 대해서도 궁금합니다!

일반적인 WPF 애플리케이션 프로젝트 생성 시,
프로젝트 속성 항목에 보면 아래와 같이 시작 개체 선택 부분을 볼 수 있는데요.

image

그런데 여기서 App.xaml를 삭제하고 새로운 Application 클래스를 만들면
시작 개체 목록에서 볼 수가 없습니다.


그리고 시작 점이 없기 때문에 아래와 같은 에러도 발생됩니다.

image


그래서 아래처럼 Main 메서드를 만들어 시작하고 있는데요.

public class Startup
{
    [STAThread]
    public static void Main(string[] args)
    {
        new App().Run();
    }
}

이렇게 말고도 Application 클래스를 직접 만들어서 바로 시작개체로 등록할 순 없는지 궁금합니다!
public class App : CustomApplication
{
    ...
}

읽어주셔서 감사합니다. :smile:

1개의 좋아요

VS에서 시작 개체는 Man() 진입 메서드가 포함되어 있는 클래스가 자동으로 표시 되도록 되어 있습니다.

WPF의 BCL인 System.Windows.Application클래스에는 내부에 Main()의 진입 메서드가 구현 되어 있기에
기본적으로 VS 프로젝트 속성에서 시작개체에 표시 되는 것 입니다.

해당 항목에 추가적으로 커스텀한 시작개체를 등록하고 싶으시다면 마찬가지로 Main() 진입 메서드가 구현되어 있는 커스텀 클래스를 만드시고 빌드하시면 표시 되는 것을 확인 할 수 있을 것입니다.

image

Main() 진입 메서드를 직접 구현했을 경우 메인 리소스를 로드해주는 Application을 구동 시켜주면 됩니다.
해당 부분이 바로

App app = new App(); // 여기서 자체적으로 구현한 Application으로 사용해도 됨.
app.InitializeComponent(); // 빌드시 App.g.i.cs가 생성되고 해당 코드에서 xaml이 빌드된 baml을 동적로드함
app.Run();
입니다.

참고로 App.xaml에 StartupUri이 설정 되면 Application에서 해당 뷰로 자동 실행 되고
StartupUri 설정이 없다면 OnStartup에서 자체적으로 시작 뷰를 수동으로 띄울 수 있습니다.

4개의 좋아요

@aroooong 앗 꼼꼼한 설명 감사드립니다. :smile:

2개의 좋아요

오…이런것도 있군요. 신기방기합니다.

2개의 좋아요