Подтвердить что ты не робот

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"
  }
}
4b9b3361

Ответ 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 выдаст ошибку выше.

Ответ 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, и проблема решена.