将Azure表存储引用到可移植类库(PCL)

时间:2016-04-18 20:36:55

标签: c# azure-storage nuget-package portable-class-library

我刚刚创建了一个使用Azure Table storage v7.0.1-preview的便携式类库。

我有一些问题,使其正常工作。下面的代码抛出异常(TypeLoadException):

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

无法从程序集“Microsoft.WindowsAzure.Storage,Version = 7.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”中加载“Microsoft.WindowsAzure.Storage.Table.TableQuerySegment”类型。

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

Create a portable class library using visual studio 2015

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

Install-Package WindowsAzure.Storage -Version 7.0.1-preview

Add WindowsAzure.Storage v7.0.1 preview using Nuget Package Manager Console

为了重现这个问题,我在这个库里有一个单独的类:

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)=&gt;我在这个项目中也添加了对WindowsAzure.Storage v7.0.1-preview的引用。

Console App引用了Portable CLass Library。

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。

  • 消息:无法从程序集“Microsoft.WindowsAzure.Storage,Version = 7.0.1.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”中加载“Microsoft.WindowsAzure.Storage.Table.TableQuerySegment”类型。

  • StackTrace:

    在AzureTableStorageUtility.AzureTableUtilitiy.RetrieveAsync(String connectionString,String settingsTableName)

    在C:\ Projects \ AzureTableStorageTest \ AzureTableStorageTest2 \ Program.cs中的AzureTableStorageTest.Program.Main(String [] args):第24行

编辑

这是一个重现问题的示例应用:

1 个答案:

答案 0 :(得分:1)

这是黑暗中的一个镜头,但你可以尝试更改&#34;复制本地&#34;在你的PCL的Microsoft.WindowsAzure.Storage引用为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/