如何在 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 Library
template 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.iOS
和 Xamarin.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
我开始创建一个 .NET Standard Library
,我打算制作一个 NuGet
- 但后来发现我还需要特定于平台的功能。
因此,我发现 Multiplatform Library
template 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.iOS
和 Xamarin.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