webentwicklung-frage-antwort-db.com.de

ASP.NET Core 1.1 wird lokal einwandfrei ausgeführt, sagt jedoch bei der Veröffentlichung in Azure: "Beim Starten der Anwendung ist ein Fehler aufgetreten"

Ich habe eine ASP.NET Core-Webanwendung entwickelt, die weitgehend auf der in Visual Studio 2017 RC2 bereitgestellten MVC-Vorlage basiert. Im lokalen Debug-Modus läuft es einwandfrei, aber wenn ich versuche, es in einer von Azure gehosteten Web-App zu veröffentlichen, erhalte ich diesen Fehler:

 enter image description here

Beim Starten der Anwendung ist ein Fehler aufgetreten.

.NET Core X86 v4.1.1.0 | Microsoft.AspNetCore.Hosting-Version 1.1.0-rtm-22752 | Microsoft Windows 6.2.9200

Ich habe versucht, stdoutLogEnabled="true" in der Datei web.config einzustellen, aber es scheint keine Auswirkung zu haben, der Fehler ist derselbe.

Update:

Mit etwas Hilfe konnte ich das Protokoll abrufen und es heißt:

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.

Die Codezeile, auf die es sich in Zeile 73 bezieht, lautet:

services.AddMvc();

Update:

Meine global.json-Datei sieht folgendermaßen aus (wobei Bla.Api der Name des Projekts ist und sich die Datei im Stammordner der Lösung befindet).

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

Vielen Dank an alle für Ihre Vorschläge. Das einzige, was am Ende funktioniert hat, ist das Löschen der Azure-Webanwendung, für die ich keine Veröffentlichung durchführen konnte, und das Erstellen einer neuen App. Ich denke, einige der .dlls aus der vorherigen Laufzeitumgebung hingen noch immer herum oder wurden nicht aktualisiert. Was auch immer es war, es funktionierte neu. Hoffentlich bekomme ich diesen Fehler aber nicht noch einmal, weil man so etwas in der Produktion nicht wirklich machen kann.

Änderungen an der Datei global.json hatten scheinbar keine Auswirkungen.

Das Erstellen einer völlig neuen API aus einer Vorlage hat auch nicht geholfen. Das Problem lag bei der Azure-Webanwendung selbst, da lokal alles einwandfrei lief.

Ein weiterer sehr hilfreicher Tipp war das Hinzufügen der Protokollierung (und der Datei "logs" im Stammverzeichnis) wie in der anderen Antwort. Das zeigte mir zumindest in die richtige Richtung. Überprüfen Sie auch Ihre Laufzeit mit dotnet --version.

Nochmals vielen Dank für die Hilfe aller!

6
derf26

Da viele verschiedene Probleme diese Fehlerseite verursachen können, kann ich Folgendes dringend empfehlen, um die Hauptursache schnell und einfach zu ermitteln, ohne Azure (oder irgendeinen Server/Plattform für diese Angelegenheit) dazu zu bringen, Protokolle abzurufen.

Sie können äußerst hilfreiche entwicklerfreundliche Fehlermeldungen beim Start aktivieren , indem Sie die Aktionen.UseSetting("detailedErrors", "true")und.CaptureStartupErrors(true)in Ihrer Program.cs-Datei festlegen.

Für 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) Update für 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();
}
  • Diese Einstellungen sollten entfernt werden, sobald die Problembehandlung abgeschlossen ist, um Ihre Anwendung nicht böswilligen Angriffen auszusetzen.
121
Steve Land

Verbinden Sie sich über einen Sftp-Client und löschen Sie alles im Sitewwwroot-Ordner manuell. Neu veröffentlichen - /

Ich hatte nur Probleme, seit ich eine auf Azure gehostete Anwendung zu .net Core von MVC 4 migriert habe. 

Irgendwann vor einigen Wochen konnte ich nach einem erfolgreichen Publizieren kein Projekt zum Laufen bringen. Ich habe sogar zweimal versucht, das gesamte App Service-Profil zu löschen und mit demselben Namen neu zu erstellen. Wenn ich jedoch eine '2' an den App Service-Namen anfügte (um einen nie zuvor verwendeten App-Service zu erstellen), funktionierte das Veröffentlichen des gleichen Projekts mit 0 Änderungen einwandfrei. Was genau macht ein Löschen, wenn ich erfolgreich in einem neuen App-Service veröffentlichen kann, aber nicht in einem gelöschten und neu erstellten Dienst? Vorhandene Dateien am Ziel entfernen wurde in jeder Veröffentlichung eingecheckt, die auch nichts tat.

Ich hatte heute den gleichen Fehler wie im OP auf meiner # 2-Site. Es trat auf, nachdem versucht wurde, eine Reihe von ASP-Nuget-Paketen zu aktualisieren und erneut bereitzustellen. Eigentlich wollte ich nicht zu MyApp3 meines App-Services wechseln und entschied mich für die FTP-Informationen auf der Azure-Übersichtsseite. Ich navigierte zu Site/wwwroot und löschte alles darin vom FTP-Client. Ich habe dann die Anwendung veröffentlicht und es hat funktioniert. Ich kann nur zu dem Schluss kommen, dass das Kontrollkästchen "Löschen" nicht ordnungsgemäß funktioniert.

8
Pete

Ich habe das gleiche Problem. Nur nicht bei Azure bereitgestellt, ich verwende meinen lokalen Computer als Server und hosten ihn in 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?

Dies wurde durch das Ändern von web.config gelöst.

Erster Satz stdoutLogEnabled = "true"

Stellen Sie dann sicher, dass stdoutLogFile=".\logs\stdout" /> dieser Ordner existiert.

Und dann IIS neu starten, finden Sie das eigentliche Problem in der Protokolldatei.

4
wtf512

DELETEalle vorhandenen dll aus dem Ordner wwwroot/your_application_folder, und kopiere dann alle Ausgabedateien und -ordner.

Das Problem tritt auf, wenn die NUGETS sich selbst aktualisieren. Wenn Sie die vorhandenen Dateien nicht unter wwwroot/your_application_folder IIS bereinigen, wird der obige Fehler angezeigt.

2
Shortly FD

Sauber und wieder aufgebaut alles repariert.

2
Alex Jhones Sn

Die Frage ist wahrscheinlich doppelt vorhanden - siehe ASP.NET Core-Hosting - 500 - interner Serverfehler .


Schnelle Antwort:

Sie müssen Folgendes festlegen: stdoutLogEnabled="true" und stdoutLogFile=".\logs\stdout". Außerdem müssen Sie den Ordner logs manuell erstellen.

1
Lukasz Makowej

In meinem Fall war es, weil ich versucht habe, Benutzerverheimnisse für die Verwendung mit Fabook OAuth zu veröffentlichen. Ich weiß, dass dies eine sehr situationsabhängige Antwort ist, aber OAuth scheint heutzutage ziemlich üblich zu sein. Es stellt sich heraus, dass User Secrets nicht zur Veröffentlichung bestimmt sind. Wer wusste.

Um dies zu testen, habe ich den folgenden Code in startup.cs vorübergehend geändert. Diese Daten sollten nicht als Teil der Best Practice fest codiert werden, da sie in der Quellcodeverwaltung im Klartext enden würden.

Vor

    app.UseFacebookAuthentication(new FacebookOptions()
    {
        AppId = Configuration["Authentication:Facebook:AppId"],
        AppSecret = Configuration["Authentication:Facebook:AppSecret"]
    });

Nach dem

    app.UseFacebookAuthentication(new FacebookOptions()
    {
        AppId = "0000000000000", // your value
        AppSecret = "0000000000000000000000000000000" // your value
    });

Dann hat es funktioniert.

0
Dave

In meinem Fall lag das daran, dass ich versucht habe, einige Daten in Startup abzurufen und dbcontext in der Produktionsumgebung nicht aktualisiert wurde.

Mein ConnectionString wurde in Production geändert und die Update-Datenbank wurde ausgeführt. Das Problem wurde behoben.

0
mesut