首页 > 解决方案 > 无法解决 Xamarin Forms 组件中的平台效应

问题描述

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

项目设置

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

根据文档,我的设置是正确的。(这里的文档)

我发现了两个不同的问题并且碰上了砖墙。

  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

解决方案


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

链接:Xamarin Forms Post

这是该帖子的解决方案:

简而言之,我必须做以下事情来获得这个功能(现在是这样):

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

推荐阅读