다음을 통해 공유


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) 프로젝트를 추가합니다.

Add New Project Dialog

2 . 새 유니버설 Windows 플랫폼 프로젝트 대화 상자에서 앱이 실행될 Windows 10의 최소 및 대상 버전을 선택합니다.

New Universal Windows Platform Project Dialog

3. UWP 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택하고 패키지를 추가 Xamarin.Forms 합니다. 솔루션의 다른 프로젝트도 동일한 버전의 패키지로 업데이트되었는지 확인합니다 Xamarin.Forms .

4. 새 UWP 프로젝트가 빌드 > 구성 관리자 창에 빌드되는지 확인합니다(기본적으로 발생하지 않을 수 있음). 유니버설 프로젝트에 대한 빌드배포 상자를 선택합니다.

Configuration Manager Window

5. 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가 > 를 선택하고 애플리케이션 프로젝트(.NET Standard 또는 공유 프로젝트)에 대한 참조 Xamarin.Forms 를 만듭니다.

Reference Manager Dialog

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