首页 > 解决方案 > VS2019 + Xamarin.Forms = UWP/EXE 掉线了?

问题描述

如何让 UWP 回到 Xamarin.Forms 跨平台创建中以准备好模板?

在浏览了发行说明、使用 VS2019 的 UI 和几个小时的网络搜索之后,我只发现其他人在预览版中发布了有关该问题的帖子。有人说 UWP 永远消失了,有人说它只是默认不包括在内(因此微软可以吹嘘安装如何从 23GB 变为 8GB 或类似的东西) - 但没有帮助如何重新启用它,或添加将其添加到项目创建向导中(除了添加一个空白的 UWP 项目,没有 iOS/Android 项目中的所有代码)。

<Project Sdk="Microsoft.NET.Sdk">
// the code is not the problem here,
// getting TO the code is the problem
</Project>

预期:在 VS2017 中,Xamarin.Forms 跨平台默认提供 iOS + Android + UWP 模板。

实际:Visual Studio 2019 似乎已从 Xamarin.Forms 跨平台项目创建中删除了 UWP 模板。

标签: templatesxamarin.formsuwpvisual-studio-2019

解决方案


4 月 9 日更新:发布了 2019 年的新版本,再次恢复了 UWP 模板

UWP模板从VS2019中删除是正确的,我不知道它背后的原因,但我们必须处理它。但是,有一个页面可以让您逐步完成该过程。在 Visual Studio for Mac 中创建的项目已经存在了一段时间,这些项目也不包括 UWP 模板。完整的描述可以在这里找到:https ://docs.microsoft.com/en-us/xamarin/xamarin-forms/platform/windows/installation/取自此页面:

首先,右键单击解决方案并选择Add > New Project...并添加一个Blank App (Universal Windows)项目:

选择空白应用模板

然后,选择最低和目标 UWP 版本。

右键单击 UWP 项目并选择Manage NuGet Packages...并添加Xamarin.Forms包。确保解决方案中的其他项目也更新到相同版本的 Xamarin.Forms 包。

此外,确保将在Build > Configuration Manager 窗口中构建新的 UWP 项目(默认情况下这可能不会发生)。勾选通用项目的构建部署框:

构建配置

右键单击 UWP 项目并选择添加 > 引用并创建对 Xamarin.Forms 应用程序项目(.NET Standard 或共享项目)的引用。

在 UWP 项目中,编辑以在第 52 行附近App.xaml.cs的方法中包含Init方法调用:OnLaunched

// under this line
rootFrame.NavigationFailed += OnNavigationFailed;
// add this line
Xamarin.Forms.Forms.Init (e); // requires the `e` parameter

在 UWP 项目中,MainPage.xaml通过删除Grid包含在Page元素中的元素进行编辑。然后在 中MainPage.xaml,为 添加一个新的 xmlns 条目Xamarin.Forms.Platform.UWP,如下所示:xmlns:forms="using:Xamarin.Forms.Platform.UWP"

MainPage.xaml中,更改 root <Page element to <forms:WindowsPage,如下所示:

<forms:WindowsPage
...
   xmlns:forms="using:Xamarin.Forms.Platform.UWP"
...
</forms:WindowsPage>

在 UWP 项目中,编辑MainPage.xaml.cs以删除:类名的继承说明符(因为由于上一步中所做的更改,Page它现在将继承自)WindowsPage

public sealed partial class MainPage // REMOVE ": Page"

在构造函数中MainPage.xaml.cs添加LoadApplication调用MainPage以启动 Xamarin.Forms 应用:

// below this existing line
this.InitializeComponent();
// add this line
LoadApplication(new YOUR_NAMESPACE.App());

从所需的现有平台项目中添加任何本地资源(例如图像文件)。

现在它应该像以前一样工作。我知道,对于以前刚刚工作的东西来说,经历它是一件麻烦事。对此感到抱歉,但这也应该让你到达那里。


推荐阅读