我的托管服务使用Azure Storage 2.0(来自Nuget的2.0.5.1)。在Visual Studio 2010下我没有问题。我切换到Visual Studio 2012,现在在我的主要Web角色的某个网站上,我得到以下类型Microsoft.WindowsAzure.Storage.StorageException
的例外:
Could not load file or assembly 'Microsoft.Data.OData, Version=5.0.2.0,
Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
The located assembly's manifest definition does not match
the assembly reference. (Exception from HRESULT: 0x80131040)
而Azure Storage 2.0.5.1需要Microsoft.Data.OData
5.2.0.0。其他工作者角色工作正常,他们似乎找到了正确的程序集。在每个项目中,Azure Storage 2.0都是从Nuget安装的,所有引用都指向packages
文件夹。
我在.NET 4.0下使用Azure SDK 1.8 - 这意味着我还使用了Azure Storage Client 1.7。
答案 0 :(得分:4)
经过一番调查后,我发现这个网站从SDK路径加载Microsoft.WindowsAzure.Storage
,与我在其他程序集中加载Microsoft.WindowsAzure.StorageClient
的路径相同 - 在Visual Studio I的模块窗口中可以看到iisexpress
使用文件版本2.0.0.0加载程序集。据我所知,对Microsoft.WindowsAzure.StorageClient
的引用可以强制Visual Studio从错误的路径加载Microsoft.WindowsAzure.Storage
。
经过一些摆弄后,我已将Microsoft.WindowsAzure.Storage
程序集移出SDK文件夹,强制Visual Studio引用Nuget下载的程序集 - 这样我没有问题。
另一种选择,我也可以将Microsoft.WindowsAzure.StorageClient
移动到另一个位置并更改项目中的引用 - 但由于我打算完全迁移到Azure Storage 2.0,因此这将毫无用处(例如,我希望Azure SDK 2.0诊断中的内容使用Storage 2.0)。