【问题标题】:Xamarin Forms: Win Phone 8.1 Silverlight offline mode using AzureXamarin Forms:Win Phone 8.1 Silverlight 离线模式使用 Azure
【发布时间】:2016-05-26 14:25:12
【问题描述】:

我正在创建一个必须能够在离线时加载的应用程序,为此我们使用 Azure 和 Sqlite。在项目中,我从 NuGet 下载了 Microsoft.WindowsAzure.MobileServices.SQLiteStore 包及其依赖包 SQLitePCL。这些包被添加到 PCL、android、ios 和 win 手机项目中。在 ios 和 android 中,一切都像魅力一样工作,然而,在 windows phone 中,由 SQLitePCL 添加的参考“SQLite for Windows Phone (SQLite.WP80, Version 3.8.7.2)”被破坏,并且在尝试构建项目时抛出错误“找不到 SDK SQLite.WP80,版本=3.8.7.2”。我曾尝试从 NuGet 下载旧版本以查看是否有工作版本,但我没有运气。我还尝试删除此引用并将其添加到项目中,通过 Visual Studio 扩展从外部下载它,然后将下载的扩展添加到项目中,以解决引用损坏的问题。添加的版本比 NuGet 新,因为我找不到相同的版本。外部参考版本是“SQLite for Windows Phone (SQLite.WP80, version=3.10.2)”。它现在可以正确编译,但是当代码到达需要此引用的执行点时,它会引发以下错误“此功能未在此程序集的可移植版本中实现。您应该从主应用程序项目中引用 NuGet 包,以便参考平台特定的实现。”。更具体地说,当执行以下代码时会引发此错误:

if (!CrossConnectivity.Current.IsConnected)

有谁知道我怎样才能让这个参考工作,因为它似乎在 NuGet 中被破坏并且不允许我在外部添加它?

更新

添加了一些我在 NuGet 中的包和它们所在的项目的屏幕截图(除了 common 和 api 项目之外的所有项目)。同样在屏幕截图中,我放置了 PCL 和 WinPhone 项目中所有引用的图像。 PCL 中唯一没有的引用是专门针对 Windows 的引用,其中之一是您提供的链接中提到的“SQLite for Windows (SQLite.WP80, version=3.10.2)”的引用。

【问题讨论】:

    标签: sqlite azure xamarin.forms offline-mode win-phone-silverlight-8.1


    【解决方案1】:

    我找不到修复引用本身的解决方案,但由于代码仅在检查手机连接时崩溃,我决定寻找另一种方法来检查这一点并提出以下建议:

    if (!NetworkInterface.GetIsNetworkAvailable())
    

    如果其他人遇到此问题,希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      要检查网络状态,也许您可​​以使用它来代替CrossConnectivity.Current.IsConnected

      using Xamarin.Forms;
      using System.Net;
      using System.Threading.Tasks;
      using Plugin.Connectivity;
      
      namespace XXXXXX
      {
          public class NetworkHelper
          {
              #region CONSTANTS
              //2.5f
              private const float NETWORK_TIMEOUT_LIMIT = 3f; // Seconds
              private const String testUrl = "https://google.com/";
              #endregion
      
              public NetworkHelper ()
              {
              }
      
              #region PUBLIC METHODS
              public static bool CheckNetworkStatus()
              {
                  bool bSuccess = false;
      
                  try
                  {
                      var request = HttpWebRequest.Create(testUrl);
                      request.Timeout = (int)TimeSpan.FromSeconds(NETWORK_TIMEOUT_LIMIT).TotalMilliseconds;
                      using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                      {
                          if (response.StatusCode != HttpStatusCode.OK)
                          {
                              Console.WriteLine("Error");
                              bSuccess = false;
                          }
                          else
                          {
                              bSuccess = true;
                          }
                      }
                  }
                  catch (Exception ex)
                  {
                      bSuccess = false;
                  }
      
                  return bSuccess;
              }
      
              public static async Task<bool> IsRemoteReachable()
              {
                  return await CrossConnectivity.Current.IsRemoteReachable("https://ccc.seeforge.com");
              }
      
      
              #endregion
          }
      }
      
      //Example:
      var isNetworkConnected = await CheckNetworkStatus();
      

      【讨论】:

      • 显然 Windows Phone 8.1 不支持属性 .Timeout 和 GetResponse 方法(我收到一条错误消息,指出这两种方法不存在并搜索了原因)。提到的另一种方法使用 CrossConnectivity,因此与我的帖子有相同的问题。
      • 但是,我找到了另一个解决方案,我将发布
      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-07
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多