当前位置:  开发笔记 > 编程语言 > 正文

为什么我的Xamarin PCL在为Universal App构建版本时会抛出运行时异常?

如何解决《为什么我的XamarinPCL在为UniversalApp构建版本时会抛出运行时异常?》经验,为你挑选了1个好方法。

我有一个xamarin PCL,可以在x86调试模式下构建.当我将其切换到发布模式(x86或x64)或x64调试时,我得到运行时异常.它可能与...有关

https://forums.xamarin.com/discussion/57810/issue-with-xamarin-forms-in-windows-uwp-app-compiled-in-the-release-mode

但我不知道我正在使用的其他组件.我该怎么说?

我的电脑是x64.当我在调试或发布中运行x64时,我得到了

MyApp.Interop.dll中的"System.NotImplementedException"异常.附加信息Arg_NotImplementedException.

在进入构造函数App()之前.对构造函数的调用如下:

LoadApplication(new MyApp.App());

当我构建x86时,我会更进一步.它进入MyAppConstructor并调用xaml构造函数并给出异常:

System.Private.Reflection.Core.dll AdditionalInfo中的System.Reflection.MissingMetadataException:Arg_InvokeMethodMissingMetadata,System.EventHandler.有关详细信息,请访问http://go.microsoft.com/fwlink/?LinkId=623485

所以它看起来像我缺少的Xaml程序集.如何找出我需要添加的程序集?

我把它放回Debug,但把它转为"使用Native Compiler",这样我就可以获得有关异常的更多细节:

x86:附加信息:无法在类型"System.EventHandler"上创建委托,因为它缺少Invoke方法的元数据.有关详细信息,请访问http://go.microsoft.com/fwlink/?LinkID=616867

x64:Xamarin.Forms.Platform.UAP.dll中出现"System.NotImplementedException"类型的异常,但未在用户代码中处理

附加信息:未实现方法或操作.

更新:我猜Xamain不支持x64,因为没有移动产品有x64处理器?仍然留下了x86版本的问题.我尝试在Universal App.xaml.cs中添加以下程序集

  List assembliesToInclude = new List();
  assembliesToInclude.Add(typeof(MyApp.MyAppMainPage).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.ImageSource).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.StackLayout).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Label).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Button).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.FormattedString).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Span).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.Image).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.ScrollView).GetTypeInfo().Assembly);
  assembliesToInclude.Add(typeof(Xamarin.Forms.WebView).GetTypeInfo().Assembly);
  // add this line
  Xamarin.Forms.Forms.Init(e,assembliesToInclude); // requires the `e` parameter

其中MyAppMainPage是xaml页面,我尝试在我的PCL中加载,其余的是页面由UI组成的元素.

我现在看到为x86抛出此异常:

System.Private.Interop.dll中出现'System.PlatformNotSupportedException'异常抛出:System.Private.Threading.dll中出现'System.AggregateException'异常抛出:System.Private.Reflection.Core.dll中的'System.Reflection.MissingMetadataException'

为什么不支持该平台?Xamarin支持环球权利吗?



1> Seth Kitchen..:

我添加了一个Directives文件.添加.rd.xml结尾的文件.我的是MyApp.rd.xml.然后包括异常所缺少的类型.我的是System.EventHandler.这是我的代码(你可能不需要另外两个).




   
   
  

 

我想在Universal Apps for Xamarin中,您需要在加载嵌入式资源时包含程序集.我不得不改变

ImageSource.FromResource("MyApp.Images.Sign.jpg");

var assembly = typeof(MyAppMainPage).GetTypeInfo().Assembly;
ImageSource.FromResource("MyApp.Images.Sign.jpg",assembly);

您可以查看您拥有的资源

foreach (var res in assembly.GetManifestResourceNames())
  System.Diagnostics.Debug.WriteLine("found resource: " + res);

x64仍然坏了.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有