Настройка проектов Windows
Добавление новых проектов Windows в существующее Xamarin.Forms решение
Старые Xamarin.Forms решения (или созданные в macOS) не будут иметь проекты приложений универсальная платформа Windows (UWP). Поэтому необходимо вручную добавить проект UWP для создания приложения Windows 10 (UWP).
Добавление приложения универсальная платформа Windows
Visual Studio 2019 в Windows 10 рекомендуется создавать приложения UWP. Дополнительные сведения о универсальная платформа Windows см. в универсальная платформа Windows.
UWP доступна в Xamarin.Forms версии 2.1 и более поздних версиях, а Xamarin.Forms.Карты поддерживается в Xamarin.Forms версии 2.2 и более поздних версиях.
Ознакомьтесь с разделом по устранению неполадок, чтобы ознакомиться с полезными советами.
Следуйте этим инструкциям, чтобы добавить приложение UWP, которое будет работать на телефонах, планшетах и настольных компьютерах Windows 10:
1. Щелкните правой кнопкой мыши решение и выберите "Добавить > новый проект" и добавьте пустой проект приложения (универсального приложения Windows):
2. В диалоговом окне "Новый универсальная платформа Windows проект" выберите минимальные и целевые версии Windows 10, в которые будет работать приложение:
3. Щелкните правой кнопкой мыши проект UWP и выберите "Управление пакетами NuGet..." и добавьте Xamarin.Forms этот пакет. Убедитесь, что другие проекты в решении также обновляются до той же версии Xamarin.Forms пакета.
4. Убедитесь, что новый проект UWP будет построен в окне Build > Configuration Manager (это, вероятно, не произошло по умолчанию). Установите флажки "Сборка и развертывание" для универсального проекта:
5. Щелкните проект правой кнопкой мыши и выберите "Добавить > ссылку " и создайте ссылку на Xamarin.Forms проект приложения (.NET Standard или общий проект).
6. В проекте UWP измените App.xaml.cs , чтобы включить Init
вызов метода в OnLaunched
метод около строки 52:
// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter
7. В проекте UWP измените MainPage.xaml , удалив Grid
содержащийся в элементе 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 добавьте LoadApplication
вызов в MainPage
конструктор, чтобы запустить Xamarin.Forms приложение:
// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());
Примечание.
Аргументом LoadApplication
метода является экземпляр, определенный Xamarin.Forms.Application
в проекте .NET standard.
12. Добавьте все локальные ресурсы (например, файлы изображений) из существующих проектов платформы, необходимых.
Устранение неполадок
"Исключение целевого вызова" при использовании "Компиляция с цепочкой инструментов .NET Native"
Если приложение UWP ссылается на несколько сборок (например, сторонние библиотеки управления или само приложение разделено на несколько библиотек), Xamarin.Forms может не удается загрузить объекты из этих сборок (например, пользовательские отрисовщики).
Это может произойти при использовании цепочки инструментов Компиляции с .NET Native, которая является вариантом для приложений UWP в окне ">Общие свойства" > проекта.
Это можно исправить с помощью перегрузки Forms.Init
вызова для UWP в App.xaml.cs , как показано в приведенном ниже коде (следует заменить 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.
Службы зависимостей и собственная компиляция .NET
Сборки выпуска с помощью компиляции .NET Native могут не разрешать службы зависимостей, определенные вне основного исполняемого файла приложения (например, в отдельном проекте или библиотеке).
DependencyService.Register<T>()
Используйте метод, чтобы вручную зарегистрировать классы служб зависимостей. В соответствии с приведенным выше примером добавьте метод регистрации следующим образом:
Xamarin.Forms.Forms.Init(e, assembliesToInclude);
Xamarin.Forms.DependencyService.Register<ClassInOtherAssembly>(); // add this