MAUI에서 핫 다시 로드가 되지 않습니다.

MAUI를 이용하여 윈도우 앱을 빌드하여서 실행 한 뒤
XAML, CSS, razor 등의 요소를 고쳐 다시 로드를 하려고 하면
다음과 같은 메세지를 출력하며 다시 로드 되지 않습니다.

image

빌드 전용 에러에서는 다른 에러를 찾을 수 없고
오직 IntelliSense에서 오류를 찾을 수 있었습니다.
내용은 다음과 같습니다.


(빨간 줄은 프로젝트 이름 입니다.)

현재 윈도우로 빌드해서 실행하고 있음에도
IntelliSense는 Android 빌드에서의 오류를 표시하고 있습니다.
문제 표시 안 함 처리를 해버리면 편하게 해결 할 수 있겠지만
혹시나 다른 방법이 있을까 해서 여쭤봅니다.

좋아요 2

실행 가능한 소스코드를 공유 해주시겠어요?

좋아요 1

ChanMin0334/MAUI-Hotload (github.com)

기본적인 Blazor를 이용한 MAUI 개발 템플릿을 사용하였고
추가한 코드로는

MauiProgram.csCreateMauiApp 안에

#if WINDOWS
        builder.ConfigureLifecycleEvents(events =>
        {
            events.AddWindows(wndLifeCycleBuilder =>
            {
                wndLifeCycleBuilder.OnWindowCreated(window =>
                {
                    IntPtr nativeWindowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
                    WindowId win32WindowsId = Win32Interop.GetWindowIdFromWindow(nativeWindowHandle);
                    AppWindow winuiAppWindow = AppWindow.GetFromWindowId(win32WindowsId);

                    const int width = 1700;
                    const int height = 1000;
                    winuiAppWindow.MoveAndResize(new RectInt32(1920 / 2 - width / 2, 1080 / 2 - height / 2, width, height));
                });
            });
        });
#endif

를 추가하였습니다.

소스 공유는 처음이라 문제가 있을 수도 있을 것 같습니다.
만약 문제가 있다면 말씀해주시면 감사하겠습니다. :smile:

좋아요 2

if로 환경에 맞을때만 들어가게 되고
애초에 윈도우 빌드로 했고
문제 될만한 점이 없는데 Intellisense에서는 불만인가보네요…

혹시나 using 할 때에도 환경을 신경 써줘야 할까요?

좋아요 1

네 그렇죠. using#if 분기의 대상이 되어야 합니다. (전처리니까요)

  1. 핫 다시 로드가 되지 않은 이유는 컴파일 오류 때문입니다.
  2. 컴파일 오류가 발생한 이유는 using이 제대로 되지 않았기 때문인 것 같네요. 저는 using 문제를 없애기 위해 다음 처럼 했습니다.
#if WINDOWS
        builder.ConfigureLifecycleEvents(events =>
        {
            events.AddWindows(wndLifeCycleBuilder =>
            {
                wndLifeCycleBuilder.OnWindowCreated(window =>
                {
                    IntPtr nativeWindowHandle = WinRT.Interop.WindowNative.GetWindowHandle(window);
                    Microsoft.UI.WindowId win32WindowsId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(nativeWindowHandle);
                    Microsoft.UI.Windowing.AppWindow winuiAppWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(win32WindowsId);

                    const int width = 1700;
                    const int height = 1000;
                    winuiAppWindow.MoveAndResize(new Windows.Graphics.RectInt32(1920 / 2 - width / 2, 1080 / 2 - height / 2, width, height));
                });
            });
        });
#endif

관련해서 타켓 플랫폼을 변경하더라도 전처리 define에 의한 편집기 동작은 반영되지 않는 것 같습니다.

Windows Machine으로 선택되어 있지만 해당 코드 블럭이 활성화 되지는 않는 것 처럼 편집기에서 동작 하네요. (실제로 실행하면 저 코드가 동작합니다.)

좋아요 3

넵 감사합니다!
앞으로는 상황을 봐서 명시적으로 적을지 using을 사용할지 고민을 하는게 좋을 것 같네요

좋아요 2