Microsoft.Maui.IPropertyMapper - 类型 '' 不能用作类型参数...没有隐式转换

Microsoft.Maui.IPropertyMapper - The type '' cannot be used as a type parameter... There is no implicit conversion

我正在尝试让地图在 .net MAUI 上工作并找到这个博客 post(链接到官方 MAUI 博客)。 https://www.cayas.de/blog/dotnet-maui-custom-map-handler 我已经下载了博客末尾链接的 repo,但我无法将其下载到 运行。

在博客 post 中,MapHandler 代码如下所示:

public static IPropertyMapper<IMap, MapHandler> MapMapper = new PropertyMapper<IMap, MapHandler>(ViewMapper)
    {  };

但在 repo 中它看起来像这样:

public static IPropertyMapper<MapView, MapHandler> MapMapper = new PropertyMapper<MapView, MapHandler>(ViewMapper)
        { };

这两个都不适合我,因为我收到下面的错误(在 运行 时间)。

The type 'MapControlDemo.Handlers.MapHandler' cannot be used as type parameter 'TViewHandler' in the generic type or method 'PropertyMapper<TVirtualView, TViewHandler>'. There is no implicit reference conversion from 'MapControlDemo.Handlers.MapHandler' to 'Microsoft.Maui.IElementHandler'

令人困惑的是,还有另外一些不应该是错误的错误??

有什么想法吗?我联系了作者,他建议这可能是我的 maui 版本,因为它对他有用,但我是最新的。

也许作者是在 Mac.

的基础上构建的

我已确认尝试在 Windows 上构建会导致构建错误。 VS 版本 17.3.0 预览版 1.1
我得到的错误是

Error   CS0311  The type 'MapControlDemo.Handlers.MapHandler' cannot be used
 as type parameter 'TViewHandler'
 in the generic type or method 'IPropertyMapper<TVirtualView, TViewHandler>'.
 There is no implicit reference conversion from
 'MapControlDemo.Handlers.MapHandler' to
 'Microsoft.Maui.IElementHandler'.
    MapControlDemo (net6.0-android) C:\...\maui-maps\Handlers\MapHandler.cs 6

但是,我能够在 Android 上 运行 - 通过选择 Android 模拟器作为目标(因此使用 net6.0-android)并按 F5 - 因此出现错误具有误导性。


鉴于这仅在 iOS 和 Android 上实现,我建议编辑 .csproj 以移除 Windows 平台。我还删除了 MacCatalyst(也许可以,但我打算进行最简单的测试):
变化:

        <TargetFrameworks>net6.0-android;net6.0-ios;net6.0-maccatalyst</TargetFrameworks>
        <TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks>

收件人:

        <TargetFrameworks>net6.0-android;net6.0-ios</TargetFrameworks>

然后我就可以构建了。

注意:如果不添加 Google 地图 ID,当 Android 上的 运行 时,结果是一张空地图。

tl;dr 最简单的测试方法是在 Mac 上,目标 iOS.