ASP.NET Core 1.1 работает нормально локально, но при публикации в Azure говорится: "Ошибка при запуске приложения".
Я разрабатываю веб-приложение ASP.NET Core, основанное в основном на шаблоне MVC, представленном в Visual Studio 2017 RC2. Он работает очень хорошо в локальном режиме отладки, но когда я пытаюсь опубликовать его в веб-приложении, находящемся в Azure, я получаю эту ошибку:
![введите описание изображения здесь]()
Произошла ошибка при запуске приложения.
.NET Core X86 v4.1.1.0 | Версия Microsoft.AspNetCore.Hosting 1.1.0-rtm-22752 | Microsoft Windows 6.2.9200
Я пробовал настройку stdoutLogEnabled="true"
в файле web.config, но, похоже, это не имеет никакого эффекта, ошибка такая же.
Update:
С некоторой помощью мне удалось получить журнал, и он говорит:
Application startup exception: System.TypeLoadException: Could not load type 'System.IO.File' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e'.
at Microsoft.Extensions.DependencyModel.FileWrapper.OpenRead(String path)
at Microsoft.Extensions.DependencyModel.DependencyContextLoader.LoadEntryAssemblyContext(IDependencyContextReader reader)
at Microsoft.Extensions.DependencyModel.DependencyContextLoader.Load(Assembly assembly)
at Microsoft.Extensions.DependencyModel.DependencyContext.Load(Assembly assembly)
at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.DiscoverAssemblyParts(String entryPointAssemblyName)
at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)
at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services)
at Bla.Api.Startup.ConfigureServices(IServiceCollection services) in C:\Users\user\Source\Workspaces\Bla\Bla.Api\src\Bla.Api\Startup.cs:line 73
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
Hosting environment: Production
Content root path: D:\home\site\wwwroot
Now listening on: http://localhost:1264
Application started. Press Ctrl+C to shut down.
Линией кода, на которую она ссылается в строке 73, является:
services.AddMvc();
Update:
Мой файл global.json выглядит так (где Bla.Api - это имя проекта, а файл находится в корневой папке решения).
{
"projects": [ "Bla.Api" ],
"sdk": {
"version": "1.1.0"
}
}
Ответы
Ответ 1
Спасибо всем за ваши предложения. Единственное, что работало в конце концов, это удаление веб-приложения Azure, которое я не мог опубликовать, и создание совершенно нового. Я предполагаю, что некоторые из DLL файлов из предыдущей среды выполнения все еще зависали или не обновлялись... Как бы то ни было, воссоздание сработало. Надеюсь, я не получу эту ошибку еще раз, потому что вы не можете действительно делать такие вещи на производстве.
Внесение изменений в файл global.json казалось неэффективным.
Создание полностью нового API из шаблона тоже не помогло, проблема была в самом Azure Web App, поскольку все было нормально локально.
Еще один очень полезный совет - добавить журнал (и файл "logs" в корневой каталог) в соответствии с другим ответом. Это, по крайней мере, указывало мне в правильном направлении. Также проверяйте время выполнения dotnet --version
.
Еще раз спасибо за помощь!
Ответ 2
Поскольку многие проблемы могут вызвать эту страницу ошибок, я могу настоятельно рекомендовать следующее, чтобы быстро и легко определить основную причину, не нарушая при этом Azure (или любой сервер/платформу) для получения журналов.
При запуске вы можете включить чрезвычайно полезные сообщения об ошибках для разработчиков, установив в своей программе действия .UseSetting("detailedErrors", "true")
и .CaptureStartupErrors(true)
. cs, следующим образом:
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseSetting("detailedErrors", "true")
.UseIISIntegration()
.UseStartup<Startup>()
.CaptureStartupErrors(true)
.Build();
host.Run();
}
Очевидно, что эти настройки должны быть удалены, как только ваше устранение неполадок будет завершено, чтобы не подвергать ваше приложение вредоносным атакам.
Ответ 3
Подключиться через клиент sftp и удалить все в папке site/wwwroot вручную. Опубликуйте
У меня не было ничего, кроме проблем, так как я перенесла приложение, которое я разместил на Azure для ядра .net из MVC 4.
В какой-то момент несколько недель назад мне не удалось запустить проект после успешной публикации. Я даже дважды пытался удалить весь профиль службы приложений и воссоздать его с тем же именем. Однако, когда я добавил "2" в имя службы приложений (чтобы создать никогда ранее не использовавшуюся службу приложений), публикация того же проекта с 0 изменениями работала отлично. Что именно делает удаление, если я могу успешно опубликовать новую службу приложений, но не удаленный и воссозданный? Удалить существующие файлы по месту назначения было отмечено в каждой публикации, что тоже ничего не делало.
У меня была такая же ошибка сегодня, как изображено в OP на моем сайте # 2. Это произошло после попытки обновления нескольких пакетов asp nuget и повторного развертывания. На самом деле, не желая переходить на итерацию myApp3 службы моего приложения, я решил использовать информацию FTP, представленную на странице обзора azure. Я перешел на сайт /wwwroot и удалил все из FTP-клиента. Затем я опубликовал приложение, и он сработал. Я могу только сделать вывод, что флажок "Удалить" работает неправильно.
Ответ 4
У меня такая же проблема. Просто не развернувшись на Azure, я использую свой локальный компьютер в качестве сервера и размещаю его в IIS.
An error occurred while starting the application.
.NET Core X64 v4.1.1.0 | Microsoft.AspNetCore.Hosting version 1.1.1 | Microsoft Windows 10.0.14393 | Need help?
И это было решено путем изменения web.config.
Первый набор stdoutLogEnabled = "true"
Затем убедитесь, что stdoutLogFile=".\logs\stdout" />
эта папка существует.
И затем перезапустите IIS, вы можете найти реальную проблему в файле журнала.
Ответ 5
УДАЛИТЬ всю существующую dll из wwwroot/your_application_folder, затем скопируйте все выходные файлы и папки публикации.
Проблема возникает, когда NUGETS обновляет ее самостоятельно. Если вы не очистите существующие файлы в wwwroot/your_application_folder, IIS выдаст ошибку выше.
Ответ 6
Вопрос, вероятно, дублируется - обратитесь к ASP.NET Core хостинг - 500 внутренних ошибок сервера.
Быстрый ответ:
Вам нужно установить: stdoutLogEnabled="true"
и stdoutLogFile=".\logs\stdout"
. Кроме того, вам нужно создать папку logs
вручную.
Ответ 7
В моем случае это было потому, что я пытался публиковать секреты пользователей для использования с Fabook OAuth. Я знаю, что очень ситуативный конкретный ответ, но OAuth кажется довольно распространенным в этот день. Оказывается, секреты пользователей не публикуются. Кто знал.
Итак, чтобы проверить это, я временно изменил следующий код в startup.cs. Эти данные не должны быть жестко закодированы как часть лучшей практики, так как в конечном итоге это будет иметь четкий текст в контроле источника.
До
app.UseFacebookAuthentication(new FacebookOptions()
{
AppId = Configuration["Authentication:Facebook:AppId"],
AppSecret = Configuration["Authentication:Facebook:AppSecret"]
});
После
app.UseFacebookAuthentication(new FacebookOptions()
{
AppId = "0000000000000", // your value
AppSecret = "0000000000000000000000000000000" // your value
});
Затем он работал.
Ответ 8
В моем случае это было потому, что я пытался получить некоторые данные в Startup, а dbcontext не обновлялся в рабочей среде.
Изменена моя ConnectionString для производства и запущена Update-Database, и проблема решена.