web-dev-qa-db-ja.com

ASP.NET Core 1.1はローカルで正常に実行されますが、Azureへの発行時に「アプリケーションの起動中にエラーが発生しました」と表示されます。

主にVisual Studio 2017 RC2で提供されるMVCテンプレートに基づいて、ASP.NET Core Webアプリを開発しています。ローカルデバッグモードでは正常に動作しますが、AzureでホストされたWebアプリに公開しようとすると、次のエラーが表示されます。

enter image description here

アプリケーションの起動中にエラーが発生しました。

.NET Core X86 v4.1.1.0 | Microsoft.AspNetCore.Hostingバージョン1.1.0-rtm-22752 | Microsoft Windows 6.2.9200

Web.configファイルでstdoutLogEnabled="true"を設定しようとしましたが、効果がないようです。エラーは同じです。

更新:

いくつかの助けを借りて、ログを取得することができました。

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"
  }
}
50
derf26

ご提案いただきありがとうございます。最終的に機能したのは、公開できなかったAzure Webアプリを削除し、新しいアプリを作成することだけです。以前のランタイム環境の.dllの一部がまだぶら下がっていたり、更新されていなかったりするのではないかと思われます。ただし、実稼働環境ではこの種の処理を実際に実行できないため、このエラーが再び発生しないことを願っています。

Global.jsonファイルに変更を加えても効果はないようです。

テンプレートからまったく新しいAPIを作成しても、Azure Webアプリ自体に問題はありませんでした。すべてがローカルで正常に実行されていたためです。

別の非常に役立つヒントは、他の回答に従ってロギング(およびルートの「ログ」ファイル)を追加することでした。それは少なくとも正しい方向に私を向けた。また、dotnet --versionでランタイムを確認します。

みんなの助けに感謝します!

6
derf26

多くのさまざまな問題がこのエラーページの原因になる可能性があるため、ログを取得するためにAzure(またはそのためのサーバー/プラットフォーム)を苦労せずに、根本原因を迅速かつ簡単に特定するために、以下を強くお勧めします。

Program.csファイルで.UseSetting("detailedErrors", "true")および.CaptureStartupErrors(true)アクションを設定することにより、非常に役立つ起動時の開発者に優しいエラーメッセージを有効にできます。

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();
}
  • これらの設定は、アプリケーションが悪意のある攻撃にさらされないように、トラブルシューティングが完了したらすぐに削除する必要があります。
130
Steve Land

sftpクライアント経由で接続し、site/wwwrootフォルダー内のすべてを手動で削除します。再公開

AzureでホストしているアプリケーションをMVC 4から.netコアに移行してから、問題しかありませんでした。

数週間前のある時点で、公開が成功した後にプロジェクトを実行することができませんでした。 App Serviceプロファイル全体を削除し、同じ名前で再作成しようと2回試みました。ただし、App Service名に「2」を追加した場合(これまでに使用したことのないApp Serviceを作成するため)、まったく同じプロジェクトを0の変更で公開すると完全に機能しました。新しいアプリサービスに正常に公開できても、削除して再作成したアプリサービスではない場合、削除はどうなりますか?各パブリッシュで[宛先の既存ファイルを削除]がオンになっているため、何も実行されませんでした。

今日、私の#2サイトのOPに描かれているのと同じエラーがありました。多数のasp nugetパッケージを更新して再デプロイしようとした後に発生しました。アプリサービスの反復myApp3に進む必要が本当にないので、Azureの概要ページで提供されるFTP情報を使用することにしました。 Site/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を再起動すると、ログファイルで実際の問題を見つけることができます。

5
wtf512

DELETE wwwroot/your_application_folderのすべての既存のdllを作成し、すべての発行出力ファイルとフォルダーをコピーします。

この問題は、NUGETSが自己更新したときに発生します。 wwwroot/your_application_folderの下にある既存のファイルを削除しない場合、IISは上記のエラーを表示します。

3
Fuat

すべてを修正して再構築します。

2
Alex Jhones Sn

質問はおそらく重複しています- ASP.NET Core hosting-500 internal server error を参照してください。


素早い回答:

次を設定する必要があります: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

私の場合、それはStartupでデータを取得しようとしていたため、実稼働環境ではdbcontextが更新されなかったためです。

ConnectionStringを実稼働環境に変更し、Update-Databaseを実行し、問題を解決しました。

0
mesut