Wpf 프로젝트에서 App.xaml를 다른 디렉토리로 옮길 수 있을까요?

먼저 Wpf를 이제 막 시작한 초보라서 상식적인 질문일 수도 있는 점 양해부탁드립니다.
C#을 사용하는 수준은 기본적인 랭귀지만 알고 있습니다.

Visual Studio를 통해 .net 6.0의 Wpf를 만들면 해당 프로젝트 디렉토리에 생성되는 소스는 다음과 같습니다.

App.xaml
App.xaml.cs
AssemblyInfo.cs
MainWindow.xaml
MainWindow.xaml.cs

저는 보통 프로젝트를 진행할 때 소스 코드들은 한 디렉토리에 몰아서 넣는데 App.xaml과 App.xaml.cs를 다른 디렉토리에 넣으니 엔트리 포인트를 못 찾는 문제가 생기더라구요.

그래서 C# 빈 프로젝트를 만들어서 엔트리 포인트를 포함하는 소스 코드를 다른 디렉토리에 넣었는데 동작을 해서 뭐가 문제인지 잘 모르겠습니다.

  1. Application을 상속하는 클래스의 소스코드는 반드시 프로젝트 루트 디렉토리에 위치해야 하는지?
  2. xaml과 소스코드를 따로 둘 수 있는 방법은 있을까요?

마지막으로 글을 읽어 주셔서 감사합니다.

3개의 좋아요

기본 빌드 작업은 App.xaml 파일이 프로젝트 루트 디렉터리에 있어야 하는 것 같네요.

빌드 설정을 바꾸는 법은 모르겠지만 진입점 메서드를 따로 만들어 주는 걸로도 해결할 수 있습니다.

  1. App.xaml 파일에서 x:Class의 경로를 재조정하고, StartupUri 속성값을 삭제합니다.
<Application x:Class="WpfApp3.Core.App" // App 클래스가 있는 올바른 네임스페이스로 수정
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfApp3.Core"
             StartupUri="MainWindow.xaml" // 삭제>
</Application>
  1. App.xaml.cs에서 OnStartUp 메서드를 재정의하고, Window 객체를 생성해 ShowDialog하는 코드를 추가합니다.
public partial class App : Application
{
	protected override void OnStartup(StartupEventArgs e)
	{
		base.OnStartup(e);
		MainWindow win = new();
		win.ShowDialog();
	}
}

  1. 클래스 파일을 추가한 후, 정적 Main 메서드를 다음과 같이 구현합니다. 클래스의 이름은 상관없지만 메서드 이름은 반드시 Main이어야 하며, System.STAThreadAttribute 특성을 추가해야 합니다.
public class MyClass
{
	[STAThread]
	public static void Main(string[] args)
	{
		App app = new();
		app.Run();
	}
}
6개의 좋아요

감사합니다. 많은 도움이 되었습니다. :slight_smile:

3개의 좋아요