我有一个xamarin PCL,可以在x86调试模式下构建。当我将其切换到发布模式(x86或x64)或x64调试时,我得到运行时异常。它可能与
有关但我不知道我正在使用的其他组件。我该怎么说?
我的电脑是x64。当我在调试或发布中运行x64时,我得到了
MyApp.Interop.dll中的异常“System.NotImplementedException”。附加信息Arg_NotImplementedException。
在进入构造函数App()之前。对构造函数的调用如下:
LoadApplication(new MyApp.App());
当我构建x86时,我会更进一步。它进入MyAppConstructor并调用xaml构造函数并提供异常:
System.Private.Reflection.Core.dll中的System.Reflection.MissingMetadataException AdditionalInfo:Arg_InvokeMethodMissingMetadata,System.EventHandler。有关详细信息,请访问http://go.microsoft.com/fwlink/?LinkId=623485
所以它看起来像我缺少的Xaml程序集。如何找出需要添加的程序集?
我把它放回Debug,但把它变成了“使用Native Compiler”,这样我就可以获得有关异常的更多细节:
86: 附加信息:无法在类型“System.EventHandler”上创建委托,因为它缺少Invoke方法的元数据。有关详情,请访问http://go.microsoft.com/fwlink/?LinkID=616867
64: Xamarin.Forms.Platform.UAP.dll中出现“System.NotImplementedException”类型的异常,但未在用户代码中处理
附加信息:未实施方法或操作。
更新:我猜Xamarin不支持x64因为没有移动产品有x64处理器?仍然留下了x86版本的问题。 我尝试在Universal App.xaml.cs中添加以下程序集
List<Assembly> assembliesToInclude = new List<Assembly>();
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支持环球权利吗?
答案 0 :(得分:9)
我添加了一个Directives文件。添加.rd.xml结尾的文件。我的是MyApp.rd.xml。然后包括异常所缺少的类型。我的是System.EventHandler。这是我的代码(你可能不需要另外两个)。
<?xml version="1.0" encoding="utf-8"?>
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
<Application>
<Type Name="MyApp.MyAppMainPage" Dynamic="Required All" />
<Type Name="System.EventHandler" Dynamic="Required All" />
<Namespace Name="System.Private.Reflection.Core" Serialize="Required All" />
</Application>
</Directives>
我想在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仍然破碎。