【问题标题】:Xamarin Forms - Targeting .NET StandardXamarin 表单 - 面向 .NET 标准
【发布时间】:2017-05-24 08:57:06
【问题描述】:

我不久前读过这篇文章: https://blog.xamarin.com/net-standard-library-support-for-xamarin/

因此,我将我们所有的库都从可移植库转换为 .NET Standard (1.4)。我这样做是因为文章说“现在需要升级此 PCL 以针对 .NET 标准库,可以在项目属性中找到它。”。

但是,我不知道如何构建面向 .NET Standard 的 Xamarin Forms 项目。我克隆了 Xamarin Forms 示例,并打开了 MasterDetailPage 项目。我进入项目属性并按照说明从便携式切换到 .NET Standard。立即,我收到一条错误消息,告诉我需要选择加入 NuGet 3.0 支持。我很好,但我该怎么做呢?

我发现如果我删除 Xamarin Forms NuGet 包,我可以切换到 .NET Standard。但是,完成此操作后,我无法重新添加 Xamarin Forms NuGet 包。它只是不断失败。与文章所说的相反,我无法添加对 .NET Standard 库的引用。当我尝试在我的解决方案中添加对现有 .NET Standard 库的引用时,Visual Studio 只是给我一个错误,指出该库不兼容。我应该针对 Xamarin Forms 定位哪个版本的 .NET Standard?

如何获得使用 Xamarin Forms 支持编译的 .NET Standard 库?

【问题讨论】:

  • 不幸的是,Xamarin.Forms 仍然仅通过 NuGet 支持旧的 PCL 配置文件,并且在这方面与 netstandard 不兼容。从今天开始,您需要通过 netstandard 项目使用的代理 pcl 项目安装 Xamarin.Forms。还有其他方法,但理想情况下,您应该等到 netstandard 支持它才能轻松安装。有一些关于此的博客,例如 Oren oren.codes/2016/07/09/using-xamarin-forms-with-net-standard 的博客
  • 请告诉我你在开玩笑!天哪。我花了很多时间重新组织我们所有的项目并让它们为 .NET Standard 编译。为什么 Xamarin 在去年 8 月宣布如果我们无法编译 Xamarin 支持 .NET Standard?
  • 我已经尝试按照上面的链接进行操作,但它没有任何帮助。我能够将 Xamarin Forms 项目转换为 .NET Standard 1.4,但我只是得到一堆编译错误。
  • Xamarin 支持它就好了。然而,Xamarin Forms 还没有。它很可能会发布 netstandard 2.0。
  • 它确实支持它。我已经让它工作了。我很快就会发布我自己问题的答案。

标签: xamarin xamarin.forms .net-standard


【解决方案1】:

如果您想使用带有 csproj 而不是 project.json 的新 Visual Studio 2017 版本执行此操作,您可以使用 dotnet migrate CLI 命令或将此代码添加/编辑到您的 csproj 文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <PackageTargetFallback>$(PackageTargetFallback);portable-win+net45+wp8+win81+wpa8</PackageTargetFallback>
  </PropertyGroup>

</Project>

【讨论】:

  • 评论非常有用,因为上面的链接都是在谈论旧式project.json,而在VS2017中,只使用了csproj
【解决方案2】:

事实证明,您可以获得一个 .NET Standard 项目来引用 Xamarin Forms NuGet 包,因此能够利用 Xamarin Forms 中的 .NET Standard 库。

这篇文章或多或少地解释了如何做到这一点。诀窍是在 project.json 中导入可移植框架。 https://xamarinhelp.com/dot-net-standard-pcl-xamarin-forms/

如果你不能让它工作,这里有一个可以工作的 Git 示例。 https://github.com/adamped/XamarinForms.NetStandard.git

我最终能够毫无问题地以 .NET Standard 1.4 为目标。

【讨论】:

  • 您的项目在 .NetStandard 1.4 上运行正常吗?您使用的是哪个 MVVM 框架?我打算使用 MVVM Light,但我不知道我是否能够做到。请分享你的经验,我也是这样。
  • 是的。它现在工作得很好。我并没有真正使用 MVVM 框架。我们的 UI 框架有点杂乱无章的模式,代码与 Silverlight 共享。我想在某个时候将所有代码转换为像 MVVM 这样的单一模式,但目前没有什么真正符合要求的。
  • 鉴于 project.json 文件现在已经死了,在 csproj 中添加 packagetargetfallback 是前进的方向
  • 谢谢。当能够升级到 csproj 15 时,这将很有用。
  • 我猜你不使用 Sqlite。我很难将使用 Sqlite 的 My Xamarin Forms PCL 项目移植到 .Net Standard。我也尝试过 EF Core,但没有成功。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
  • 2016-11-08
  • 2016-03-13
相关资源
最近更新 更多