【发布时间】:2022-01-04 02:44:01
【问题描述】:
总结
我有一个包含两个项目的解决方案:一个 .NET Standard 和一个引用 .NET Standard 项目的 iOS 项目。
如果 .NET Standard 不引用 System.Memory nuget 包(特别是 4.5.3 或 4.5.4 版本),则一切正常。如果我在 .NET Standard 项目中添加对 System.Memory 的引用,那么我的 iOS 项目会因 MissingMethodException 而崩溃。
注意:此问题仅适用于 iOS,不会在 Xamarin Android 上重现。
我该如何解决这个问题?
详情
我的项目正在使用 TopTen.RichTextKit 库 (https://www.nuget.org/packages/Topten.RichTextKit/) 来执行文本块测量。当我在 iOS 上运行代码时,调用 TextBlock.MeasuredHeight 时出现以下崩溃:
System.InvalidOperationException: 'Exception in BuildFontRuns() with original length of 11 now 11, style run count 1, font run count 0, direction overrides: False'
这有一个内部异常:
Method not found: void SkiaSharp.SKFont.GetGlyphs(System.ReadOnlySpan`1<int>,System.Span`1<uint16>)
通过一一删除nuget包并使用测试项目,我发现如果我在我的.NET Standard项目中引用System.Memory 4.5.4版,就会出现错误。如果我删除此版本,崩溃就会消失。
此外,不同版本的 System.Memory 会导致不同的行为:
- 4.5.0 - 工作
- 4.5.1 - 不会编译
- 4.5.2 - 不会编译
- 4.5.3 - 崩溃
- 4.5.4 - 崩溃
很遗憾,我无法降级到 System.Memory 4.5.0,因为其他库需要版本 >= 4.5.4。
我不完全理解解释,但我发现一些链接表明 System.Memory 的 iOS 实现不完整。例如:
这意味着 Xamarin 项目现在依赖于 NuGet 包中的实现。 System.Memory NuGet 包版本 4.5.1 相应地不包含 Xamarin 项目类型的占位符文件。
【问题讨论】:
标签: c# xamarin.ios nuget