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())
如果其他人遇到此问题,希望这对您有所帮助!
我正在创建一个必须能够在离线时加载的应用程序,为此我们使用 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())
如果其他人遇到此问题,希望这对您有所帮助!