我在使用 Azure 表存储时遇到了一个非常特殊的问题。我在 Visual Studio 2012 中有一个 .NET 4.5 项目,我在其中处理所有 Azure 表存储功能。这个项目/dll 被另外两个项目引用,我的 MVC 网站和我的 Azure Worker Role。(我在我的机器上的 Azure 模拟器下运行,但是当我将它部署到云时也会发生)
我在保存或检索记录时调用了以下函数:
internal static CloudTable GetTable(CloudStorageAccount storageAccount, string tableReference)
{
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference(tableReference);
table.CreateIfNotExists();
return tableClient.GetTableReference(table.Name);
}
在我的 MVC 网站中,我有一个函数可以将记录保存到 Azure 存储表中,然后在我的 Azure Worker Role 中有一个可以读取记录的服务。
所以两者都使用相同的 dll 进行存储和检索,但是我的 MVC 项目在保存记录时没有问题,但是在我的 Azure Worker 角色服务中,当它尝试检索记录时会在尝试执行“table.CreateIfNotExists() ;"。
无法加载文件或程序集“Microsoft.Data.OData,Version=5.2.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)
我已经做了以下事情:
- 将所有 NuGet 包从解决方案级别更新到最新版本
- 我检查了每个项目参考,以确保没有旧的 dll 或以前的版本,特别是 System.Spatial、Microsoft.WindowsAzure.Configuration、Microsoft.WindowsAzure.ServiceRuntime 和 Microsoft.ServiceBus、Microsoft.WindowsAzure.Storage, Microsoft.Data.Edm 和 Microsoft.Data.OData
- 我什至从头开始创建了一个新的云服务和 WorkerRole 项目,以确保它不是当前 WorkerRole 项目中损坏的东西。
我没有将 dll 回滚到 5.2,因为我在其他项目中遇到了太多问题,我使用了从 5.3 开始的特定功能。
我目前在 5.5 上运行所有 dll。
当我运行在此处找到的 AsmSpy.exe 实用程序时,我得到以下输出,我不确定如何解释 100%。
> Reference: Microsoft.Data.Edm
> 5.5.0.0 by Microsoft.Data.OData
> 5.5.0.0 by Microsoft.Data.Services.Client
> 5.5.0.0 by Microsoft.WindowsAzure.ActiveDirectory.GraphHelper.2013_04_05
> Reference: System.Spatial
> 5.5.0.0 by Microsoft.Data.OData
> 5.5.0.0 by Microsoft.Data.Services.Client Reference: Microsoft.Data.OData
> 5.5.0.0 by Microsoft.Data.Services.Client
> 5.2.0.0 by Microsoft.WindowsAzure.Storage <-- THIS SEEMS TO BE THE ONE THAT IS CAUSING ISSUES
我如何解释它,是 Microsoft.WindowsAzure.Storage dll 引用了 Microsoft.Data.OData dll 的 V 5.2.0.0,但如果这是问题所在,我该如何解决?根据我在 Storage dll 上看到的文档,它应该引用 5.4 及更高版本,而不是 5.2 ...?