我在我的所有项目(平台+共享)中将我的Xamarin.Forms包更新到最新版本(2.3.4.224),现在我似乎不再使用Device.OS
或TargetPlatform
枚举,因为它们已被弃用。
由于以下几行,编译器抱怨:
if (Device.OS == TargetPlatform.iOS)
_API_BASE_URI = "http://XXX.XXX.XXX.XXX";
else
_API_BASE_URI = "http://YYY.YYY.YYY.YYY";
它说:
" Device.OS已过时。改为使用RuntimePlatform"
到目前为止一直很好,现在我想解决这个问题并且我一直在尝试使用:
Debug.WriteLine(Device.RuntimePlatform);
但它引发了运行时异常。这是堆栈跟踪
04-08 14:57:34.812 I / MonoDroid(3782):UNHANDLED EXCEPTION:04-08 14:57:34.824 I / MonoDroid(3782):System.TypeInitializationException: 用于' Mob.ApiCommunication'的类型初始化程序。抛出一个例外。 ---> System.MissingMethodException:Method' Xamarin.Forms.Device.get_RuntimePlatform'没找到。 04-08 14:57:34.824 I / MonoDroid(3782):---内部异常堆栈的结束 trace --- 04-08 14:57:34.824 I / MonoDroid(3782):at(包装 托管到本机) System.Object:__ icall_wrapper_mono_generic_class_init(intptr)04-08 14:57:34.824 I / MonoDroid(3782):at Mob.Views.Public.LoginViewModel.RestoreState (System.Collections.Generic.IDictionary`2 [TKey,TValue]字典) [0x00001] in C:\用户\来源... \ LoginViewModel.cs:52 04-08 14:57:34.824 I / MonoDroid(3782):在Mob.App.OnStart() [0x00001] in C:\ Users ... \ App.xaml.cs:39 04-08 14:57:34.824 I / MonoDroid(3782):at Xamarin.Forms.Application.SendStart()[0x00000] in C:\ BuildAgent2 \工作\ ca3766cfc22354a1 \ Xamarin.Forms.Core \ Application.cs:228 04-08 14:57:34.824 I / MonoDroid(3782):at Xamarin.Forms.Platform.Android.FormsAppCompatActivity + d__43.MoveNext ()[0x0003b] in C:\ BuildAgent2 \工作\ ca3766cfc22354a1 \ Xamarin.Forms.Platform.Android \程序兼容性\ FormsAppCompatActivity.cs:426 04-08 14:57:34.824 I / MonoDroid(3782):---堆栈跟踪结束 抛出异常的先前位置--- 04-08 14:57:34.824 I / MonoDroid(3782):at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() [0x0000c] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143 04-08 14:57:34.824 I / MonoDroid(3782):at System.Runtime.CompilerServices.AsyncMethodBuilderCore.m__0 (System.Object state)[0x00000] in /Users/builder/data/lanes/4468/f913a78a/source/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1018 04-08 14:57:34.824 I / MonoDroid(3782):at Android.App.SyncContext + c__AnonStorey0。<> m__0()[0x00000] in /Users/builder/data/lanes/4468/b16fb820/source/xamarin-android/src/Mono.Android/Android.App/SyncContext.cs:35 04-08 14:57:34.824 I / MonoDroid(3782):at Java.Lang.Thread + RunnableImplementor.Run()[0x0000b] in /Users/builder/data/lanes/4468/b16fb820/source/xamarin-android/src/Mono.Android/Java.Lang/Thread.cs:36 04-08 14:57:34.824 I / MonoDroid(3782):at Java.Lang.IRunnableInvoker.n_Run(System.IntPtr jnienv,System.IntPtr native__this)[0x00009] in /Users/builder/data/lanes/4468/b16fb820/source/monodroid/src/Mono.Android/platforms/android-25/src/generated/Java.Lang.IRunnable.cs:81 04-08 14:57:34.824 I / MonoDroid(3782):at(包装动态方法) System.Object:88db5e57-5ac7-4ba4-a574-4ec5eaf704fd(intptr,intptr)
我是否因使用RuntimePlatform而遗漏了什么?我环顾四周,但目前有关Device
类的任何文档/示例都使用了已弃用的成员。
答案 0 :(得分:4)
我出来了一个解决方案。奇怪的是,在发布SO之前,我已经为我的Xamarin项目做了这个,但它没有任何效果。但是这一次,在Xamarin论坛上阅读这个帖子之后:https://forums.xamarin.com/discussion/92455/xamarin-forms-2-3-4-224这就是我所做的:
我关闭了VisualStudio,清理了所有" bin" &安培; "物镜" 所有文件夹 我的解决方案中的项目,然后重新启动VS然后清理& 重建解决方案。
现在Debug.WriteLine(Device.RuntimePlatform);
会返回" Android"字符串按预期!,
答案 1 :(得分:4)
Xamarin.Forms-2.3.4.224已更改条件检查:
if (Device.OS == TargetPlatform.iOS)
{
}
要:
if (Device.RuntimePlatform.Equals("Android"))
{
Debug.WriteLine($"Onplatform: {Device.RuntimePlatform}");
}
else if (Device.RuntimePlatform.Equals("iOS"))
{
Debug.WriteLine($"Onplatform: {Device.RuntimePlatform}");
}
答案 2 :(得分:0)
hvaughan3对OP的评论是对我的评价。确保不仅您的PCL而且您的Android / iOS / etc项目也更新了他们的包。然后做一个完整的清理,并从那里接受OP的接受答案。
答案 3 :(得分:0)
我使用以下内容没有任何问题
MailMessage.To.Add()
看起来VS标准清洁将其关闭然后再次回答是解决方案......