Не удалось загрузить файл или сборку 'msshrtmi' или одну из ее зависимостей (доступ к хранилищу таблиц Azure) - PullRequest
48 голосов
/ 25 ноября 2011

У меня есть HTTPModule, который я использую для перенаправления трафика между веб-сайтом в моем дата-центре и веб-сайтом, работающим на платформе Azure. Этот HTTPModule получает свои правила перенаправления из хранилища таблиц Azure.

Перенаправления работают нормально на моей локальной машине разработчика, а также при работе на Azure. Однако при развертывании модуля на серверах моего центра обработки данных (IIS 7, WS 2008 R2 Standard 64bit, .NET 4.0, ASP.NET 4.0) я получаю следующую ошибку

Parser Error Message: Could not load file or assembly 'msshrtmi' or one of its dependencies. An attempt was made to load a program with an incorrect format.
Line 124:                <add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
Line 125:                <add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
Line 126:                <add assembly="*" />
Line 127:            </assemblies>
Line 128:            <buildProviders>

Source File: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config    Line: 126 

"msshrtmi.dll" фактически существует в моем каталоге bin развертывания.

Если я удаляю эту dll, сайт центра обработки данных работает нормально, но HTTPModule не может загрузить свои данные конфигурации из Table Storage и вместо этого выдает следующую ошибку

---> System.TypeInitializationException: The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'msshrtmi, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()
   --- End of inner exception stack trace ---
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_IsAvailable()

Кроме того, я вручную включил «Microsoft.WindowsAzure.ServiceRuntime.dll» как часть развертывания, чтобы обеспечить его доступность на серверах центра обработки данных.

Ответы [ 16 ]

0 голосов
/ 24 июля 2013

У меня возникла та же проблема.

Из папки / подпапок вашего решения удалите все файлы "msshrtmi.dll", а затем пересоберите.

0 голосов
/ 29 июля 2012

Мне удалось обойти эту проблему, убедившись, что я ссылаюсь на версию X64 msshrtmi.dll в GAC [1] (в соответствии с целевой платформой x64, установленной в проекте).

[1] c: \ Windows \ Assembly \ GAC_64 \ msshrtmi \ 1.7.0.0__31bf3856ad364e35>

0 голосов
/ 27 июля 2012

Я решил проблему, добавив msshrtmi в GAC.

0 голосов
/ 30 июня 2012

Мое решение этой проблемы было отправить msshrtmi.dll (и x86 и x64) с моим приложением, а затем динамически загружать их при необходимости.

См. http://jake.ginnivan.net/azure-and-msshrtmi

0 голосов
/ 20 марта 2012

Это решение работает для меня:

  • Откройте проект с помощью блокнота
  • Удалите все теги "PlatformTarget" из всех "PropertyGroup"
0 голосов
/ 08 декабря 2011

Я столкнулся с ошибкой симлара при работе с решением, которое можно было развернуть как на Windows Azure, так и на физическом оборудовании.Ошибка будет отображаться при попытке запустить решение на физическом оборудовании.Проблема возникла из-за того, что библиотеки Azure были частью решения, даже если они не требовались для локальной сборки.

Простое решение - установить Windows Azure SDK на физическое оборудование.Это установит недостающие библиотеки в GAC

...