【问题标题】:Can't Resolve Platform Effect in Xamarin Forms component无法解决 Xamarin Forms 组件中的平台效应
【发布时间】:2019-01-24 19:14:29
【问题描述】:

我遇到了 Xamarin 表单中的平台效果问题。这些效果以共享库格式工作,我们现在正在迁移到 .NET Standard 2.0,原因超出了本文的范围。

项目设置

  • VS 2017 15.8.0
  • Xamarin 表单 3.1.0.697729
  • 两个 .Net Standard 2.0 项目(一个用于组件,另一个用于主 UI)
  • 两个 Android 项目(一个可以运行,另一个是 Android .dll)
  • 两个 iOS 项目(相同)

主要问题 我在 Android .dll 中的平台效果都不起作用。它们都解析为 null 效果。

根据文档,我的设置是正确的。 (文档here

我发现了两个不同的问题并且遇到了难题。

  1. 当我完全按照说明将 [assembly: ResolutionGroupName("MyGroupName")] 放在平台渲染器本身上时,Xamarin 的依赖解析器会出现异常。没有消息,只有一个异常和堆栈跟踪返回到 RoutingEffect 的构造函数。
  2. 当我使用稍微不同的模式并将其注册到 .NET Standard 2.0 项目中空文件的命名空间时,所有效果都返回为 null 效果。

我一直在谷歌搜索和挖掘论坛无济于事。有谁知道可能是什么问题?

旁注:所有自定义渲染器都在使用静态 Init() 技巧后工作,但不是效果。我还尝试让 typeof() 语句同时引用该类的 Android 版本和该类的 .NET Standard 2.0 版本。

为了完整起见,这就是我要说的。

NET 标准 2.0:

namespace MyBaseNamespace.Components.Effects
{
    public class SearchBarStylingEffect : RoutingEffect
    {
        public SearchBarStylingEffect() : base("MyGroupName.SearchBarStylingEffect")
        {
        }
    }
}

安卓:

[assembly: ResolutionGroupName("MyGroupName")]
[assembly: ExportEffect(typeof(SearchBarStylingEffect), "SearchBarStylingEffect")]
namespace MyBaseNamespace.Components.Android.Renderers.Effects
{
    public class SearchBarStylingEffect : PlatformEffect
    {
      …
    }
}

(iOS和Android一样,只是命名空间不同)

【问题讨论】:

    标签: xamarin.forms


    【解决方案1】:

    我还在 Xamarin 的论坛上发布了此内容,来自 Xamarin 的 Billy Liu 提出了一个问题,最终使我走上了正确的道路。我将在此处链接到该链接并发布修复它的内容。

    链接:Xamarin Forms Post

    这是该帖子的解决方案:

    简而言之,我必须执行以下操作才能获得此功能 (现在是):

    1. 确保 GroupNameResolution 标记位于应用中已初始化的第一个 Effect 上。
    2. 从我的 .Net 2.0 项目中删除空文件初始化程序。
    3. ???
    4. 利润。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多