Risolvere i problemi relativi ai progetti ASP.NET CoreTroubleshoot ASP.NET Core projects

Di Rick AndersonBy Rick Anderson

I collegamenti seguenti forniscono indicazioni sulla risoluzione dei problemi:The following links provide troubleshooting guidance:

Avvisi di .NET Core SDK.NET Core SDK warnings

Sono installate entrambe le versioni a 32 bit e 64 bit del .NET Core SDKBoth the 32-bit and 64-bit versions of the .NET Core SDK are installed

Nella finestra di dialogo nuovo progetto per ASP.NET Core, è possibile che venga visualizzato il seguente avviso:In the New Project dialog for ASP.NET Core, you may see the following warning:

Sono installate entrambe le versioni a 32 bit e a 64 bit del .NET Core SDK.Both 32-bit and 64-bit versions of the .NET Core SDK are installed. Vengono visualizzati solo i modelli delle versioni a 64 bit installate in '\C:\Program\files\DotNet SDK '.Only templates from the 64-bit versions installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Questo avviso viene visualizzato quando vengono installate entrambe le versioni a 32 bit (x86) e 64-bit (x64) del .NET Core SDK .This warning appears when both 32-bit (x86) and 64-bit (x64) versions of the .NET Core SDK are installed. Di seguito sono elencati i motivi comuni per cui è possibile installare entrambe le versioni:Common reasons both versions may be installed include:

  • Il programma di installazione .NET Core SDK è stato scaricato in origine con un computer a 32 bit, ma è stato copiato e installato in un computer a 64 bit.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.
  • Il .NET Core SDK a 32 bit è stato installato da un'altra applicazione.The 32-bit .NET Core SDK was installed by another application.
  • È stata scaricata e installata la versione errata.The wrong version was downloaded and installed.

Disinstallare la .NET Core SDK a 32 bit per evitare questo avviso.Uninstall the 32-bit .NET Core SDK to prevent this warning. Disinstallare da Pannello > di controlloprogrammi e funzionalità > disinstallare o modificare un programma.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Se si comprende il motivo per cui si verifica l'avviso e le relative implicazioni, è possibile ignorare l'avviso.If you understand why the warning occurs and its implications, you can ignore the warning.

Il .NET Core SDK viene installato in più posizioniThe .NET Core SDK is installed in multiple locations

Nella finestra di dialogo nuovo progetto per ASP.NET Core, è possibile che venga visualizzato il seguente avviso:In the New Project dialog for ASP.NET Core, you may see the following warning:

Il .NET Core SDK viene installato in più posizioni.The .NET Core SDK is installed in multiple locations. \Vengono visualizzati solo i\modelli degli SDK installati in ' C: programmi\DotNet\SDK '.Only templates from the SDKs installed at 'C:\Program Files\dotnet\sdk\' are displayed.

Questo messaggio viene visualizzato quando si dispone di almeno un'installazione del .NET Core SDK in una directory al di fuori di 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\. Questa situazione si verifica in genere quando il .NET Core SDK è stato distribuito in un computer tramite copia/incolla anziché il programma di installazione MSI.Usually this happens when the .NET Core SDK has been deployed on a machine using copy/paste instead of the MSI installer.

Disinstallare tutti i runtime e gli SDK di .NET Core a 32 bit per evitare questo avviso.Uninstall all 32-bit .NET Core SDKs and runtimes to prevent this warning. Disinstallare da Pannello > di controlloprogrammi e funzionalità > disinstallare o modificare un programma.Uninstall from Control Panel > Programs and Features > Uninstall or change a program. Se si comprende il motivo per cui si verifica l'avviso e le relative implicazioni, è possibile ignorare l'avviso.If you understand why the warning occurs and its implications, you can ignore the warning.

Non sono stati rilevati SDK .NET CoreNo .NET Core SDKs were detected

  • Nella finestra di dialogo nuovo progetto di Visual Studio per ASP.NET Core, è possibile che venga visualizzato il seguente avviso:In the Visual Studio New Project dialog for ASP.NET Core, you may see the following warning:

    Non sono stati rilevati SDK .NET Core, assicurarsi che siano inclusi nella PATHvariabile di ambiente.No .NET Core SDKs were detected, ensure they are included in the environment variable PATH.

  • Quando si esegue un dotnet comando, l'avviso viene visualizzato come segue:When executing a dotnet command, the warning appears as:

    Non è stato possibile trovare gli SDK DotNet installati.It was not possible to find any installed dotnet SDKs.

Questi avvisi vengono visualizzati quando la variabile PATH di ambiente non punta ad alcun SDK di .NET Core nel computer.These warnings appear when the environment variable PATH doesn't point to any .NET Core SDKs on the machine. Per risolvere il problema:To resolve this problem:

  • Installare .NET Core SDK.Install the .NET Core SDK. Ottenere il programma di installazione più recente da download di .NET.Obtain the latest installer from .NET Downloads.
  • Verificare che la PATH variabile di ambiente punti al percorso in cui è installato l'SDKC:\Program Files\dotnet\ (per a 64 bit/x64 C:\Program Files (x86)\dotnet\ o per 32 bit/x86).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). Il programma di installazione dell'SDK PATHnormalmente imposta.The SDK installer normally sets the PATH. Installare sempre gli stessi SDK e Runtime bit nello stesso computer.Always install the same bitness SDKs and runtimes on the same machine.

SDK mancante dopo l'installazione del bundle di hosting .NET CoreMissing SDK after installing the .NET Core Hosting Bundle

L'installazione del bundle di hosting .NET Core modifica PATH quando installa il runtime di .NET Core in modo che punti alla versione 32 bit (x86) di .NET Core (C:\Program Files (x86)\dotnet\).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\). Questo può causare la mancata presenza di SDK quando viene usato il comando .NET Core dotnet a 32 bit (x86) (non sono stati rilevati SDK .NET Core).This can result in missing SDKs when the 32-bit (x86) .NET Core dotnet command is used (No .NET Core SDKs were detected). Per risolvere il problema, passare C:\Program Files\dotnet\ a una posizione precedente C:\Program Files (x86)\dotnet\ in PATH.To resolve this problem, move C:\Program Files\dotnet\ to a position before C:\Program Files (x86)\dotnet\ on the PATH.

Ottenere dati da un'appObtain data from an app

Se un'app è in grado di rispondere alle richieste, è possibile ottenere i dati seguenti dall'app usando il middleware:If an app is capable of responding to requests, you can obtain the following data from the app using middleware:

  • Metodo – di richiesta, schema, host, pathbase, percorso, stringa di query, intestazioniRequest – Method, scheme, host, pathbase, path, query string, headers
  • Indirizzo – IP remoto della connessione, porta remota, indirizzo IP locale, porta locale, certificato clientConnection – Remote IP address, remote port, local IP address, local port, client certificate
  • Nome – identità, nome visualizzatoIdentity – Name, display name
  • Impostazioni di configurazioneConfiguration settings
  • Variabili di ambienteEnvironment variables

Inserire il codice middleware seguente all'inizio della Startup.Configure pipeline di elaborazione delle richieste del metodo.Place the following middleware code at the beginning of the Startup.Configure method's request processing pipeline. L'ambiente viene verificato prima dell'esecuzione del middleware per garantire che il codice venga eseguito solo nell'ambiente di sviluppo.The environment is checked before the middleware is run to ensure that the code is only executed in the Development environment.

Per ottenere l'ambiente, usare uno degli approcci seguenti:To obtain the environment, use either of the following approaches:

  • Inserire l' IHostingEnvironment oggetto Startup.Configure nel metodo e controllare l'ambiente con la variabile locale.Inject the IHostingEnvironment into the Startup.Configure method and check the environment with the local variable. Il codice di esempio seguente illustra questo approccio.The following sample code demonstrates this approach.

  • Assegnare l'ambiente a una proprietà nella Startup classe.Assign the environment to a property in the Startup class. Controllare l'ambiente utilizzando la proprietà (ad esempio, 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());
        });
    }
}