如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?
Posted
技术标签:
【中文标题】如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?【英文标题】:How to multitarget in Xamarin.Forms with Visual Studio for Mac? 【发布时间】:2019-07-23 23:37:14 【问题描述】:我开始创建一个 .NET Standard Library
并打算创建一个 NuGet
- 但后来发现我还需要特定于平台的功能。
所以,我发现了this 堆栈溢出问题——这表明我可以改用Multiplatform Library
template。但是在这里我遇到了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:
我在 GitHub 上的 MSBuild.Sdk.Extras
上找到了一个 issue,指向了这个 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 项目以实际测试该库:
然后切换回首先放置 netstandard:
Projects/MyStandardLibrary/MyStandardLibrary/MyButtonRender.cs(12,12):错误 CS0246:找不到类型或命名空间名称“ExportRendererAttribute”(您是否缺少 using 指令或程序集引用?) (CS0246) ( MyStandardLibrary) 等。
【问题讨论】:
您可以通过右键单击解决方案尝试unload
和reload
吗?
没有重新加载解决方案的选项。但我可以卸载 - 加载项目。它没有帮助。
But in Class1 the Xamarin.iOS nor Xamarin.Forms.Platform.iOS can be accessed in Visual Studio for Mac
是什么意思?通过访问,您是在谈论在文本编辑器中选择该框架吗?这还不支持。唯一的解决方法是编辑 .csproj 并更改目标框架的顺序。目前只有第一个在文本编辑器中使用。
希望 Visual Studio for Mac 8.3 中包含文本编辑器中的多目标支持 - docs.microsoft.com/en-us/visualstudio/productinfo/…
多平台库项目是一种创建 NuGet 包的方法。多平台库解决方案中的每个项目都有一个目标框架。它们本身不是多目标框架项目。
【参考方案1】:
Visual Studio for Mac 的当前版本 v8.2 不支持多目标。
根据Visual Studio for Mac Roadmap,Visual Studio for Mac v8.3 将提供多目标支持:
https://docs.microsoft.com/visualstudio/productinfo/mac-roadmap#2019-q3-july-september
编辑:您可以在此处关注团队添加多目标支持的进度:https://github.com/mono/monodevelop/pull/7848
【讨论】:
我发现它有点混乱,因为有一个模板:docs.microsoft.com/en-us/xamarin/cross-platform/… 据说似乎可以做到这一点。但正如我在问题中所说,它似乎无法正常运行。 @lolelo Goo catch - 看起来模板添加的有点过早。在答案中,我添加了一个指向 PR 的链接以支持多目标。看起来团队已经接近了!以上是关于如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Visual Studio for Mac Project 连接到 Azure Data Studio 数据库?
如何在使用 Xamarin for Visual Studio 的真实 Android 设备上进行调试?
如何在 Visual Studio for Mac for Xamarin 中添加更多 android 模拟器设备?
如何在 Visual Studio for C++ 中更改工作目录
如何使用 Visual Studio for Mac 在 Xamarin.Forms 中实现多目标?
如何在SourceTree for Mercurial中使用Visual Studio(vsdiffmerge)作为外部差异工具?