使用C#创建Azure表时出错

时间:2017-09-13 19:55:51

标签: c# azure azure-table-storage

按照本文中的步骤(https://docs.microsoft.com/en-us/azure/cosmos-db/table-storage-how-to-use-dotnet),我创建了一个控制台应用程序,并将以下代码添加到main方法中:

            string connection = "DefaultEndpointsProtocol=https;AccountName=MyStorageAccountName;AccountKey=MyAccountKey;EndpointSuffix=core.windows.net";

        CloudStorageAccount account;
        if (!CloudStorageAccount.TryParse(connection, out account))
        {
            throw new Exception("Unable to parse storage account connection string.");
        }

        CloudTableClient tableClient = account.CreateCloudTableClient();
        CloudTable table = tableClient.GetTableReference("mytable");

        // this is the line at which I get the error:
        table.CreateIfNotExists();

但是,执行最后一行时出现以下错误:

  

无法加载文件或程序集“Microsoft.Data.OData,Version = 5.6.2.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)

为什么我收到此错误的任何想法?

注意:我编写了类似的代码,它针对的是同一个存储帐户,但创建了一个队列,并且工作正常。

2 个答案:

答案 0 :(得分:0)

看起来是时候删除解决方案的包文件夹并清理和重建项目了。还要确保实际安装了Microsoft.Data.OData nuget包。:)

答案 1 :(得分:0)

  

为什么我收到此错误的任何想法?

由于您已安装WindowAzure.Storage(版本8.4.0)程序包,因此还将安装其名为Microsoft.Data.OData(版本5.8.2)的其中一个依赖项。可能有一些其他软件包引用了Microsoft.Data.OData(版本5.6.2),它将导致您在帖子中提到的异常。

要解决此问题,可以在配置文件(app.config)中添加assemblyBinding。它会将Microsoft.Data.OData的所有依赖项绑定到您安装的程序集。 assemblyBinding的格式如下所示。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" /></startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>