ASP.NET Core プロジェクトのトラブルシューティングとデバッグTroubleshoot and debug ASP.NET Core projects

作成者: Rick AndersonBy Rick Anderson

次のリンクを使用すると、トラブルシューティングのガイダンスが得られます。The following links provide troubleshooting guidance:

.NET Core SDK 警告.NET Core SDK warnings

.NET Core SDK の32ビットバージョンと64ビットバージョンの両方がインストールされていますBoth the 32-bit and 64-bit versions of the .NET Core SDK are installed

ASP.NET Core の [新しいプロジェクト] ダイアログで、次の警告が表示される場合があります。In the New Project dialog for ASP.NET Core, you may see the following warning:

.NET Core SDK の32ビットバージョンと64ビットバージョンの両方がインストールされています。Both 32-bit and 64-bit versions of the .NET Core SDK are installed. ' C:\Program Files\dotnet\sdk\' にインストールされている64ビットバージョンのテンプレートのみが表示されます。Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

この警告は、 .NET Core SDKの32ビット (x86) バージョンと64ビット (x64) バージョンの両方がインストールされている場合に表示されます。This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. 両方のバージョンがインストールされる可能性のある一般的な理由は次のとおりです。Common reasons both versions may be installed include:

  • 最初は、32ビットのコンピューターを使用して .NET Core SDK インストーラーをダウンロードした後、それを全体にコピーして64ビットのコンピューターにインストールしました。You originally downloaded the .NET Core SDK installer using a 32-bit machine but then copied it across and installed it on a 64-bit machine.
  • 32ビット .NET Core SDK が別のアプリケーションによってインストールされました。The 32-bit .NET Core SDK was installed by another application.
  • 間違ったバージョンがダウンロードされ、インストールされました。The wrong version was downloaded and installed.

この警告を回避するには、32ビットの .NET Core SDK をアンインストールします。Uninstall the 32-bit .NET Core SDK to prevent this warning. アンインストールコントロール パネルの > プログラムと機能 > のアンインストールと変更プログラムです。Uninstall from Control Panel > Programs and Features > Uninstall or change a program. 警告が発生する理由とその影響について理解している場合は、警告を無視してもかまいません。If you understand why the warning occurs and its implications, you can ignore the warning.

.NET Core SDK が複数の場所にインストールされていますThe .NET Core SDK is installed in multiple locations

ASP.NET Core の [新しいプロジェクト] ダイアログで、次の警告が表示される場合があります。In the New Project dialog for ASP.NET Core, you may see the following warning:

.NET Core SDK が複数の場所にインストールされています。The .NET Core SDK is installed in multiple locations. ' C:\Program Files\dotnet\sdk\' にインストールされている Sdk のテンプレートのみが表示されます。Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

.NET Core SDK の少なくとも 1 つのインストール ディレクトリの外部にある場合、このメッセージが表示 c:\Program Files\dotnet\sdk\ します。You see this message when you have at least one installation of the .NET Core SDK in a directory outside of C:\Program Files\dotnet\sdk\. 通常、このエラーは、MSI インストーラーではなくコピー/貼り付けを使用してコンピューターに .NET Core SDK が展開されている場合に発生します。Usually this happens when the .NET Core SDK has been deployed on a machine using copy/paste instead of the MSI installer.

この警告を回避するには、32ビットの .NET Core Sdk とランタイムをすべてアンインストールします。Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. アンインストールコントロール パネルの > プログラムと機能 > のアンインストールと変更プログラムです。Uninstall from Control Panel > Programs and Features > Uninstall or change a program. 警告が発生する理由とその影響について理解している場合は、警告を無視してもかまいません。If you understand why the warning occurs and its implications, you can ignore the warning.

.NET Core Sdk が検出されませんでしたNo .NET Core SDKs were detected

  • ASP.NET Core の Visual Studio の [新しいプロジェクト] ダイアログで、次の警告が表示される場合があります。In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    .NET Core Sdk が検出されませんでした。環境変数 PATHに含まれていることを確認してください。No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • dotnet コマンドを実行すると、次のような警告が表示されます。When executing a dotnet command, the warning appears as:

    インストールされている dotnet Sdk を見つけることができませんでした。It was not possible to find any installed dotnet SDKs.

これらの警告は、環境変数 PATH が、コンピューター上の .NET Core Sdk を指していない場合に表示されます。These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. この問題を解決するには、次の手順を実行します。To resolve this problem:

  • .NET Core SDK をインストールします。Install the .NET Core SDK. .Net ダウンロードから最新のインストーラーを入手します。Obtain the latest installer from .NET Downloads.
  • PATH 環境変数が、SDK がインストールされている場所を指していることを確認します (64 ビット/x64 の場合はC:\Program Files\dotnet\、32ビット/x86 の場合は C:\Program Files (x86)\dotnet\)。Verify that the PATH environment variable points to the location where the SDK is installed (C:\Program Files\dotnet\ for 64-bit/x64 or C:\Program Files (x86)\dotnet\ for 32-bit/x86). SDK インストーラーでは、通常、PATHが設定されます。The SDK installer normally sets the PATH. 同じコンピューターには、常に同じビット Sdk とランタイムをインストールします。Always install the same bitness SDKs and runtimes on the same machine.

.NET Core ホスティングバンドルのインストール後に SDK が見つからないMissing SDK after installing the .NET Core Hosting Bundle

.Net coreホスティングバンドルをインストールすると、.net core ランタイムをインストールするときに、.net core の32ビット (x86) バージョン (C:\Program Files (x86)\dotnet\) を指すように PATH が変更されます。Installing the .NET Core Hosting Bundle modifies the PATH when it installs the .NET Core runtime to point to the 32-bit (x86) version of .NET Core (C:\Program Files (x86)\dotnet\). これにより、32ビット (x86) .NET Core dotnet コマンドが使用されている場合 (.Net Core sdk が検出されなかった場合)、sdk が不足する可能性があります。This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). この問題を解決するには、PATHC:\Program Files (x86)\dotnet\ する前に C:\Program Files\dotnet\ を位置に移動します。To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

アプリからデータを取得するObtain data from an app

アプリが要求に応答できる場合は、ミドルウェアを使用してアプリから次のデータを取得できます。If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • 要求 – メソッド、スキーム、ホスト、pathbase、path、クエリ文字列、ヘッダーRequest – Method, scheme, host, pathbase, path, query string, headers
  • 接続 – リモート IP アドレス、リモートポート、ローカル IP アドレス、ローカルポート、クライアント証明書Connection – Remote IP address, remote port, local IP address, local port, client certificate
  • Id – 名、表示名Identity – Name, display name
  • 構成設定Configuration settings
  • 環境変数Environment variables

Startup.Configure メソッドの要求処理パイプラインの先頭に、次のミドルウェアコードを配置します。Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. 開発環境でのみコードが実行されるように、ミドルウェアが実行される前に環境がチェックされます。The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

環境を取得するには、次のいずれかの方法を使用します。To obtain the environment, use either of the following approaches:

  • Startup.Configure メソッドに IHostingEnvironment を挿入し、ローカル変数を使用して環境を確認します。Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. 次のサンプルコードは、この方法を示しています。The following sample code demonstrates this approach.

  • 環境を Startup クラスのプロパティに割り当てます。Assign the environment to a property in the Startup class. プロパティを使用して環境を確認します (たとえば、if (Environment.IsDevelopment()))。Check the environment using the property (for example, if (Environment.IsDevelopment())).

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    IConfiguration config)
{
    if (env.IsDevelopment())
    {
        app.Run(async (context) =>
        {
            var sb = new StringBuilder();
            var nl = System.Environment.NewLine;
            var rule = string.Concat(nl, new string('-', 40), nl);
            var authSchemeProvider = app.ApplicationServices
                .GetRequiredService<IAuthenticationSchemeProvider>();

            sb.Append($"Request{rule}");
            sb.Append($"{DateTimeOffset.Now}{nl}");
            sb.Append($"{context.Request.Method} {context.Request.Path}{nl}");
            sb.Append($"Scheme: {context.Request.Scheme}{nl}");
            sb.Append($"Host: {context.Request.Headers["Host"]}{nl}");
            sb.Append($"PathBase: {context.Request.PathBase.Value}{nl}");
            sb.Append($"Path: {context.Request.Path.Value}{nl}");
            sb.Append($"Query: {context.Request.QueryString.Value}{nl}{nl}");

            sb.Append($"Connection{rule}");
            sb.Append($"RemoteIp: {context.Connection.RemoteIpAddress}{nl}");
            sb.Append($"RemotePort: {context.Connection.RemotePort}{nl}");
            sb.Append($"LocalIp: {context.Connection.LocalIpAddress}{nl}");
            sb.Append($"LocalPort: {context.Connection.LocalPort}{nl}");
            sb.Append($"ClientCert: {context.Connection.ClientCertificate}{nl}{nl}");

            sb.Append($"Identity{rule}");
            sb.Append($"User: {context.User.Identity.Name}{nl}");
            var scheme = await authSchemeProvider
                .GetSchemeAsync(IISDefaults.AuthenticationScheme);
            sb.Append($"DisplayName: {scheme?.DisplayName}{nl}{nl}");

            sb.Append($"Headers{rule}");
            foreach (var header in context.Request.Headers)
            {
                sb.Append($"{header.Key}: {header.Value}{nl}");
            }
            sb.Append(nl);

            sb.Append($"Websockets{rule}");
            if (context.Features.Get<IHttpUpgradeFeature>() != null)
            {
                sb.Append($"Status: Enabled{nl}{nl}");
            }
            else
            {
                sb.Append($"Status: Disabled{nl}{nl}");
            }

            sb.Append($"Configuration{rule}");
            foreach (var pair in config.AsEnumerable())
            {
                sb.Append($"{pair.Path}: {pair.Value}{nl}");
            }
            sb.Append(nl);

            sb.Append($"Environment Variables{rule}");
            var vars = System.Environment.GetEnvironmentVariables();
            foreach (var key in vars.Keys.Cast<string>().OrderBy(key => key, 
                StringComparer.OrdinalIgnoreCase))
            {
                var value = vars[key];
                sb.Append($"{key}: {value}{nl}");
            }

            context.Response.ContentType = "text/plain";
            await context.Response.WriteAsync(sb.ToString());
        });
    }
}

ASP.NET Core アプリのデバッグDebug ASP.NET Core apps

次のリンクは、ASP.NET Core アプリのデバッグに関する情報を提供します。The following links provide information on debugging ASP.NET Core apps.