繁体   English   中英

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

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

我刚刚创建了一个使用Azure Table存储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,版本= 7.0.1.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35”中加载类型“ Microsoft.WindowsAzure.Storage.Table.TableQuerySegment”。

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

使用Visual Studio 2015创建可移植的类库

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

Install-Package WindowsAzure.Storage -Version 7.0.1-preview

使用Nuget Package Manager控制台添加WindowsAzure.Storage v7.0.1预览

因此,要重现该问题,我在该库中只有一个类:

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。

  • 消息:无法从程序集“ Microsoft.WindowsAzure.Storage,版本= 7.0.1.0,区域性=中性,PublicKeyToken = 31bf3856ad364e35”中加载类型“ Microsoft.WindowsAzure.Storage.Table.TableQuerySegment”。

  • 堆栈跟踪:

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

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

编辑

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

这是一个黑暗的镜头,但是您可以尝试将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-在Windows天蓝色网站上/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM