我使用的是xamarin表单,并且它工作正常但突然我的应用程序在启动时崩溃并出现错误:抛出了System.TypeInizilationException,它显示了我的App.Xaml.cs类:
using Xamarin.Forms;
namespace MyApp
{
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new NavigationPage(new AppPage());
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
它突出显示行MainPage = new NavigationPage(new AppPage());
作为问题的根源,导致问题的原因是什么以及如何解决?
以下是AppPage类的代码:
using Xamarin.Forms;
using Microsoft.WindowsAzure.MobileServices;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MyApp
{
public partial class AppPage : ContentPage
{
public AppPage()
{
InitializeComponent();
}
protected override async void OnAppearing()
{
base.OnAppearing();
//Code
}
}
}
App.Xaml类:
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="MyApp.app">
<Application.Resources>
<!-- Application resource dictionary -->
</Application.Resources>
</Application>
内部例外:
System.PlatformNotSupportedException: The empty PCL implementation for Microsoft Azure Mobile Services was loaded. Ensure you have added nuget package to each of your platform projects.
at Microsoft.WindowsAzure.MobileServices.Platform.get_Instance () [0x00007] in <7910de25d05d49d9b3c2d648cd285e40>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceClient.GetApplicationInstallationId () [0x00004] in <7910de25d05d49d9b3c2d648cd285e40>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceClient..ctor (System.Uri mobileAppUri, System.Net.Http.HttpMessageHandler[] handlers) [0x0005f] in <7910de25d05d49d9b3c2d648cd285e40>:0
at Microsoft.WindowsAzure.MobileServices.MobileServiceClient..ctor (System.String mobileAppUri, System.Net.Http.HttpMessageHandler[] handlers) [0x00008] in <7910de25d05d49d9b3c2d648cd285e40>:0
at ChurchBuilder.ChurchBuilderPage..cctor () [0x00000] in /Users/taylordowns/Projects/ChurchBuilder/ChurchBuilder/ChurchBuilderPage.xaml.cs:24
答案 0 :(得分:1)
对于Xamarin
这些类型的良性问题和错误,您需要经历一个消除过程并获取尽可能多的信息来诊断问题。
<强> 1。排除环境
我知道这似乎很迂腐,但你会经常感到惊讶 这有帮助。
<强> 2。获取尽可能多的错误信息
作为例子
try
{
InitializeComponent();
MainPage = new NavigationPage(new AppPage());
}
catch (Exception ex)
{ // break point here and inspect ex
}
详细查看异常,查看所有内部异常和 当然深入了解堆栈跟踪
第3。使用页面和主App类上的编译属性检查您的Xaml。
属性
[XamlCompilation(XamlCompilationOptions.Compile)]
来自developer.xamarin.com : XAML Compilation
XAML可以选择使用XAML编译器(XAMLC)直接编译为中间语言(IL)。
XAMLC提供了许多好处:
- 执行XAML的编译时检查,通知用户任何错误。
- 它删除了XAML元素的一些加载和实例化时间。
- 通过不再包含.xaml文件,有助于减少最终程序集的文件大小。
默认情况下禁用XAMLC以确保向后兼容性。通过添加,可以在程序集和类级别启用它 XamlCompilation属性。
<强> 4。开始在您的违规页面和App.Xaml
中评论Xaml这也不是一件容易的事。如果在每个页面上抛出TypeInizilationException
,那么它可能是您App.Xaml
开始评论App.Xaml
和Pages
的大部分内容,直到某些内容开始起作用
我知道这是极端的但很快找到问题或者在 最少隔离它
阅读How to create a Minimal, Complete, and Verifiable example