it-swarm.com.ru

ASP.NET Core 1.1 работает нормально локально, но при публикации в Azure появляется сообщение "Произошла ошибка при запуске приложения".

Я занимаюсь разработкой веб-приложения ASP.NET Core, основанного главным образом на шаблоне MVC, предоставленном в Visual Studio 2017 RC2. Он прекрасно работает в режиме локальной отладки, но когда я пытаюсь опубликовать его в размещенном в Azure веб-приложении, я получаю следующую ошибку:

 enter image description here

Произошла ошибка при запуске приложения.

.NET Core X86 v4.1.1.0 | Microsoft.AspNetCore.Hosting version 1.1.0-ртм-22752 | Microsoft Windows 6.2.9200

Я попытался установить stdoutLogEnabled="true" в файле web.config, но, похоже, ничего не изменилось, ошибка та же.

Обновление:

С некоторой помощью мне удалось получить журнал, и он говорит:

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();

Обновление:

Мой файл global.json выглядит следующим образом (где Bla.Api - это имя проекта, а файл находится в корневой папке решения).

{
  "projects": [ "Bla.Api" ],
  "sdk": {
    "version": "1.1.0"
  }
}
43
derf26

Спасибо всем за ваши предложения. Единственное, что в итоге сработало, - это удаление веб-приложения Azure, которое я не смог опубликовать, и создание нового. Я думаю, может быть, некоторые из .dll из предыдущей среды выполнения все еще зависали или не обновлялись ... Что бы это ни было, воссоздание его работало. Надеюсь, я не получу эту ошибку снова, потому что вы не можете делать такие вещи в производстве.

Внесение изменений в файл global.json, похоже, не дало никаких результатов.

Создание совершенно нового API из шаблона также не помогло, проблема была связана с самим веб-приложением Azure, поскольку все работало локально.

Другим очень полезным советом было добавление регистрации (и файла «logs» в корне) согласно другому ответу. Это по крайней мере указало мне в правильном направлении. Также проверяет время выполнения с помощью dotnet --version.

Еще раз спасибо за помощь всем!

6
derf26

Поскольку эта страница ошибки может вызывать множество различных проблем, я настоятельно рекомендую следующее, чтобы быстро и легко определить первопричину, не борясь с Azure (или каким-либо другим сервером/платформой) для получения журналов.

Вы можете включить чрезвычайно полезные удобные для разработчиков сообщения об ошибках при запуске , установив действия.UseSetting("detailedErrors", "true")и.CaptureStartupErrors(true)в файле Program.cs.

Для ASP.NET Core 1.x

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();
}

(2018/07) Обновление для ASP.NET Core 2.1

public class Program  
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .CaptureStartupErrors(true)
            .UseSetting("detailedErrors", "true")
            .UseStartup<Startup>()
            .Build();
}
  • Эти параметры следует удалить, как только устранение неполадок завершится, чтобы приложение не подвергалось вредоносным атакам.
121
Steve Land

Подключитесь через клиент sftp и удалите все в папке site/wwwroot вручную. Переиздать

У меня не было ничего, кроме проблем, поскольку я перенес приложение, размещенное на Azure, на ядро ​​.net из MVC 4. 

В какой-то момент несколько недель назад мне не удалось запустить проект после успешной публикации. Я даже дважды пытался удалить весь профиль службы приложений и заново создать его с тем же именем. Однако, когда я добавил '2' к имени службы приложений (чтобы создать никогда не использовавшуюся службу приложений), публикация точно такого же проекта с 0 изменениями работала отлично. Что именно делает удаление, если я могу успешно опубликовать новую службу приложений, но не удаленную и воссозданную? Удаление существующих файлов в пункте назначения проверялось в каждой публикации, что тоже ничего не делало.

Сегодня у меня была та же ошибка, что и в ОП на моем сайте №2. Это произошло после попытки обновить несколько пакетов asp nuget и выполнить повторное развертывание. Не желая переходить на итерацию myApp3 службы приложений, я решил использовать информацию FTP, предоставленную на обзорной странице Azure. Я перешел на сайт/wwwroot и удалил все внутри с FTP-клиента. Затем я опубликовал приложение, и оно заработало. Я могу только заключить, что флажок «Удалить» не работает должным образом.

8
Pete

У меня такая же проблема. Просто не развернут в 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, вы можете найти реальную проблему в файле журнала.

4
wtf512

УДАЛИТЬвсе существующие dll из wwwroot/your_application_folder, затем скопировать все опубликованные выходные файлы и папки.

Проблема возникает, когда NUGETS обновляет его самостоятельно. Если вы не очистите существующие файлы в каталоге wwwroot/your_application_folder IIS, появится сообщение об ошибке выше.

2
Shortly FD

Вопрос, вероятно, дублирован - обратитесь к хостинг ASP.NET Core - 500 внутренняя ошибка сервера .


Быстрый ответ:

Вам необходимо установить: stdoutLogEnabled="true" и stdoutLogFile=".\logs\stdout". Также вам нужно создать папку logs вручную.

1
Lukasz Makowej

В моем случае это было потому, что я пытался опубликовать пользовательские секреты для использования с 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
    });

Тогда это сработало.

0
Dave

В моем случае это было связано с тем, что я пытался получить некоторые данные в автозагрузке, а dbcontext не обновлялся в производственной среде.

Поменял мою ConnectionString на Production и запустил Update-Database, и проблема решена.

0
mesut