Recientemente migré de .NET Core 3.1 a .NET 5.0 ( usando tiempo de ejecución aislado/fuera del proceso ) para un proyecto de Azure Function en C#. Todo está funcionando como se esperaba. Sin embargo, cada vez que depuro, ninguno de mis puntos de interrupción llega. ¿Por qué no puedo depurar mi aplicación Azure Function ahora, pero antes podía hacerlo?
Si usa Visual Studio versión 16.10 o posterior, la depuración en Visual Studio es sencilla.
Los pasos actualizados de Microsoft son los siguientes :
Visual Studio se integra con Azure Functions Core Tools para que pueda probar sus funciones localmente usando el tiempo de ejecución completo de Azure Functions.
Para ejecutar su función, presione F5 en Visual Studio. Es posible que deba habilitar una excepción de firewall para que las herramientas puedan manejar solicitudes HTTP. Los niveles de autorización nunca se aplican cuando ejecuta una función localmente.
Copie la URL de su función de la salida del tiempo de ejecución de Azure Functions y ejecute la solicitud. Se muestra un mensaje de bienvenida a las funciones cuando la función se ejecuta correctamente y los registros se escriben en la salida del tiempo de ejecución.
Para detener la depuración, presione Mayús+F5 en Visual Studio.
Una vez que haya verificado que la función se ejecuta correctamente en su equipo local, es hora de publicar el proyecto en Azure.
Esta sección a continuación solo se aplica si está utilizando Visual Studio versión 16.9 o anterior. Recomiendo encarecidamente actualizar Visual Studio en lugar de usar este método "PITA".
(Consulte la respuesta de Andrii para obtener una solución alternativa)
Después de investigar mucho en línea, aprendí que el proceso aislado que usa .NET 5 para Azure Functions no admite la depuración de manera predeterminada. Para hacerlo en Visual Studio, debe seguir estos pasos (el enlace solía ser válido, pero desde entonces se actualizó).
cd MyProjectfunc start –-dotnet-isolated-debug En este punto, debería ver un PID impreso en la salida del terminal similar al siguiente Functions: HttpExample: [GET,POST] http://localhost:7071/api/HttpExample For detailed output, run func with --verbose flag. [2021-03-09T08:41:41.904Z] Azure Functions .NET Worker (PID: 81720) initialized in debug mode. Waiting for debugger to attach...Ya no es necesario porque ya se agregó la compatibilidad nativa con Visual Studio
¡Hay una manera fácil!
public static class Program { public static void Main() { Debugger.Launch(); // The trick! <<======================================= using var host = new HostBuilder() ... Luego simplemente inicie como de costumbre sin depurar (Ctrl+F5) y adjunte la misma instancia de Visual Studio al proceso de dotnet 
¡Y listo, depuras tu función!
No funciona para mí. Tengo una aplicación de función en DotnetCore5, la ejecuto con Ctrl+F5. Tengo la ventana de depuración, selecciono la instancia de ejecución. La depuración activa el archivo raíz "program.cs" que contiene:
#if DEBUG Debugger.Launch(); #endifPero no en este otro archivo que contiene:
[Function(FunctionName)] public async Task Run([TimerTrigger("0 */1 * * * *" #if DEBUG , RunOnStartup = true #endif )]TimerInfo myTimer, FunctionContext executionContext) { // Application du log _log = executionContext.GetLogger(FunctionName);Y quién está funcionando bien, lo veo en la consola iniciado (en mi ejemplo a continuación "GetRubixData")
Probé con VS 2019 y 2022. ¿Qué debo verificar?
La consola contiene:
Functions: PostWassaSalissureMesureData: [POST] http://localhost:7071/api/PostWassaSalissureMesureData GetRubixData: TimerTrigger For detailed output, run func with --verbose flag. [2021-12-22T07:38:06.596Z] Retrying to start listener for function 'Functions.GetRubixData' (Attempt 1) [2021-12-22T07:38:06.598Z] Listener successfully started for function 'Functions.GetRubixData' after 1 retries. [2021-12-22T07:38:09.430Z] Host lock lease acquired by instance ID '000000000000000000000000DA099322'. info: Microsoft.AspNetCore.Hosting.Diagnostics[1] Request starting HTTP/2 POST http://127.0.0.1:55251/AzureFunctionsRpcMessages.FunctionRpc/EventStream application/grpc info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0] Executing endpoint 'gRPC - /AzureFunctionsRpcMessages.FunctionRpc/EventStream' [2021-12-22T07:38:59.183Z] { [2021-12-22T07:38:59.183Z] "ProcessId": 3352, [2021-12-22T07:38:59.184Z] "WorkerVersion": "1.3.1.0", [2021-12-22T07:38:59.185Z] "ProductVersion": "1.3.1\u002B9d5d2f326090a62d4496dfb45611fb696b8960e9", [2021-12-22T07:38:59.185Z] "FrameworkDescription": ".NET 5.0.13", [2021-12-22T07:38:59.186Z] "OSDescription": "Microsoft Windows 10.0.19044", [2021-12-22T07:38:59.186Z] "OSArchitecture": "X64", [2021-12-22T07:38:59.187Z] "RuntimeIdentifier": "win10-x64", [2021-12-22T07:38:59.187Z] "CommandLine": "C:\\Sources\\Comin-API\\ByCN.ComIn\\src\\00-WEB\\02-FunctionApps\\ByCN.ComIn.FunctionApps.Data\\bin\\Debug\\net5.0\\ByCN.ComIn.FunctionApps.Data.dll --host 127.0.0.1 --port 55251 --workerId 66a7fb37-4a35-4e8c-99cf-7c294ca7aea7 --requestId 3be30260-aca2-4e29-b9e8-93a35f06566f --grpcMaxMessageLength 2147483647" [2021-12-22T07:38:59.188Z] } [2021-12-22T07:38:59.200Z] Worker process started and initialized.y se detuvo aquí, ninguna otra línea está escribiendo después a pesar de que la secuencia de comandos debería repetirse cada minuto
Saludos