Я запускаю пользовательскую версию EntityFrameworkCore, которая имеет некоторые дополнительные функции, которые мне нужны. С четверга 25.07.2019 я получаю MissingMethodException для 3 из 4 моих планов обслуживания приложений: разработка, этап и производство. Тестовая, рабочая и рабочая среда синхронизированы и содержат один и тот же код. Поэтому очень странно, что тестовая среда все еще работает. У меня также есть интеграционные тесты, настроенные в конвейере Azure Devops. Конвейер выполняет следующие задачи: использование dotnet, восстановление dotnet, сборка dotnet, тестирование dotnet, публикация dotnet. И все испытания проходят успешно. Только на сервисе приложений одни и те же запросы не работают.
Это очень страшно, когда что-то, что нормально работало в течение месяца, вдруг в одночасье перестает работать полностью. Без каких-либо изменений в коде.
Я читал, что MissingMethodException указывает на проблему с DLL (System.MissingMethodException: метод не найден?). MissingMethodException возникает в пользовательском коде, поэтому проблема с DLL кажется логичной, но я не могу понять, почему тогда все еще работает в тестовой среде и почему это работало раньше! Как я могу правильно диагностировать это?
@HenkHolterman Спасибо за ваш ответ, надеюсь, я добавил информацию, которую вы хотели.
Да, это полезно. Возможно, вы могли бы использовать Kudu для проверки того, что установлено на сервере, и следить за временными метками задействованных DLL. Это довольно подозрительно, потому что Core3/preview7 был выпущен примерно в этот же день.
В качестве обходного пути сначала обновите/консолидируйте последние пакеты 2.2. Затем разверните это на стадии. Другим вариантом было бы развертывание как автономное.
Но стоит открыть вопрос на GitHub EF или с Azure. Когда вы можете быть уверены, что ваш «Custom EF» не виноват.
@HenkHolterman Спасибо за ваш ответ. Развертывание как автономное работает, поэтому, по крайней мере, у меня уже есть один обходной путь. Но я не знаю, почему это работает, что для меня является самым важным элементом. Есть ли у вас какие-либо идеи? Является ли развертывание автономным рекомендуемым подходом?
Ну вот аналогичная проблема несколько лет назад. Что-то было обновлено, что должно было быть обратно совместимо, но это не так.





По-видимому, .NET Core зависит от EntityFrameworkCore. Из-за этой зависимости при установке пакета SDK для .NET Core поставляются собственные библиотеки DLL Microsoft.EntityFrameworkCore. Это не проблема, если мои пользовательские DLL EntityFrameworkCore имеют более позднюю версию, чем установленные SDK. Но версии, которые они применяют, похоже, не являются версиями EntityFrameworkCore, а скорее версиями используемой среды выполнения. На прошлой неделе за кулисами произошло обновление приложений API. Это означало, что была установлена среда выполнения 2.2.6. В этой среде выполнения есть библиотеки DLL EntityFrameworkCore с более высоким номером версии, чем моя пользовательская. Из-за этого произошло внезапное переключение DLL, используемых приложением, и пользовательский метод больше не был найден, что привело к MissingMethodException.
Я диагностировал проблему после установки последней версии .NET SDK. Это привело к тому, что была установлена последняя среда выполнения, и мое решение вело себя так же локально, как и развернутые. Я открыл окно модулей (Отладка -> Windows -> Модули) и понял, что происходит.
Это означает, что мне больше не нужны автономные развертывания, но тем не менее, вероятно, стоит изучить это, чтобы избежать критических изменений из-за случайных обновлений.
Какие версии Core, EF и ASP.NET? Где вы используете 3.0/превью?