xamarin.forms - 无法解决 Xamarin Forms 组件中的平台效应
问题描述
我在 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 中的平台效果都不起作用。它们都解析为无效效果。
根据文档,我的设置是正确的。(这里的文档)
我发现了两个不同的问题并且碰上了砖墙。
- 当我完全按照说明将 [assembly: ResolutionGroupName("MyGroupName")] 放在平台渲染器本身上时,Xamarin 的依赖解析器会出现异常。没有消息,只有一个异常和堆栈跟踪返回到 RoutingEffect 的构造函数。
- 当我使用稍微不同的模式并将其注册到 .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 的论坛上发布了此内容,来自 Xamarin 的 Billy Liu 提出了一个问题,最终使我走上了正确的道路。我将在此处链接到该链接,并发布修复它的内容。
这是该帖子的解决方案:
简而言之,我必须做以下事情来获得这个功能(现在是这样):
- 确保 GroupNameResolution 标记位于应用程序中初始化的第一个 Effect 上。
- 从我的 .Net 2.0 项目中删除空文件初始化程序。
- ???
- 利润。
推荐阅读
- postgresql-13 - 如何从 regexp_match 获得第一个匹配项?
- batch-file - 删除 MQ 队列的批处理脚本
- reactjs - Reactjs 中的延迟加载 Modal Bootstrap
- mongodb - 按年然后按月聚合 Mongo 集合
- react-native - 我可以在一个堆栈屏幕中使用重复的 webview 吗?
- vue.js - 如何仅在按下提交按钮后才隐藏我的部分。现在该部分在我按下一个字母后消失
- django - Django:AttributeError 'WSGIRequest' 对象没有属性 'get'
- bpf - BPF 验证者拒绝使用 inode ptr 作为密钥
- python - 生成嵌套列表的所有可能组合
- jenkins - Jenkins - 如果 PR 请求包含消息,则触发阶段