将 Azure Table 存储引用到便携式 Class 库 (PCL)

Reference Azure Table Storage into a Portable Class Library (PCL)

我刚刚创建了一个使用 Azure Table storage v7.0.1-preview.

的可移植 class 库

而且我在使它正常工作时遇到了一些问题。下面的代码抛出异常 (TypeLoadException):

 var cloudStorageAccount = CloudStorageAccount.Parse(connectionString);
 var cloudTable = cloudStorageAccount.CreateCloudTableClient().GetTableReference(settingsTableName);
 var seg = await cloudTable.ExecuteQuerySegmentedAsync(new TableQuery(), null);
 return seg.Results;

Could not load type 'Microsoft.WindowsAzure.Storage.Table.TableQuerySegment' from assembly 'Microsoft.WindowsAzure.Storage, Version=7.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

我创建了一个可移植的 class 库:

我添加了对 WindowsAzure.Storage v7.0.1-preview 的引用:

Install-Package WindowsAzure.Storage -Version 7.0.1-preview

所以为了重现这个问题,我在这个库中有一个 class:

using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

public class AzureTableUtilitiy
{
    public static async Task<IList<DynamicTableEntity>> RetrieveAsync(string connectionString, string settingsTableName)
    {
        var cloudStorageAccount = CloudStorageAccount.Parse(connectionString);
        var cloudTable = cloudStorageAccount.CreateCloudTableClient().GetTableReference(settingsTableName);
        var seg = await cloudTable.ExecuteQuerySegmentedAsync(new TableQuery(), null);
        return seg.Results;
    }
}

我只是想测试它...使用控制台应用程序(名为 AzureTableStorageTest)=> 我也在这个项目中添加了对 WindowsAzure.Storage v7.0.1-preview 的引用。

控制台应用程序引用了便携式 CLass 库。

class Program
{
    static void Main(string[] args)
    {
        var result = AzureTableUtilitiy.RetrieveAsync(
         ConfigurationManager.ConnectionStrings["StorageAccountConnectionstring"].ConnectionString,
         "ExternalSettingsStore").Result;
    }
}

所以上面的代码抛出了异常。但是如果我直接从控制台应用程序执行代码,一切正常:

class Program
{
    static void Main(string[] args)
    {
        var cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["StorageAccountConnectionstring"].ConnectionString);
        var cloudTable = cloudStorageAccount.CreateCloudTableClient().GetTableReference("ExternalSettingsStore");
        var seg = cloudTable.ExecuteQuerySegmentedAsync(new TableQuery(), null).Result;
        var result = seg.Results;
    }
}

谁能解释一下我错过了什么^^?

编辑:异常详情:

抛出一个System.TypeLoadException。

编辑

这是重现该问题的示例应用程序:

这是瞎猜的,但您能否尝试将 PCL 的 Microsoft.WindowsAzure.Storage 引用中 "Copy Local" 的值更改为 true。

这是一篇讨论此问题的文章:https://blogs.msdn.microsoft.com/asiatech/2013/01/09/how-to-resolve-the-could-not-load-file-or-assembly-issues-on-windows-azure-web-sites/