Xamarin Forms:Win Phone 8.1 Silverlight 离线模式使用 Azure

Xamarin Forms: Win Phone 8.1 Silverlight offline mode using Azure

我正在创建一个必须能够在离线时加载的应用程序,为此我们使用 Azure 和 Sqlite。在项目中,我从 NuGet 下载了 Microsoft.WindowsAzure.MobileServices.SQLiteStore 包及其依赖包 SQLitePCL。这些包被添加到 PCL、android、ios 和 win phone 项目中。在 ios 和 android 中,一切都像一个魅力,然而,在 windows phone 中,SQLitePCL 添加的引用 "SQLite for Windows Phone (SQLite.WP80, Version 3.8.7.2)" 被破坏了,当尝试构建项目时抛出错误 "Could not find SDK SQLite.WP80, version=3.8.7.2"。我尝试从 NuGet 下载旧版本以查看是否有工作版本,但我没有运气。我还尝试删除此引用并将其添加到项目中,通过 Visual Studio 扩展从外部下载它,然后将下载的扩展添加到项目中以解决引用损坏的问题。添加的版本比 NuGets 新,因为我找不到相同的版本。外部参考版本为 "SQLite for Windows Phone (SQLite.WP80, version=3.10.2)"。它现在可以正确编译,但是当代码到达需要此引用的执行点时,它会抛出以下错误 "This functionality is not implemented in the portable version of this assembly. You should reference the NuGet package from your main application project in order to reference the platform-specific implementation."。更具体地说,当执行以下代码时会抛出此错误:

if (!CrossConnectivity.Current.IsConnected)

有谁知道我如何才能使这个引用正常工作,因为它在 NuGet 中似乎已损坏并且不允许我在外部添加它?

更新

添加了一些我在 NuGet 中的包的屏幕截图以及它们所在的项目(除了公共项目和 api 项目之外的所有项目)。同样在屏幕截图中,我在 PCL 和 WinPhone 项目中放置了所有引用的图像。 PCL 中唯一没有的参考是专门针对 windows 的参考,其中之一是您提供的 link 中提到的对 "SQLite for Windows (SQLite.WP80, version=3.10.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();

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

if (!NetworkInterface.GetIsNetworkAvailable())

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