Не удалось загрузить файл или сборку Microsoft.WindowsAzure.ServiceRuntime, Version = 1.8.0.0 при развертывании в облаке.

У меня есть приложение MVC 4, которое работает нормально локально, но не выводит это сообщение при развертывании в Azure:

[FileNotFoundException: Could not load file or assembly Microsoft.WindowsAzure.ServiceRuntime, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.] Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.GetDefaultStartupInfoForCurrentRoleInstance() +0 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener..ctor() +40

Я убедился, что ссылаюсь на Microsoft.WindowsAzure.ServiceRuntime версии 1.8 и настроил локальное копирование.


person w.brian    schedule 07.01.2013    source источник
comment
Какую версию .NET вы используете? А какое семейство ОС?   -  person Sandrino Di Mattia    schedule 07.01.2013
comment
.NET 4.5, и я не могу понять, где я могу настроить или просмотреть семейство ОС для веб-сайта.   -  person w.brian    schedule 07.01.2013
comment
Вы используете веб-сайты Windows Azure или облачную службу с веб-ролью?   -  person Sandrino Di Mattia    schedule 07.01.2013
comment
Это веб-сайт Azure, который я создал на вкладке облачной службы. См. i.imgur.com/5tIEm.jpg. После создания веб-сайта оттуда он по-прежнему не считает его облачной службой, хотя возможность ее создания находится на вкладке «Облачная служба». Я знаю, что это немного сбивает с толку.   -  person w.brian    schedule 07.01.2013


Ответы (3)


Итак, из вашего снимка экрана похоже, что вы создали веб-сайт (который не является облачной службой или веб-ролью). Сборки Microsoft.WindowsAzure.Diagnostics и Microsoft.WindowsAzure.ServiceRuntime нельзя использовать на веб-сайте.

Если вы хотите создать веб-роль, откройте Visual Studio> Файл> Новый проект> Облако> Облачная служба Windows Azure> Добавить веб-роль MVC> ОК. По завершении щелкните проект Azure правой кнопкой мыши и выберите Опубликовать. Это позволит вам создать новую облачную службу, которая будет содержать вашу веб-роль. И если вы создадите свой проект таким образом, вы сможете использовать сборки Microsoft.WindowsAzure.Diagnostics и Microsoft.WindowsAzure.ServiceRuntime.

person Sandrino Di Mattia    schedule 07.01.2013
comment
Спасибо. Помечу как ответ, как только я смогу это проверить. - person w.brian; 08.01.2013
comment
Мой вопрос (и это может быть глупо) таков: если я опубликую свое приложение как сайт, я не смогу использовать его так, как я ожидал, НО оно доступно по URL-адресу (хотя и с сообщением об ошибке). Если я публикую в качестве веб-роли (как я впервые попробовал), она работает успешно, занимает место, но недоступна по URL-адресу (я получаю страницу hostingstart.html). Так где же приложение / роль? должен ли он быть по тому же URL-адресу, что и при публикации в качестве веб-сайта? - person Mr AH; 25.01.2013
comment
ИГНОРИРОВАТЬ ВЫШЕ: это очень просто, я также запутался между облачной веб-ролью и веб-сайтом и создал их с одинаковыми именами! чтобы найти свое приложение после публикации роли, это URL-адрес в последнем столбце в разделе облачных сервисов - person Mr AH; 25.01.2013

Проверьте ссылки в своем проекте и убедитесь, что все ссылки Azure помечены как Copy Local = True. Кроме того, поскольку приложение ищет среду выполнения версии 1.8, очевидно, что вы используете по крайней мере одну сборку из SDK 1.8 - C: \ Program Files \ Microsoft SDKs \ Windows Azure.NET SDK \ 2012-10 \ ref ... ПРИМЕЧАНИЕ : 2012-10. Затем проверьте используемые эталонные версии:

  • Диагностика: 1.8.0.0
  • Время выполнения: 1.8.0.0

Это несоответствие сборки обычно происходит из-за того, что у вас есть ссылки на разные версии SDK и / или ваши ссылки не помечены как copy local = true.

Что касается таксономии Azure, есть веб-сайты (на портале под веб-сайтами) и есть облачные службы, которые могут иметь либо веб-роли (веб-сайты, службы wcf), либо рабочие роли (внутренняя обработка).

Для CloudServices семейство ОС и GuestOS указываются в файле ServiceConfiguration.cscfg в элементе «ServiceConfiguration»:

<ServiceConfiguration serviceName="MyWebRole" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">

osFamily 2 = Server 2008R2 и 3 = Server 2012. osVersion указывает гостевую ОС и почти всегда должен иметь значение «*» для последней версии.

Если все остальное не удается, и правильная библиотека DLL находится в корзине, попробуйте добавить перенаправление привязки сборки в web.config:

<dependentAssembly>
  <assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" />
  <bindingRedirect oldVersion="1.0.0.0-1.8.0.0" newVersion="1.8.0.0" />
</dependentAssembly>
person viperguynaz    schedule 07.01.2013
comment
Все ссылки хорошие - 1.8 и копия локальная. Возможно, вы столкнулись с чем-то с GuestOs, в моей ServiceConfiguration для osFamily было установлено значение 1. К сожалению, я получаю ту же ошибку после изменения его на 3. - person w.brian; 07.01.2013
comment
Сначала попробуйте перенаправление привязки сборки (обновленный ответ), затем попробуйте также включить удаленный доступ и RDPing в экземпляр, чтобы убедиться, что версия DLL скопирована правильно. файлы сайта будут в E: или F: \ sitesroot \ 0 - person viperguynaz; 07.01.2013
comment
К сожалению, перенаправление зависимой сборки не сработало. Я немного новичок в Azure. Как мне подключиться к экземпляру по протоколу RDP? Одна вещь, которую я узнал из этого вопроса, заключается в том, что я, по-видимому, использую некоторую функцию предварительного просмотра веб-сайта и, следовательно, не является типичной облачной службой. Я действительно ценю твою помощь. - person w.brian; 07.01.2013

Поскольку вы получаете сообщение об ошибке при попытке запустить DiagnosticMonitor, можете ли вы проверить, что также ссылаетесь на версию Microsoft.WindowsAzure.Diagnostics версии 1.8?

Он должен находиться в C: \ Program Files \ Microsoft SDKs \ Windows Azure.NET SDK \ 2012-06 \ ref.

person Evan    schedule 07.01.2013
comment
Ссылка на Microsoft.WindowsAzure.Diagnostics выполняется из указанного вами местоположения. - person w.brian; 07.01.2013
comment
Вы развертываете веб-роль облачной службы или веб-сайт? - person Evan; 07.01.2013
comment
Если вы используете веб-роль облачной службы, попробуйте также убедиться, что у вас установлена ​​как минимум гостевая ОС v1.21 и как минимум .net 4.0. - person Evan; 07.01.2013
comment
Я почти уверен, что это веб-сайт, хотя на портале Azure различие не очень четкое. Я щелкнул вкладку «Облачные службы» и создал оттуда веб-сайт, и я думаю, что в контексте вашего вопроса это веб-сайт. Я не могу найти, где я могу настроить для него гостевую ОС, но нашел, что могу для служебной шины. Между прочим, я очень ценю вашу помощь. - person w.brian; 07.01.2013
comment
Если вы создали его на вкладке облачных сервисов, это веб-роль. Есть отдельная вкладка для создания веб-сайтов, но это функция предварительного просмотра, к которой вы должны запросить доступ для своей подписки. У вас не будет вкладки веб-сайтов, пока вы не запросите доступ - person levelnis; 07.01.2013
comment
У меня есть трехмесячная пробная подписка, на которую я недавно подписался, и похоже, что у меня есть функции предварительного просмотра, см. i.imgur.com/ymiTy.jpg. В идеале я мог бы продолжать использовать их, потому что автоматическое развертывание из git просто потрясающее. - person w.brian; 07.01.2013