抛出了System.TypeInizilationException

时间:2018-01-06 23:56:17

标签: c# xamarin xamarin.forms

我使用的是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

1 个答案:

答案 0 :(得分:1)

对于Xamarin这些类型的良性问题和错误,您需要经历一个消除过程并获取尽可能多的信息来诊断问题。

<强> 1。排除环境

  • 关闭IDE(visual studio或其他)并删除所有项目的bin和obj目录
  • 如果您使用的是模拟器,请在模拟器中手动删除项目并关闭模拟器
  • 重新启动并重建,然后重新运行应用
  

我知道这似乎很迂腐,但你会经常感到惊讶   这有帮助。

<强> 2。获取尽可能多的错误信息

  • 当抛出异常时,按继续并在输出窗口中查找更多线索
  • 另外(这应该是一个明智的选择),在引发错误的行周围试一试,并在内部异常和堆栈跟踪中查找更多信息

作为例子

try
{
    InitializeComponent();

    MainPage = new NavigationPage(new AppPage());
}
catch (Exception ex)
{ // break point here and inspect ex

}
  

详细查看异常,查看所有内部异常和   当然深入了解堆栈跟踪

第3。使用页面和主App类上的编译属性检查您的Xaml。

  • 这在大多数情况下都应该出于几个原因,但是它会对你的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.XamlPages的大部分内容,直到某些内容开始起作用

  

我知道这是极端的但很快找到问题或者在   最少隔离它

  1. 阅读How to create a Minimal, Complete, and Verifiable example

    • 然后才问这个问题。包括所有相关代码,仅此而已,请在您的问题中包含完整错误。给出错误类型还不够好。错误消息(虽然有时模糊和含糊不清)和堆栈跟踪在大多数时间包括您需要(以及其他)识别问题的信息