【问题标题】:Debug Xamarin Forms app with source code使用源代码调试 Xamarin Forms 应用
【发布时间】:2017-06-29 03:23:11
【问题描述】:

我一直在使用 Xamarin Forms 和 MVVMCross 库开发我的应用程序,我遇到了一个错误,导致 Xamarin.Forms。我想我会下载 Xamarin Forms 的源代码并调试它。我已经克隆了 git 存储库,然后将这些项目添加到我的解决方案中:

  • Xamarin.Forms.Core
  • Xamarin.Forms.Maps
  • Xamarin.Forms.Maps.Android
  • Xamarin.Forms.Platform
  • Xamarin.Forms.Platform.Android
  • Xamarin.Forms.Platform.Android(转发器)
  • Xamarin.Forms.Platform.Android.FormsViewGroup
  • Xamarin.Forms.Xaml

我已删除这些库的 NuGet 引用并替换了我的项目中的引用。应用程序正在构建中,此时一切正常,但是当我将其部署到模拟器时,应用程序崩溃了。这是堆栈跟踪:

android.runtime.JavaProxyThrowable: System.ArgumentException: 元素 不是 Xamarin.Forms.View 类型参数名称:元素在 Xamarin.Forms.Platform.Android.VisualElementRenderer`1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement (Xamarin.Forms.VisualElement 元素)[0x00011] 在 F:\workspace\Xamarin.Forms\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:139 在 Xamarin.Forms.Platform.Android.Platform.CreateRenderer (Xamarin.Forms.VisualElement 元素)[0x00022] 在 F:\workspace\Xamarin.Forms\Xamarin.Forms.Platform.Android\Platform.cs:289 在 Xamarin.Forms.Platform.Android.Platform.AddChild (Xamarin.Forms.VisualElement 视图,System.Boolean 布局)[0x0001d] in F:\workspace\Xamarin.Forms\Xamarin.Forms.Platform.Android\Platform.cs:530 在 Xamarin.Forms.Platform.Android.Platform.SetPage (Xamarin.Forms.Page newRoot) [0x000a2] 在 F:\workspace\Xamarin.Forms\Xamarin.Forms.Platform.Android\Platform.cs:414 在 Xamarin.Forms.Platform.Android.FormsApplicationActivity.Inte 在 md59d637456c2e899bd4a90a05345a07db3.MvxFormsApplicationActivity.n_onCreate(Native 方法)在 md59d637456c2e899bd4a90a05345a07db3.MvxFormsApplicationActivity.onCreate(MvxFormsApplicationActivity.java:31) 在 android.app.Activity.performCreate(Activity.java:5231) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 在 android.app.ActivityThread.access$800(ActivityThread.java:135) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:136) 在 android.app.ActivityThread.main(ActivityThread.java:5001) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 在 dalvik.system.NativeStart.main(Native Method)

看起来,Xamarin 找不到 NavigationPage 类的视图 rednerer。 我正在使用 Xamarin.Android 7.0 和 Java 8 进行编译。

【问题讨论】:

  • 请包含您拉下的 Xamarin.Forms 代码的相应分支/标记。
  • @JonDouglas 我已从 2.3.3 分支中撤出
  • @JonDouglas 现在我已将空白应用程序添加到 Xamarin.Forms 解决方案,将所有 NuGet 引用替换为 Xamarin.Forms 的项目引用,并且 ContentPage 出现相同的错误。我应该做些什么来使任何应用程序与 Xamarin 源一起工作?也许这里有一些我不知道的步骤?
  • 微软在 devblogs 上的说明:Debugging Xamarin Open Source Frameworks: Part 1.

标签: c# android xamarin xamarin.android xamarin.forms


【解决方案1】:

我终于弄清楚了如何运行我的应用程序。我发现,在 Xamarin.Forms.Platform.Android 命名空间的 AssemblyInfo 类中,我已将属性设为灰色,这些属性告诉应用程序为视图注册渲染器。这就是我要说的:

#if ROOT_RENDERERS
[assembly: ExportRenderer (typeof (BoxView), typeof (BoxRenderer))]
[assembly: ExportRenderer (typeof (Entry), typeof (EntryRenderer))]
[assembly: ExportRenderer (typeof (Editor), typeof (EditorRenderer))]
[assembly: ExportRenderer (typeof (Label), typeof (LabelRenderer))]
[assembly: ExportRenderer (typeof (Image), typeof (ImageRenderer))]
[assembly: ExportRenderer (typeof (Button), typeof (ButtonRenderer))]
[assembly: ExportRenderer (typeof (TableView), typeof (TableViewRenderer))]
[assembly: ExportRenderer (typeof (ListView), typeof (ListViewRenderer))]
[assembly: ExportRenderer (typeof (Slider), typeof (SliderRenderer))]
[assembly: ExportRenderer (typeof (WebView), typeof (WebViewRenderer))]
[assembly: ExportRenderer (typeof (SearchBar), typeof (SearchBarRenderer))]
[assembly: ExportRenderer (typeof (Switch), typeof (SwitchRenderer))]
[assembly: ExportRenderer (typeof (DatePicker), typeof (DatePickerRenderer))]
[assembly: ExportRenderer (typeof (TimePicker), typeof (TimePickerRenderer))]
[assembly: ExportRenderer (typeof (Picker), typeof (PickerRenderer))]
[assembly: ExportRenderer (typeof (Stepper), typeof (StepperRenderer))]
[assembly: ExportRenderer (typeof (ProgressBar), typeof (ProgressBarRenderer))]
[assembly: ExportRenderer (typeof (ScrollView), typeof (ScrollViewRenderer))]
[assembly: ExportRenderer (typeof (Toolbar), typeof (ToolbarRenderer))]
[assembly: ExportRenderer (typeof (ActivityIndicator), typeof (ActivityIndicatorRenderer))]
[assembly: ExportRenderer (typeof (Frame), typeof (FrameRenderer))]
[assembly: ExportRenderer (typeof (NavigationMenu), typeof (NavigationMenuRenderer))]
[assembly: ExportRenderer (typeof (OpenGLView), typeof (OpenGLViewRenderer))]

[assembly: ExportRenderer (typeof (TabbedPage), typeof (TabbedRenderer))]
[assembly: ExportRenderer (typeof (NavigationPage), typeof (NavigationRenderer))]
[assembly: ExportRenderer (typeof (CarouselPage), typeof (CarouselPageRenderer))]
[assembly: ExportRenderer (typeof (Page), typeof (PageRenderer))]
[assembly: ExportRenderer (typeof (MasterDetailPage), typeof (MasterDetailRenderer))]
#endif

当我评论了这个编译条件后,一切都很顺利。

【讨论】:

    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 2011-07-28
    • 2018-05-12
    相关资源
    最近更新 更多