如何在 Xamarin.Forms 和 Visual Studio 中针对 Mac 进行多目标?

How to multitarget in Xamarin.Forms with Visual Studio for Mac?

我开始创建一个 .NET Standard Library,我打算制作一个 NuGet - 但后来发现我还需要特定于平台的功能。

因此,我发现 stack overflow question - which indicated I could use a Multiplatform Librarytemplate instead. But here I encountered a problem with DependencyService - 以及 Custom Renderer 的问题 - 实际上意味着非平台特定代码无法与库中的平台特定代码进行通信。

我还尝试编辑 csproj 文件,示例:A, B, C。并通过使用以下 csproj:

<Project Sdk="MSBuild.Sdk.Extras/2.0.29">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;Xamarin.ios10</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Xamarin.Forms" Version="4.1.0.581479" />
  </ItemGroup>
</Project>

...生成如下解法:

但在 Class1 中,Xamarin.iOSXamarin.Forms.Platform.iOS 都无法在 Visual Studio for Mac 中访问。我最近检查了一下,可以看到它在 windows 上的 Visual Studio 中工作 - 使用相同的 csproj。

有没有办法在 Visual Studio for Mac 中实现多目标?


编辑 1: 我找到了 issue on MSBuild.Sdk.Extras on GitHub leading to this post。似乎可以安装某个名为 DotNetCoreSupportAnyTargetFramework.DotNetCoreSupportAnyTargetFramework_1.0 的扩展。但是它不会在 VSfM 8.1.5 中正确安装:

在较旧的 VSfM 中尝试我无法打开项目或创建新项目 - 所以我无法测试扩展是否有效。它可能与以下错误消息有关:

打开旧的 VSfM 时显示。


编辑 2: 更改目标框架的顺序后 - 将 Xamarin.ios10 放在第一位 - Xamarin.iOS 和 Xamarin.Forms.Platform.iOS 变为可访问 - 如 Matt Ward 所述。

但是我无法将对 NetStandard 库的引用添加到 Xamarin.Forms 项目以实际测试该库:

然后切换回网络标准放在第一位:

Projects/MyStandardLibrary/MyStandardLibrary/MyButtonRender.cs(12,12): Error CS0246: The type or namespace name'ExportRendererAttribute' could not be found (are you missing a using directive or an assembly reference?) (CS0246) (MyStandardLibrary) etc.

Mac 的 Visual Studio 当前版本 v8.2 不支持多目标。

根据 Visual Studio for Mac Roadmap,多目标支持将在 Visual Studio 中为 Mac v8.3 提供:

https://docs.microsoft.com/visualstudio/productinfo/mac-roadmap#2019-q3-july-september

编辑:您可以在此处关注团队在添加多目标支持方面的进展:https://github.com/mono/monodevelop/pull/7848