Windows 프로젝트 설정
기존 Xamarin.Forms 솔루션에 새 Windows 프로젝트 추가
이전 Xamarin.Forms 솔루션(또는 macOS에서 만든 솔루션)에는 UWP(유니버설 Windows 플랫폼) 앱 프로젝트가 없습니다. 따라서 UWP(Windows 10) 앱을 빌드하기 위해 UWP 프로젝트를 수동으로 추가해야 합니다.
유니버설 Windows 플랫폼 앱 추가
UWP 앱을 빌드하려면 Windows 10의 Visual Studio 2019를 사용하는 것이 좋습니다. 유니버설 Windows 플랫폼 대한 자세한 내용은 유니버설 Windows 플랫폼 소개를 참조하세요.
UWP는 2.1 이상에서 Xamarin.Forms 사용할 수 있으며 Xamarin.Forms.지도 2.2 이상에서 Xamarin.Forms 지원됩니다.
유용한 팁은 문제 해결 섹션을 확인하세요.
다음 지침에 따라 Windows 10 휴대폰, 태블릿 및 데스크톱에서 실행되는 UWP 앱을 추가합니다.
1 . 솔루션을 마우스 오른쪽 단추로 클릭하고 새 프로젝트 추가 > 를 선택하고 빈 앱(유니버설 Windows) 프로젝트를 추가합니다.
2 . 새 유니버설 Windows 플랫폼 프로젝트 대화 상자에서 앱이 실행될 Windows 10의 최소 및 대상 버전을 선택합니다.
3. UWP 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택하고 패키지를 추가 Xamarin.Forms 합니다. 솔루션의 다른 프로젝트도 동일한 버전의 패키지로 업데이트되었는지 확인합니다 Xamarin.Forms .
4. 새 UWP 프로젝트가 빌드 > 구성 관리자 창에 빌드되는지 확인합니다(기본적으로 발생하지 않을 수 있음). 유니버설 프로젝트에 대한 빌드 및 배포 상자를 선택합니다.
5. 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가 > 를 선택하고 애플리케이션 프로젝트(.NET Standard 또는 공유 프로젝트)에 대한 참조 Xamarin.Forms 를 만듭니다.
6. UWP 프로젝트에서 App.xaml.cs 편집하여 메서드 호출을 Init
52줄 주위의 OnLaunched
메서드 내부에 포함합니다.
// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter
7. UWP 프로젝트에서 요소 내에 포함된 항목을 제거하여 Grid
MainPage.xaml을 편집합니다Page
.
8. MainPage.xaml에서 다음 항목에 대한 새 xmlns
항목을 추가합니다Xamarin.Forms.Platform.UWP
.
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
9. MainPage.xaml에서 루트 <Page
요소를 다음과 같이 <forms:WindowsPage
변경합니다.
<forms:WindowsPage
...
xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>
10. UWP 프로젝트에서 MainPage.xaml.cs 편집하여 클래스 이름에 대한 상속 지정자를 제거 : Page
합니다(이전 단계의 변경으로 인해 상속 WindowsPage
되므로).
public sealed partial class MainPage // REMOVE ": Page"
11. MainPage.xaml.cs 생성자에 호출을 MainPage
추가하여 LoadApplication
앱을 시작합니다Xamarin.Forms.
// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());
참고 항목
메서드에 대한 LoadApplication
인수는 .NET 표준 프로젝트에 정의된 인스턴스입니다 Xamarin.Forms.Application
.
12. 필요한 기존 플랫폼 프로젝트에서 로컬 리소스(예: 이미지 파일)를 추가합니다.
문제 해결
".NET 네이티브 도구 체인으로 컴파일"을 사용하는 경우 "대상 호출 예외"
UWP 앱이 여러 어셈블리를 참조하는 경우(예: 타사 컨트롤 라이브러리 또는 앱 자체가 여러 라이브러리로 분할된 경우) Xamarin.Forms 해당 어셈블리(예: 사용자 지정 렌더러)에서 개체를 로드할 수 없습니다.
이 문제는 프로젝트의 속성 빌드 일반 창에서 UWP 앱에 대한 옵션인 .NET 네이티브 도구 체인에서 컴파일을 사용할 때 발생할 수 있습니다. > >
아래 코드와 같이 App.xaml.cs 호출의 Forms.Init
UWP별 오버로드를 사용하여 이 문제를 해결할 수 있습니다(코드가 참조하는 실제 클래스로 바꿔 ClassInOtherAssembly
야 합니다).
// You'll need to add `using System.Reflection;`
List<Assembly> assembliesToInclude = new List<Assembly>();
// Now, add in all the assemblies your app uses
assembliesToInclude.Add(typeof (ClassInOtherAssembly).GetTypeInfo().Assembly);
// Also do this for all your other 3rd party libraries
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
// replaces Xamarin.Forms.Forms.Init(e);
직접 참조 또는 NuGet을 통해 솔루션 탐색기 참조로 추가한 각 어셈블리에 대한 항목을 추가합니다.
Dependency Services 및 .NET 네이티브 컴파일
.NET 네이티브 컴파일을 사용하는 릴리스 빌드는 기본 앱 실행 파일 외부에서 정의된 종속성 서비스(예: 별도의 프로젝트 또는 라이브러리)를 해결하지 못할 수 있습니다.
이 메서드를 DependencyService.Register<T>()
사용하여 종속성 서비스 클래스를 수동으로 등록합니다. 위의 예제에 따라 다음과 같이 레지스터 메서드를 추가합니다.
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this