0

我正在创建一个必须能够在离线时加载的应用程序,为此我们使用 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)”的参考。

当前在所有项目中添加了 Azure NuGet 包

SQLitePCL NuGet 包目前已添加到所有项目中

PCL 参考资料

WinPhone 参考资料

4

2 回答 2

1

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

if (!NetworkInterface.GetIsNetworkAvailable())

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

于 2016-02-17T16:50:43.740 回答
0

要检查网络状态,也许您可​​以使用它来代替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();
于 2016-02-16T16:45:09.190 回答