【问题标题】:Library to communicate with multiple platforms including Windows Forms, ASP and Xamarin Forms PCL与多个平台通信的库,包括 Windows Forms、ASP 和 Xamarin Forms PCL
【发布时间】:2017-07-19 14:33:40
【问题描述】:

我正在做一个需要将 API 读入多个平台的项目(包括:Windows Forms、ASP 和 Xamarin Forms PCL)我可以单独执行此操作,尽管我想要一些我可以一次性完成的东西并且只需从每个平台调用方法。但问题是,我一直在做一些测试和研究,看起来至少没有与所有这三个兼容的类库。

所以,我一直在想,有没有其他选择,而不必单独做这一切?我的意思是,在 ASP 和 Windows 窗体之间可以正常工作,但 Xamarin 是一个完全不同的故事。

无论如何,如果能提供任何帮助,我将不胜感激。

【问题讨论】:

  • 如果你举了一个你想要做什么的例子,这可能有助于提供一个你可以使用的答案。

标签: c# asp.net winforms xamarin.forms


【解决方案1】:

遵循 .Net 标准,它适用于所有人。 (https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/)

您需要创建一个可移植库 (PCL) 或遵循 .net 标准的 .net 核心库。您将无法访问完整 .net 框架的全部功能,但它可以工作

【讨论】:

  • 嗨,谢谢。这是一个很好的解决方案!虽然还不是100%。我的意思是,我仍然无法获得诸如能够进行 sqlconnections 之类的事情(或者在我看来是这样)。我收到错误说 system.data.sqlclient 没有被引用。所以,我通过对象浏览器和 using 语句添加了一个引用。它已经被认可了。伟大的。但我仍然得到错误。在其他方面也是如此。在某些平台上出现错误之前,我只能定位到 1.4 版。但是 1.4 确实可以连接到所有我需要它的人。
  • 所以,我想知道是否有任何方法可以解决这个问题,或者我是否总是必须将它用作特定库和平台之间的桥梁。 P.S:我的目标是“类库(适用于 iOS、Android 和 Windows)”。
  • 我必须安装 Sytem.Data.SqlClient Nugget 包。它正在工作,现在。然而,似乎有很多东西不受支持。例如,System.Net.Mail。除其他外,它似乎不起作用。所以,我想最好的办法是在平台之间实际使用它。你怎么看?
  • 问题是现在.Net 是支离破碎的。这就是他们建立 .Net 标准的原因
  • 您拥有“完整”的 .Net 框架(如 4.6.1)、单 Xamarin .Net 平台和 .Net Core 平台。微软已经宣布他们将专注于仅支持 .Net Core,但目前,.Net Core 仅实现了完整框架的一部分。 Xamarin 也是如此。这就是他们建立 .Net 标准的原因,以定义在所有平台上实现的所有功能。例如 System.Net 邮件丢失,因为从一个平台丢失,所以无论如何这不能在所有平台上工作,无论你使用什么。
【解决方案2】:

也许您应该编写一个通用类文件并将其作为“将文件添加为链接”添加到其他项目中,如果有不同之处,则使用预处理器指令对其进行管理(当然存在差异:))

我想说的是,我有 3 个项目,并且都对同一个 RESTapi 进行 api 调用。我在我的第一个项目中有主类,并通过“右键单击->添加->添加现有项目->'选择文件'->添加为链接”按钮将其添加到其他 2 个项目中。并使用预处理指令编写代码特定的代码。喜欢

using System;
using Xamarin.Forms;
#if __IOS__
using CoreGraphics;
using UIKit;
using Xamarin.Forms.Platform.iOS;
#endif
#if __ANDROID__
using Android.Runtime;
using Android.Text;
using Android.App;
using Android.Util;
using View = Android.Views.View;
using Android.Content;
using Android.Views;
using Android.Widget;
using RelativeLayout = Android.Widget.RelativeLayout;
using Android.Graphics;
using Android.Views.Animations;
#endif
namespace Mobile.Helpers
{
    public static class DialogHelper
    {
        var result = CallApi(); //so this will be common
        #if __IOS__
        //create ios view etc. and use result
        #if __ANDROID__
        //create android view etc. and use result
        #endif

    }
}

这样你就可以编写你的代码了;例如 Net.Mail 中的代码

#if __WINDOWS__
#endif

指令,它将仅在 windows 项目上编译。并为其他平台编写特定代码。 因此,您只需为特定作业更新(并注意)一个文件。

我用它来为 android 和 ios 显示一个自定义通知弹出窗口(视图),但您可以将它用于任何类型的项目。希望它足够清楚,可以理解。

【讨论】:

  • 您好,感谢您的回答。看起来是个不错的选择。虽然,正如另一个答案中所建议的那样,我最终采用了 .NET Standard 方式。它工作得很好。不过谢谢! :)
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 2017-06-24
  • 2014-09-08
  • 1970-01-01
相关资源
最近更新 更多