티스토리 뷰
Uno Platform이 빠른 속도로 변화하고 있는데, Prism 라이브러리와 연결된 Project Template의 수정이 느리게 진행되다보니, 새로 생성되는 프로젝트에 오류가 발생하는 것 같습니다.
저도 정확히 오류가 발생하는 이유는 모르지만 해결 방법을 찾아서 포스팅을 합니다. 앞으로도 프로젝트를 새로 만드실 때 오류를 해결하는데 도움이 되면 좋겠습니다. 다만, ios, mac은 빌드를 할 수 없어서 수정하지 못했으니 참고 부탁드립니다.
0. 현재 환경
Uno Platform Solution Templates : Version : 3.10.7.7 (9/14/2021)
Prism Template Pack : Version 2.3.0 (1/5/2021)
1. Prism Uno 프로젝트 생성
Prism Blank App (Uno Platform)을 선택합니다.
Project name : KakiPrismUnoMigration
Create project
iOS, macOS 프로젝트를 Unload시켜 줍니다.
Build -> Configuration Manager... 메뉴 클릭해서 아래와 같이 수정합니다. UWP Build, Deploy 둘다 체크
F6을 눌러 빌드 합니다.
엄청난 오류가 발생합니다. 너무 많은 오류라 파일로 첨부 합니다.
이 프로젝트를 실행 시키기 위해서는 Uno Platform 프로젝트를 하나 만들어야 합니다.
2. Uno Platform 프로젝트 생성
uno platform으로 검색하고 Multi-Platform App(Uno Platform)을 선택하고 Next를 클릭합니다.
Blank.Uno 입력 후 Create
여기서 필요한 프로젝트만 남기고 나머지는 unload 시킵니다.
Build -> Configuration Manager... 메뉴 클릭해서 아래와 같이 수정합니다. UWP Build, Deploy 둘다 체크하고 실행 프로젝트를 UWP로 선택한 후에 실행 합니다.
아래와 같이 나오면 정상적으로 실행이 된것입니다. 이제 이 프로젝트와 KakiPrismUnoMigration 프로젝트를 비교하면서 마이그레이션을 진행하면 됩니다.
3. 마이그레이션
1) KakiPrismUnoMigration.Core.csproj를 수정합니다.
<xml ../>삭제, 버전 넘버 수정
프로젝트 폴더에서 obj, bin 폴더를 삭제하고, Build를 실행하면 빌드가 됩니다.
<Project Sdk="MSBuild.Sdk.Extras/3.0.23">
<PropertyGroup>
<TargetFrameworks>uap10.0.18362;netstandard2.0;xamarinios10;xamarinmac20;MonoAndroid11.0;monoandroid10.0</TargetFrameworks>
<!-- Ensures the .xr.xml files are generated in a proper layout folder -->
<GenerateLibraryLayout>true</GenerateLibraryLayout>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Prism.Uno" Version="8.0.0.1909" />
<PackageReference Include="Uno.UI" Version="3.10.7" />
</ItemGroup>
<ItemGroup>
<Page Include="**\*.xaml" Exclude="bin\**\*.xaml;obj\**\*.xaml" />
<Compile Update="**\*.xaml.cs">
<DependentUpon>%(Filename)</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<UpToDateCheckInput Include="**\*.xaml" Exclude="bin\**\*.xaml;obj\**\*.xaml" />
</ItemGroup>
</Project>
2. KakiPrismUnoMigration.UWP.csproj을 수정합니다.
수정을 위해서는 프로젝트를 Unload해야 합니다.
각 버전을 수정하고, 프로젝트를 다시 Reload한 후에 Build를 실행하고, F5키를 눌러 실행합니다.
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
<!--
If, in the same solution, you are referencing a project that uses https://github.com/onovotny/MSBuildSdkExtras,
you need to make sure that the version provided here matches https://github.com/onovotny/MSBuildSdkExtras/blob/master/Source/MSBuild.Sdk.Extras/DefaultItems/ImplicitPackages.targets#L11.
This is not an issue when libraries are referenced through nuget packages. See https://github.com/unoplatform/uno/issues/446 for more details.
-->
<Version>6.2.11</Version>
</PackageReference>
<PackageReference Include="Prism.DryIoc.Uno" Version="8.1.97" />
<PackageReference Include="Uno.Core" Version="2.4.0" />
<PackageReference Include="Uno.UI" Version="3.10.7" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.1" />
</ItemGroup>
3. KakiPrismUnoMigration.Droid.csproj
아래 버전들로 수정합니다.
<ItemGroup>
<PackageReference Include="Prism.DryIoc.Uno" Version="8.1.97" />
<PackageReference Include="Uno.UI" Version="3.10.7" />
<PackageReference Include="Uno.UI.RemoteControl" Version="3.10.7" Condition="'$(Configuration)'=='Debug'" />
<PackageReference Include="Uno.UniversalImageLoader" Version="1.9.33" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.1" />
</ItemGroup>
아래 코드는 프로젝트 파일 맨 아래 추가합니다. 없어도 빌드할 때 오류가 나지는 않는데.. Uno 프로젝트에 추가되어있길래 추가했습니다.
<Target Name="Issue3897Workaround" Condition=" '$(ManagedDesignTimeBuild)' == 'True' " AfterTargets="_RemoveLegacyDesigner">
<!-- See https://github.com/unoplatform/uno/issues/3897 and https://github.com/xamarin/xamarin-android/issues/5069 for more details -->
<ItemGroup>
<Compile Remove="$(_AndroidResourceDesignerFile)" />
</ItemGroup>
</Target>
4. KakiPrismUnoMigration.Wasm.csproj 수정
닷넷5.0으로 수정, 리퍼런스 2개 추가, 버전 수정 후 빌드를 하면 실드가 성공합니다.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<NoWarn>NU1701</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<MonoRuntimeDebuggerEnabled>true</MonoRuntimeDebuggerEnabled>
<DefineConstants>$(DefineConstants);TRACE;DEBUG</DefineConstants>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<Content Include="Assets\SplashScreen.png" />
</ItemGroup>
<ItemGroup>
<UpToDateCheckInput Include="..\KakiPrismUnoMigration.Shared\**\*.xaml" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="WasmCSS\Fonts.css" />
<EmbeddedResource Include="WasmScripts\AppManifest.js" />
</ItemGroup>
<ItemGroup>
<LinkerDescriptor Include="LinkerConfig.xml" />
</ItemGroup>
<ItemGroup>
<!--
This item group is required by the project template because of the
new SDK-Style project, otherwise some files are not added automatically.
You can safely remove this ItemGroup completely.
-->
<None Include="Program.cs" />
<None Include="LinkerConfig.xml" />
<None Include="wwwroot\web.config" />
</ItemGroup>
<ItemGroup>
<!-- Note that for WebAssembly version 1.1.1 of the console logger required -->
<PackageReference Include="Microsoft.Windows.Compatibility" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Filter" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="5.0.0" />
<PackageReference Include="Uno.Extensions.Logging.WebAssembly.Console" Version="1.0.1" />
<PackageReference Include="Prism.DryIoc.Uno" Version="8.1.97" />
<PackageReference Include="Uno.UI.WebAssembly" Version="3.10.7" />
<PackageReference Include="Uno.UI.RemoteControl" Version="3.10.7" Condition="'$(Configuration)'=='Debug'" />
<PackageReference Include="Uno.Wasm.Bootstrap" Version="2.1.0" />
<PackageReference Include="Uno.Wasm.Bootstrap.DevServer" Version="2.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\KakiPrismUnoMigration.Core\KakiPrismUnoMigration.Core.csproj" />
</ItemGroup>
<Import Project="..\..\KakiPrismUnoMigration.Shared\KakiPrismUnoMigration.Shared.projitems" Label="Shared" Condition="Exists('..\..\KakiPrismUnoMigration.Shared\KakiPrismUnoMigration.Shared.projitems')" />
</Project>
실행 결과...를 보면 뭔가 허전합니다. 무엇 때문인지 아시겠어요?
답은 Main Page라는 글씨가 없는 것입니다. 음..Main Page가 바인딩되어있는 글씨인데.. 이 문제 해결은 LinkerConfig.xml에 Core 프로젝트 이름을 추가하는 것으로 해결됩니다.
<linker>
<assembly fullname="KakiPrismUnoMigration.Wasm" />
<assembly fullname="Uno.UI" />
<assembly fullname="KakiPrismUnoMigration.Core" />
<assembly fullname="System.Core">
<!-- This is required by JSon.NET and any expression.Compile caller -->
<type fullname="System.Linq.Expressions*" />
</assembly>
</linker>
고치는 김에 처음 SplashScreen 배경색도 투명하게 WasmScripts\AppManifest.js 파일을 수정합니다.
var UnoAppManifest = {
splashScreenImage: "Assets/SplashScreen.png",
splashScreenColor: "#fff",
displayName: "KakiPrismUnoMigration"
}
최종 실행화면 입니다.
'Uno Platform' 카테고리의 다른 글
목록 데이터를 ListView와 ComboBox에서 사용하기 Part1 (0) | 2021.10.08 |
---|---|
Unexpected 'NONE' in parse rule 'Element ::= . EmptyElement | ( StartElement ElementBody ).' (0) | 2021.10.05 |
Uno Platform 정식 책 출판 (0) | 2021.09.15 |
무료 eBook - Uno Platform Succinctly (0) | 2021.09.14 |
Uno Platform 3.6: WinUI 3, WCT 7.0 support, Date and File pickers, and more (0) | 2021.04.02 |
- Total
- Today
- Yesterday
- #Windows Template Studio
- ComboBox
- Cross-platform
- PRISM
- UWP
- ef core
- C#
- uno platform
- LINQ
- Build 2016
- #prism
- Windows 10
- WPF
- Microsoft
- visual studio 2019
- #uwp
- kiosk
- .net 5.0
- #MVVM
- Visual Studio 2022
- Always Encrypted
- XAML
- dotNETconf
- MVVM
- IOT
- Behavior
- windows 11
- .net
- Bot Framework
- uno-platform
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |