evento
Campeonato Mundial do Power BI DataViz
14/02, 16 - 31/03, 16
Com 4 chances de participar, você pode ganhar um pacote de conferência e chegar ao LIVE Grand Finale em Las Vegas
Mais informaçõesEste browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Nota
Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 9 deste artigo.
Aviso
Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e .NET Core. Para a versão atual, consulte a versão .NET 9 deste artigo.
Importante
Estas informações referem-se a um produto de pré-lançamento que pode ser substancialmente modificado antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, em relação às informações fornecidas aqui.
Para a versão atual, consulte a versão .NET 9 deste artigo.
Este artigo descreve como depurar aplicativos Blazor, incluindo a depuração de aplicativos Blazor WebAssembly com ferramentas de desenvolvedor de navegador ou um ambiente de desenvolvimento integrado (IDE).
É possível depurar Blazor Web Apps no Visual Studio ou no Visual Studio Code.
Blazor WebAssembly aplicações podem ser depuradas:
Os cenários disponíveis para depuração de Blazor WebAssembly incluem:
Os cenários sem suporte incluem:
Blazor Server aplicativos podem ser depurados no Visual Studio ou no Visual Studio Code.
Blazor WebAssembly aplicações podem ser depuradas
Os cenários sem suporte para aplicativos Blazor WebAssembly incluem:
Blazor Server aplicações podem ser debugadas no Visual Studio ou no Visual Studio Code.
Blazor WebAssembly aplicações podem ser depuradas:
Os cenários sem suporte para aplicativos Blazor WebAssembly incluem:
Program
e pontos de interrupção nos métodos de ciclo de vida OnInitialized{Async}
de componentes que são carregados pela primeira página solicitada a partir da aplicação.Esta seção explica os pré-requisitos para depuração.
A versão mais recente dos seguintes navegadores:
A depuração requer a versão mais recente dos seguintes navegadores:
Certifique-se de que os firewalls ou proxies não bloqueiem a comunicação com o processoNodeJS
do proxy de depuração. Para obter mais informações, consulte a seção de configuração do firewall.
Nota
O Apple Safari no macOS não é suportado no momento.
A versão mais recente do Visual Studio ou Visual Studio Code é necessária.
O Visual Studio Code requer o C# Dev Kit para Visual Studio Code (Introdução ao C# no VS Code). No Visual Studio Code Extensions Marketplace, filtre a lista de extensões com "c# dev kit
" para localizar a extensão:
A instalação do C# Dev Kit instala automaticamente as seguintes extensões adicionais:
Se encontrares avisos ou erros, podes abrir um problema (microsoft/vscode-dotnettools
repositório GitHub) descrevendo o problema.
A orientação nesta subseção se aplica à depuração do lado do cliente.
Abra o arquivo Properties/launchSettings.json
do projeto de inicialização. Confirme a presença da seguinte propriedade inspectUri
em cada perfil de inicialização do nó profiles
do arquivo. Se a seguinte propriedade não estiver presente, adicione-a a cada perfil:
"inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}"
A propriedade inspectUri
:
Os valores de espaço reservado para o protocolo WebSocket (wsProtocol
), host (url.hostname
), porta (url.port
) e URI do inspetor no navegador iniciado (browserInspectUri
) são fornecidos pelo framework.
Blazor Web Apps: Microsoft.AspNetCore.Components.WebAssembly.Server
: Faz referência a um pacote interno (Microsoft.NETCore.BrowserDebugHost.Transport
) para montagens que partilham o host de depuração do navegador.
Blazor Server: Microsoft.AspNetCore.Components.WebAssembly.Server
: Faz referência a um pacote interno (Microsoft.NETCore.BrowserDebugHost.Transport
) para conjuntos que compartilham o host de depuração do browser.
Blazor WebAssemblyautônomo : Microsoft.AspNetCore.Components.WebAssembly.DevServer
: Servidor de desenvolvimento para uso ao criar aplicativos Blazor. Chama UseWebAssemblyDebugging internamente para adicionar middleware para depuração de aplicativos Blazor WebAssembly nas ferramentas de desenvolvimento do Chromium.
Blazor WebAssemblyhospedados:
Microsoft.AspNetCore.Components.WebAssembly.DevServer
: Servidor de desenvolvimento para uso na criação de aplicativos Blazor. Chama UseWebAssemblyDebugging internamente para adicionar middleware para depuração de aplicações Blazor WebAssembly dentro das ferramentas de desenvolvimento do Chromium.Microsoft.AspNetCore.Components.WebAssembly.Server
: Faz referência a um pacote interno (Microsoft.NETCore.BrowserDebugHost.Transport
) para conjuntos que partilham o ambiente de depuração do navegador.Nota
Para obter orientação sobre como adicionar pacotes a aplicativos .NET, consulte os artigos em Instalar e gerenciar pacotes em Fluxo de trabalho de consumo de pacotes (documentação do NuGet). Confirme as versões corretas do pacote em NuGet.org.
O exemplo nesta seção pressupõe que você criou um Blazor Web App com um modo de renderização interativo de Auto (Server e WebAssembly) e um local de interatividade por componente.
currentCount++;
no componente Counter
(Pages/Counter.razor
) do projeto cliente (.Client
).Counter
em /counter
. Aguarde alguns segundos para que o proxy de depuração carregue e seja executado. Selecione o botão Click me para alcançar o ponto de paragem.currentCount
na janela Locals.Os pontos de interrupção também podem ser atingidos no projeto de servidor em componentes do lado do servidor que são renderizados estática e interativamente.
Weather
renderizado estaticamente (Components/Pages/Weather.razor
) e defina um ponto de interrupção em qualquer lugar no método OnInitializedAsync
.Weather
em /weather
. Aguarde alguns segundos para que o proxy de depuração carregue e seja executado. A execução do aplicativo para no ponto de interrupção.Os pontos de interrupção não são atingidos durante a inicialização do aplicativo antes que o proxy de depuração seja executado. Isso inclui pontos de paragem no arquivo de Program
e pontos de paragem nos métodos de ciclo de vida OnInitialized{Async}
de componentes que são carregados pela primeira página solicitada pela aplicação.
currentCount++;
no componente Counter
(Pages/Counter.razor
).Counter
em /counter
. Aguarde alguns segundos para que o proxy de depuração carregue e seja executado. Selecione o botão Clique em mim para atingir o ponto de interrupção.currentCount
na janela Locals.Os pontos de interrupção não são atingidos durante a inicialização do aplicativo porque o proxy de depuração ainda não está a funcionar. Isso inclui pontos de paragem no arquivo de Program
e pontos de paragem nos métodos de ciclo de vida ,OnInitialized{Async}
e de componentes que são carregados pela primeira página solicitada a partir da aplicação.
currentCount++;
no componente Counter
(Pages/Counter.razor
).Counter
na /counter
. Aguarde alguns segundos para que o proxy de depuração carregue e seja executado. Selecione o botão Clique aqui para atingir o ponto de interrupção.currentCount
na janela Locals.Os pontos de interrupção não são atingidos durante a inicialização do aplicativo antes que o proxy de depuração seja executado. Isso inclui pontos de interrupção no arquivo de Program
e pontos de interrupção nos métodos de ciclo de vida OnInitialized{Async}
de componentes que são carregados pela primeira página solicitada ao aplicativo.
Com o projeto Server selecionado no Gerenciador de Soluções , pressione F5 para executar o aplicativo no depurador.
Ao depurar com um navegador baseado no Chromium, como o Google Chrome ou o Microsoft Edge, uma nova janela do navegador poderá abrir-se com um perfil separado para a sessão de depuração, em vez de abrir uma guia em uma janela existente do navegador com o perfil do usuário. Se a depuração com o perfil do usuário for um requisito, adote uma das seguintes abordagens:
No projeto Client, defina um ponto de interrupção na linha currentCount++;
no componente Counter
(Pages/Counter.razor
).
No navegador, navegue até a página Counter
no /counter
. Aguarde alguns segundos para que o proxy de depuração carregue e seja executado. Selecione o botão Clique em mim para atingir o ponto de interrupção.
No Visual Studio, inspecione o valor do campo currentCount
na janela Locals.
Pressione F5 para continuar a execução.
Você também pode depurar o código do servidor no projeto Server:
Pages/FetchData.razor
no OnInitializedAsync.WeatherForecastController
no método de ação Get
.Fetch Data
para atingir o primeiro ponto de interrupção no componente FetchData
pouco antes de emitir uma solicitação HTTP para o servidor.WeatherForecastController
.Os pontos de interrupção não são atingidos durante a inicialização do aplicativo antes que o proxy de depuração seja executado. Isso inclui pontos de paragem no arquivo de Program
e pontos de paragem nos métodos de ciclo de vida OnInitialized{Async}
de componentes que são carregados pela primeira página solicitada ao aplicativo.
Para anexar a um aplicativo Blazor em execução, abra o arquivo .vscode/launch.json
e substitua o espaço reservado {URL}
pela URL onde o aplicativo está sendo executado:
{
"name": "Attach and Debug",
"type": "blazorwasm",
"request": "attach",
"url": "{URL}"
}
As opções de configuração de inicialização na tabela a seguir são suportadas para o tipo de depuração blazorwasm
(.vscode/launch.json
).
Opção | Descrição |
---|---|
browser |
O navegador a ser iniciado para a sessão de depuração. Defina como edge ou chrome . O padrão é edge . |
cwd |
O diretório de trabalho para iniciar o aplicativo em. |
request |
Use launch para iniciar e anexar uma sessão de depuração a um aplicativo Blazor WebAssembly ou attach para anexar uma sessão de depuração a um aplicativo já em execução. |
timeout |
O número de milissegundos a aguardar até que a sessão de depuração seja anexada. O padrão é 30.000 milissegundos (30 segundos). |
trace |
Usado para gerar logs a partir do depurador de JS. Defina como true para gerar logs. |
url |
O URL a ser aberto no navegador durante a depuração. |
webRoot |
Especifica o caminho absoluto do servidor Web. Deve ser definido se um aplicativo for servido a partir de uma subrota. |
As opções adicionais na tabela a seguir aplicam-se apenas a aplicações hospedadas Blazor WebAssembly.
Opção | Descrição |
---|---|
env |
As variáveis de ambiente a fornecer ao processo lançado. Aplicável apenas se hosted estiver definido como true . |
hosted |
Deve ser definido como true se estiver a inicializar e depurar uma aplicação Blazor WebAssembly hospedada. |
program |
Uma referência ao executável para executar o servidor do aplicativo hospedado. Deve ser definido se hosted estiver true . |
As orientações nesta secção aplicam-se à depuração de aplicativos Blazor WebAssembly em:
Execute o aplicativo em um shell de comando com dotnet watch
(ou dotnet run
).
Inicie um navegador e navegue até o URL do aplicativo.
Inicie a depuração remota pressionando:
O navegador deve estar em execução com a depuração remota ativada, o que não é o padrão. Se a depuração remota estiver desativada, uma página de erro Não foi possível encontrar a guia de navegador depurável é renderizada com instruções para lançar o navegador com a porta de depuração aberta. Siga as instruções para o seu navegador.
Depois de seguir as instruções para ativar a depuração remota, o aplicativo é aberto em uma nova janela do navegador. Inicie a depuração remota pressionando a combinação de teclas de atalho na nova janela do navegador:
Uma nova aba de ferramentas de desenvolvedor é aberta no navegador, exibindo uma imagem fantasma do aplicativo.
Nota
Se você seguiu as instruções para abrir uma nova guia do navegador com a depuração remota ativada, você pode fechar a janela original do navegador, deixando a segunda janela aberta com a primeira guia executando o aplicativo e a segunda guia executando o depurador.
Depois de um momento, a guia Fontes mostra uma lista de assemblies e páginas .NET do aplicativo.
Abra o nó file://
. No código de componente (arquivos.razor
) e nos arquivos de código C# (.cs
), os pontos de interrupção que definir são atingidos quando o código é executado na guia do navegador do aplicativo (a guia inicial aberta após iniciar a depuração remota). Depois de um ponto de interrupção ser atingido, avance passo a passo (F10) pelo código ou retome a execução do código (F8) normalmente na guia de depuração.
Para a depuração de navegadores baseados no Chromium, o Blazor fornece um proxy de depuração que implementa o Chrome DevTools Protocol e complementa o protocolo com informações específicas do .NET. Quando o atalho de teclado para depuração é pressionado, Blazor direciona as Ferramentas de Desenvolvimento do Chrome para o proxy. O proxy se conecta à janela do navegador que você está procurando depurar (daí a necessidade de habilitar a depuração remota).
As orientações nesta secção aplicam-se à depuração de Blazor WebAssembly aplicativos no Firefox em execução no sistema operativo Windows.
Depurar um aplicativo Blazor WebAssembly com o Firefox requer configurar o navegador para depuração remota e conectar-se ao navegador usando as ferramentas de desenvolvedor do navegador por meio do proxy de depuração .NET WebAssembly.
Nota
A depuração no Firefox a partir do Visual Studio não é suportada no momento.
Para depurar um aplicativo Blazor WebAssembly no Firefox durante o desenvolvimento:
about:config
em uma nova guia do navegador. Leia e descarte o aviso que aparece.devtools.debugger.remote-enabled
definindo seu valor como True
.devtools.chrome.enabled
definindo seu valor como True
.devtools.debugger.prompt-connection
definindo seu valor como False
.dotnet watch
(ou dotnet run
).about:debugging
em uma nova guia do navegador. Deixe esta guia aberta.Debugger
, abra o arquivo de origem do aplicativo que você deseja depurar no nó file://
e defina um ponto de interrupção. Por exemplo, defina um ponto de interrupção na linha currentCount++;
no método IncrementCount
do componente Counter
(Pages/Counter.razor
).Counter
(/counter
) na guia do navegador do aplicativo e selecione o botão do contador para atingir o ponto de interrupção.O depurador não quebra em exceções não tratadas porque Blazor captura exceções que não são tratadas pelo código do desenvolvedor.
Para interromper exceções não tratadas:
Os mapas de origem do navegador permitem que o navegador mapeie os arquivos compilados de volta aos seus arquivos de origem originais e são comumente usados para depuração do lado do cliente. No entanto, Blazor atualmente não mapeia C# diretamente para JavaScript/WASM. Em vez disso, Blazor faz a interpretação de IL dentro do navegador, portanto, os mapas de origem não são relevantes.
Se um firewall bloquear a comunicação com o proxy de depuração, crie uma regra de exceção no firewall de forma a permitir a comunicação entre o navegador e o processo de NodeJS
.
Aviso
A modificação de uma configuração de firewall deve ser feita com cuidado para evitar a criação de vulnerabilidades de segurança. Aplique cuidadosamente as orientações de segurança, siga as melhores práticas de segurança e respeite os avisos emitidos pelo fabricante do firewall.
Permitir uma comunicação aberta com o processo NodeJS
:
Se possível, permita apenas a comunicação aberta com o processo NodeJS
em redes confiáveis ou privadas.
Para obter diretrizes de configuração do do Firewall do Windows, consulte Criar uma regra de programa ou serviço de entrada. Para obter mais informações, consulte Firewall do Windows Defender com Segurança Avançada e artigos relacionados no conjunto de documentação do Firewall do Windows.
Se você estiver encontrando erros, as seguintes dicas podem ajudar:
localStorage.clear()
para remover quaisquer pontos de interrupção.localhost
está incluído nas configurações de bypass de proxy. Isso pode ser feito definindo a variável de ambiente NO_PROXY
em: launchSettings.json
para o projeto.NodeJS
). Para obter mais informações, consulte a seção de configuração do firewall.O proxy de depuração da estrutura Blazor não é iniciado instantaneamente na inicialização do aplicativo, portanto, os pontos de interrupção nos métodos de ciclo de vida OnInitialized{Async}
podem não ser atingidos. Recomendamos adicionar um atraso no início do corpo do método para dar ao proxy de depuração algum tempo para iniciar antes que o ponto de interrupção seja atingido. Você pode incluir o atraso com base numa diretiva de compilação if
para garantir que o atraso não esteja presente numa versão final do aplicativo.
protected override void OnInitialized()
{
#if DEBUG
Thread.Sleep(10000);
#endif
...
}
protected override async Task OnInitializedAsync()
{
#if DEBUG
await Task.Delay(10000);
#endif
...
}
Se o Visual Studio lançar uma exceção de que o adaptador de depuração falhou ao iniciar mencionando que o tempo limite foi atingido, você pode ajustar o tempo limite com uma configuração do Registro:
VsRegEdit.exe set "<VSInstallFolder>" HKCU JSDebugger\Options\Debugging "BlazorTimeoutInMilliseconds" dword {TIMEOUT}
O espaço reservado pelo marcador {TIMEOUT}
no comando anterior está em milissegundos. Por exemplo, um minuto é atribuído como 60000
.
Comentários do ASP.NET Core
O ASP.NET Core é um projeto código aberto. Selecione um link para fornecer comentários:
evento
Campeonato Mundial do Power BI DataViz
14/02, 16 - 31/03, 16
Com 4 chances de participar, você pode ganhar um pacote de conferência e chegar ao LIVE Grand Finale em Las Vegas
Mais informaçõesFormação
Módulo
Treinamento prático para implantar e depurar remotamente seus aplicativos ASP.NET Core no Serviço de Aplicativo do Azure diretamente usando o Visual Studio 2022.