SkiaSharp无效的强制转换异常

Lit*_*nny 3 xamarin.android xamarin xamarin.forms skiasharp

接收InvalidCastExceptionin LoadApplication(new App());.我在PCL和Android中添加了SkiaSharp和SkiaSharp.Views.Forms.它还自动将SkiaSharp.Views包添加到Android项目中.

我删除了所有复杂的代码,并将此部分保留在我的XAML文件中

<ContentView 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"     
    x:Class="SkiaSharpRemote.MediaControlView">
    <ContentView.Content>
        <!--<skia:SKCanvasView
            x:Name="canvas"
            VerticalOptions="Fill"
            HorizontalOptions="Fill"
            PaintSurface="Canvas_PaintSurface">
        </skia:SKCanvasView>-->
    </ContentView.Content>
</ContentView>
Run Code Online (Sandbox Code Playgroud)

在我注释掉该skCanvasView行之后加载了该应用.如果我取消注释它,则抛出以下异常.

at(wrapper castclass)System.Object:__ castclass_with_cache(object,intptr,intptr)at Xamarin.Forms.Registrar 1[TRegistrable].GetHandler (System.Type type) [0x0001b] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Core\Registrar.cs:24 at Xamarin.Forms.Registrar1 [TRegistrable] .GetHandler [TOut](System.Type type)[0x00000] in C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Core\Registrar.cs:29位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform中的Xamarin.Forms.Platform.Android.Platform.CreateRenderer(Xamarin.Forms.VisualElement元素)[0x00006] .Android\Platform.cs:288 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild(Xamarin.Forms.VisualElement view,Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer,Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren)[0x00023]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement(Xamarin.Forms.VisualElement oldElement) ,Xamarin.Forms.VisualElement newElement)[0x00104]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin中 .Forms.Platform.Android\VisualElementPackager.cs:207,位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs中的Xamarin.Forms.Platform.Android.VisualElementPackager.Load()[0x00000] :58,Xamarin.Forms.Platform.Android.VisualElementRenderer 1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:337 at Xamarin.Forms.Platform.Android.VisualElementRenderer1 [TElement] .SetElement(TElement element)[0x00111]位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:196 at Xamarin .Forms.Platform.Android.VisualElementRenderer 1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement element) [0x00027] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:129 at Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement element) [0x0001f] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:289 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild (Xamarin.Forms.VisualElement view, Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer, Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren) [0x00023] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement (Xamarin.Forms.VisualElement oldElement, Xamarin.Forms.VisualElement newElement) [0x00104] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207 at Xamarin.Forms.Platform.Android.VisualElementPackager.Load () [0x00000] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:58 at Xamarin.Forms.Platform.Android.VisualElementRenderer1 [TElement] .SetPackager(Xamarin.Forms.Platform.Android.VisualElementPackager packager)[0x00007]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs :337:Xamarin.Forms.Platform.Android.VisualElementRenderer 1[TElement].SetElement (TElement element) [0x00111] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:196 at Xamarin.Forms.Platform.Android.VisualElementRenderer1 [TElement] .Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement(Xamarin.Forms.VisualElement element)[0x00027]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin .Forms.Platform.Android\VisualElementRenderer.cs:129在Xamarin.Forms.Platform.Andro id.Platform.CreateRenderer(Xamarin.Forms.VisualElement元素)[0x0001f]位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:289,位于Xamarin.Forms.Platform.Android.VisualElementPackager. AddChild(Xamarin.Forms.VisualElement视图,Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer,Xamarin.Forms.Platform.Android.RendererPool池,System.Boolean sameChildren)[0x00023]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin中.Forms.Platform.Android\VisualElementPackager.cs:74在C:\ BuildAgent2\work \的Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement(Xamarin.Forms.VisualElement oldElement,Xamarin.Forms.VisualElement newElement)[0x00104]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android \中的Xamarin.Forms.Platform.Android.VisualElementPackager.Load()[0x00000]中的ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:207 VisualElementPackager.cs:58 at Xamarin.Forms.Platform.Android.VisualElementRende RER 1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:337 at Xamarin.Forms.Platform.Android.VisualElementRenderer1 [TElement] .SetElement(TElement元件)[0x00111]在C:\ BuildAgent2 \工作\ ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:196在Xamarin.Forms.Platform.Android.VisualElementRenderer`1 [在Xamarin的C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:129中的.Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement(Xamarin.Forms.VisualElement element)[0x00027] Xamarin.Forms.Platform中的.Forms.Platform.Android.Platform.CreateRenderer(Xamarin.Forms.VisualElement元素)[0x0001f]位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\Platform.cs:289 .Android.AppCompat.Platform.AddChild(Xamarin.Forms.Page页面,System.Boolean布局)[0x00015]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\AppCompat\Platform.cs:250 at C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Form中的Xamarin.Forms.Platform.Android.AppCompat.Platform.SetPage(Xamarin.Forms.Page newRoot)[0x00089] s.Platform.Android\AppCompat\Platform.cs:239位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms中的Xamarin.Forms.Platform.Android.FormsAppCompatActivity.InternalSetPage(Xamarin.Forms.Page页面)[0x0009b].在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity中的Xamarin.Forms.Platform.Android.FormsAppCompatActivity.SetMainPage()[0x00000]中的Platform.Android\AppCompat\FormsAppCompatActivity.cs:374. cs:444 at Xamarin.Forms.Platform.Android.FormsAppCompatActivity.LoadApplication(Xamarin.Forms.Application application)[0x00183]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\AppCompat\FormsAppCompatActivity.cs:在Android.Support.V4的/Users/simonlam/Desktop/Samples/Xamarin/SkiaRemote/SkiaSharpRemote/Droid/MainActivity.cs:25中的SkiaSharpRemote.Droid.MainActivity.OnCreate(Android.OS.Bundle包)[0x0002e]中的135. App.FragmentActivity.n_OnCreate_Landroid_os_Bundle_(System.IntPtr jnienv,System.IntPtr native__this,Syst em.IntPtr native_savedInstanceState)[0x00011] in <27c17fe440cf491ba8255bcefade6e02>:0 at(wrapper dynamic-method)System.Object:a050e315-9322-4894-b9ce-8db88ad775ab(intptr,intptr,intptr)

错误并没有告诉我太多,我只看到这是某种投射错误.

我还有另一个使用skiasharp的项目.我基本上遵循相同的路线,但对于这个项目它没有用.

Ton*_*oei 5

请执行下列操作:

  1. 将SkiaSharp.Views.Forms NuGet添加到所有项目中!(PCL/Shared,Android和iOS项目.)
  2. 然后清理并重建您的解决方案.

这将解决您的问题.