WinUi로 퍼블리쉬하다 몸에 사리 생기겄다

WinUi에는 package라는 개념이 있다.

Features that depend on package identity include background tasks, push notifications, Windows 10 live tiles, custom context menu extensions, share targets, and other extensibility points.
Package and deploy Windows apps overview

패키지로 만들어야 윈도우즈 10 이상 버전에서 가능한 기능들이 있다. 하지만 폴더로 배포해야 할 경우들도 있다. 이러면 위의 기능들을 포기해야 한다.

빌드와 퍼블리쉬를 할 때 패키징이 기본으로 설정되어 있다. 이 설정으로 폴더 빌드를 하면 빌드된 실행 파일을 클릭해도 작동하지 않는다. 폴더로 빌드를 할 때에는 아래의 방법으로 .csproj 파일에 패키지 설정을 추가해야 한다.

project > edit project file

<Project ...>
  ...
  <PropertyGroup>
    <WindowsPackageType>None</WindowsPackageType>

다시 퍼블리쉬를 한 다음에 실행해 보면 잘 될 거다. 이렇게 설정을 바꾼 뒤에는 디버그를 할 때 app (package) 말고 app (unpackaged)로 바꿔 실행해야 디버그가 된다.

다른 문제도 있다. 퍼블리쉬 설정을 열어 보면 deployment mode가 self contained로 되어 있을 거다. 굳이 필요하지 않은 설정이다. 이걸 framwork dependent로 바꾸면 퍼블리쉬가 안 된다. 아래로 기본 설정이 되어 있는데

configuration : release | x86
target runtime : win x64

이게 프래임워크를 포함하여 퍼블리쉬할 때에는 잘 되다가 프래임워크를 빼고 할 때에는 안 된다.

The RuntimeIdentifier platform 'win-x64' and the PlatformTarget 'x86' must be compatible.

그래서 cofiguration을 x64로 바꾸로 퍼블리쉬를 하면 이번엔 또 다른 엉뚱한 오류를 낸다.

Optimizing assemblies for size is not supported for the selected publish configuration. Please ensure that you are publishing a self-contained app.

위에 말하는 최적화는 code trimming을 가리킨다. 이건 셀프 컨태인을 할 때에만 의미가 있는데 프래임 디펜던트로 설정을 한 상태에서 코드 트리밍을 켰으니 셀프 컨태인으로 제대로 설정한 뒤 하라는 오류다. 버그 같다. 프래임 디펜던트 상태에서는 코드 트리밍을 활성화할 수 없기 때문이다. 아래의 폴더를 열고 파일을 수정하여 해결한다.

App > Properties > PublishProfiles > win-x64.pubxml

<PropertyGroup>
  ...
  <PublishTrimmed>false</PublishTrimmed>
</PropertyGroup>

코드 트리밍을 하지 않겠다고 명시적으로 알리는 거다. 파일은 퍼블리쉬 창에 열려 있는 파일을 고른다.