Я использую Microsoft.WindowsAzure.StorageClient версии 1.7.1.0, доступный по адресу: https://github.com/WindowsAzure/azure-sdk-for-net/tree/sdk_1.7.1. Мой проект прекрасно компилируется, но когда я его запускаю, я получаю следующую ошибку:
Could not create Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
с внутренним исключением:
Could not load file or assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.7.0.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)":"Microsoft.WindowsAzure.StorageClient, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Похоже, Microsoft.WindowsAzure.Diagnostics зависит от версии 1.7.0.0 Microsoft.WindowsAzure.StorageClient. Однако я использую версию 1.7.1.0, и, насколько мне известно, в одном проекте не может быть и 1.7.0, и 1.7.1. Любые идеи, как сделать Microsoft.WindowsAzure.Diagnostics зависимым от 1.7.1, если это действительно проблема?
Спасибо, Курт
Обновлять
В соответствии с приведенной ниже рекомендацией я добавил задачу запуска для загрузки версии 1.7.0 с помощью gacutil (это было полезно http://blogs.infosupport.com/adding-assemblies-to-the-gac-in-windows-azure/). У меня есть 2 рабочие роли и 2 веб-роли. Проблема, с которой я столкнулся сейчас, заключается в том, что при компиляции и запуске VS2012 копирует 1.7.0 в соответствующую папку WebRoles ...\csx\Debug\roles[WebRoleName]\approot, несмотря на отсутствие прямой ссылки на версию 1.7. 0 в проекте. Следующие выходные данные компиляции показывают ошибку, которая появляется, когда Azure пытается загрузить версию 1.7.1 (которую теперь не может найти):
System.TypeLoadException: Unable to load the role entry point due to the following exceptions:
-- System.IO.FileLoadException: Could not load file or assembly 'Microsoft.WindowsAzure.StorageClient, Version=1.7.1.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Microsoft.WindowsAzure.StorageClient, Version=1.7.1.0, Culture=neutral, PublicKeyToken=null'
=== Pre-bind state information ===
LOG: User = BERTIES_MAIN\kurt_000
LOG: DisplayName = Microsoft.WindowsAzure.StorageClient, Version=1.7.1.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///H:/Everything/Current_Work/Web_Apps/Azure/InSysCloud/InSysCloud/InSysCloud/csx/Debug/roles/InSysWatcher/approot
LOG: Initial PrivatePath = H:\Everything\Current_Work\Web_Apps\Azure\InSysCloud\InSysCloud\InSysCloud\csx\Debug\roles\InSysWatcher\approot
Calling assembly : InSysWatcher, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: H:\Everything\Current_Work\Web_Apps\Azure\InSysCloud\InSysCloud\InSysCloud\csx\Debug\roles\InSysWatcher\approot\InSysWatcher.dll.config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///H:/Everything/Current_Work/Web_Apps/Azure/InSysCloud/InSysCloud/InSysCloud/csx/Debug/roles/InSysWatcher/approot/Microsoft.WindowsAzure.StorageClient.DLL.
WRN: Comparing the assembly name resulted in the mismatch: PUBLIC KEY TOKEN
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
Зачем VS2012 добавлять DLL для версии 1.7.0, когда 1.7.1 упоминается в самом проекте, а версия 1.7.0 включается только как содержимое и загружается в GAC при запуске приложения?