ReflectionTypeLoadException: не удалось загрузить типы после публикации проекта asv.net mvc в Azure. - PullRequest
0 голосов
/ 20 сентября 2018

Итак, у меня есть этот проект asv.net mvc, который был создан из шаблона по умолчанию, который Visual Studio предоставляет вам в .NetFramework 4.7.2, загрузил оба пакета sensenet.service.install и sensenet.webpages.install и провел черезпроцесс их установки.После этого я нажал F5 и подтвердил, что на моей машине все работает нормально.Оттуда я решил опубликовать этот проект на Azure, и меня приветствовали, когда веб-страница была загружена

[Exception: ReflectionTypeLoadException: Could not load types. Affected types: 
Lucene.Net.Store.RAMDirectory
Lucene.Net.Search.FieldDoc
Lucene.Net.Search.NumericRangeQuery
Lucene.Net.Search.SortField
Lucene.Net.Index.Term
First message: Type 'Lucene.Net.Store.RAMDirectory' in assembly 'Lucene.Net, Version=2.9.4.301, Culture=neutral, PublicKeyToken=null' has method 'OnDeserialized' with an incorrect signature for the serialization attribute that it is decorated with.]
   SenseNet.Services.SenseNetGlobal.get_Instance() in E:\BuildAgent\_work\63\s\src\Services\SenseNetGlobal.cs:74
   SenseNet.Portal.Global.Application_Start(Object sender, EventArgs e) in E:\BuildAgent\_work\63\s\src\Services\Global.cs:15

[HttpException (0x80004005): ReflectionTypeLoadException: Could not load types. Affected types: 
Lucene.Net.Store.RAMDirectory
Lucene.Net.Search.FieldDoc
Lucene.Net.Search.NumericRangeQuery
Lucene.Net.Search.SortField
Lucene.Net.Index.Term
First message: Type 'Lucene.Net.Store.RAMDirectory' in assembly 'Lucene.Net, Version=2.9.4.301, Culture=neutral, PublicKeyToken=null' has method 'OnDeserialized' with an incorrect signature for the serialization attribute that it is decorated with.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +10062153
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +118
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +173
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +336
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +296

[HttpException (0x80004005): ReflectionTypeLoadException: Could not load types. Affected types: 
Lucene.Net.Store.RAMDirectory
Lucene.Net.Search.FieldDoc
Lucene.Net.Search.NumericRangeQuery
Lucene.Net.Search.SortField
Lucene.Net.Index.Term
First message: Type 'Lucene.Net.Store.RAMDirectory' in assembly 'Lucene.Net, Version=2.9.4.301, Culture=neutral, PublicKeyToken=null' has method 'OnDeserialized' with an incorrect signature for the serialization attribute that it is decorated with.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +10043444
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +95
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254

В этом выпуске github был комментарий https://github.com/dotnet/standard/issues/300, в котором говорилось, что этобыло исправлено в .NetFramework 4.7.2, но, похоже, это не так.

Поэтому мой вопрос: почему не возникло это исключение, когда я запускал этот проект локально, а не опубликовал его на Azure?

1 Ответ

0 голосов
/ 21 сентября 2018

вы правы, полагая, что это связано с исправлением в .Net Framework.Это произошло в 4.7.2, поскольку обнаруженная вами проблема двоичной сериализации / пересылки типов.

(более подробную информацию о переносе sensenet в .Net Standard можно найти здесь )

Мы сталкиваемся с той же проблемой в нашей тестовой среде Azure, и причина в том, что 4.7.2 еще не развернут в службе приложений Azure (или, по крайней мере, не везде).Первоначальный план состоял в том, чтобы это произошло в сентябре 2018 года, но они перенесли его на октябрь в соответствии с этой проблемой .

Это не то, что мы можем контролировать, поэтому решение заключается в

дождитесь, пока Microsoft развернет 4.7.2 для службы приложений

Чтобы проверить, поддерживается ли .Net Framework в вашей среде Azure, проверьте эту статью .

О развертывании sensenet в службе приложений

То, что вы пробовали (развертывание sn в Azure), технически возможно, все, что вам нужно, уже опубликовано, но подробных рекомендаций для этого пока нет.Мы работаем над этим.

В двух словах:

  1. разверните базу данных (скорее всего, путем резервного копирования / восстановления) на SQL Server Azure.
  2. настроить обмен сообщениями, потому что ваши приложения должны общаться друг с другомВ локальной среде мы обычно используем MSMQ, но это не доступно в облаке, поэтому мы предлагаем провайдера сообщений RabbitMQ для sensenet.
  3. индексация: это сложнее, потому чтовам нужно будет раскрутить виртуальную машину для централизованной службы поиска и установить ее там.

План состоит в том, что все это будет сделано проще и проще вбудущее, но спасибо за новшество чего-то нового:).

...