Empieza aquí
¿Nuevo por aquí? Estos son los posts que recomendaría primero a una persona desarrolladora. Son más largos, más perennes o más didácticos que los posts diarios de noticias. Se actualiza cuando escribo algo que recomendaría de verdad.
20 posts · agrupados por tema
Depuración práctica
Lee un archivo de registro en uso, configura Serilog sin duplicar errores y gestiona eventos de sesión de Windows.
- Cómo leer un archivo de registro en C# al estilo tail mientras otro proceso sigue escribiendo en él Abre el registro con FileShare.ReadWrite | FileShare.Delete, ve al final, consulta periódicamente si hay bytes nuevos, decodifícalos con tu propio Decoder UTF-8 en lugar de StreamReader y maneja el truncamiento y la rotación de forma explícita. Una implementación probada de tail -F para .NET 10 y .NET 11.
- Cómo usar una plantilla de salida de Serilog distinta por nivel de registro desde appsettings.json outputTemplate es fijo por sink, así que el formato por nivel requiere un ExpressionTemplate con bloques {#if @l ...} o dos sub-loggers Logger con filtros ByIncludingOnly / ByExcluding. Ambas opciones se configuran solo desde appsettings.json, probadas en Serilog 4.4, Serilog.Settings.Configuration 10.0.1 y Serilog.Expressions 5.0.
- Cómo detectar los eventos de bloqueo, desbloqueo, inicio y cierre de sesión de Windows en una app de C# Usa SystemEvents.SessionSwitch en una app de escritorio o de consola, sobrescribe OnSessionChange en un servicio de Windows, o engancha WM_WTSSESSION_CHANGE tú mismo. Incluye código de .NET 10 para los tres enfoques, el hilo oculto '.NET System Events', por qué los servicios ven el inicio de sesión y las apps de escritorio no, las notificaciones fuera de orden y cómo consultar el estado de bloqueo actual con WTSQuerySessionInformation.
Ejemplos ejecutables
Descarga proyectos pequeños para esperar procesos, serializar JSON y crear un diseño de dos columnas en React Native. Cada uno incluye instrucciones de ejecución y detalles de verificación.
- C# ¿Cómo esperar a que termine un proceso? Espera a un proceso hijo en C# con WaitForExit o WaitForExitAsync. Ejemplo ejecutable con códigos de salida, tiempos de espera, cancelación y limpieza en .NET 8 y 10.
- System.Text.Json desactivar la serialización basada en reflexión Desactiva los valores predeterminados de reflexión en System.Text.Json, explica InvalidOperationException y serializa con un contexto generado en un ejemplo ejecutable de .NET 8.
- .NET 8 marcar JsonSerializerOptions como readonly Congela JsonSerializerOptions con MakeReadOnly, corrige el TypeInfoResolver ausente y crea una copia modificable en un ejemplo ejecutable de .NET 8.
- Cómo crear un diseño Flexbox de dos columnas en React Native Ejemplo Expo ejecutable de un diseño React Native de dos columnas con ajuste de línea, dimensiones numéricas y espaciado, sin px ni calc().
Lenguaje C#
Qué cambió realmente en el lenguaje y cómo aterriza en código real.
- Miembros de extensión en C# 14: propiedades, operadores y miembros estáticos de extensión C# 14 introduce miembros de extensión, lo que te permite agregar propiedades, operadores y miembros estáticos de extensión a tipos existentes usando la nueva palabra clave extension.
- Asignación condicional nula en C# 14: usar ?. y ?[] en el lado izquierdo C# 14 extiende los operadores condicionales nulos para que funcionen en el lado izquierdo de las asignaciones, eliminando verificaciones de null verbosas al asignar propiedades o indexadores.
- Los tipos de unión de C# 15 están aquí: las uniones de tipo llegan en .NET 11 Preview 2 C# 15 introduce la palabra clave union para uniones de tipo con coincidencia de patrones exhaustiva y conversiones implícitas. Disponible ahora en .NET 11 Preview 2.
EF Core
Características clave de acceso a datos que he investigado en EF Core 10 y 11.
- EF Core 11 agrega búsqueda vectorial nativa de SQL Server con índices DiskANN EF Core 11 Preview 2 soporta VECTOR_SEARCH() de SQL Server 2025 y los índices vectoriales DiskANN directamente desde LINQ. Aquí está cómo configurar el índice, ejecutar consultas aproximadas, y qué cambia del enfoque VectorDistance de EF Core 10.
- EF Core 11 poda joins de referencia innecesarios en split queries EF Core 11 Preview 3 remueve joins to-one redundantes de split queries y tira claves ORDER BY innecesarias. Un escenario reportado se volvió 29% más rápido, otro 22%. Así se ve el SQL ahora.
- EF Core 11 prende transactional batches de Cosmos DB por default EF Core 11 agrupa writes de Cosmos DB en transactional batches por container y partition en cada SaveChanges, dando atomicidad best-effort y menos roundtrips sin cambios de código.
Rendimiento y profiling
Posts que muestran las piezas en movimiento, no solo los feature flags.
- Rendimiento en .NET 10: SearchValues Usa SearchValues en .NET 10 para búsqueda multi-cadena de alto rendimiento. Reemplaza bucles foreach con coincidencias aceleradas por SIMD usando los algoritmos Aho-Corasick y Teddy.
- Perfetto + dotnet-trace: un ciclo práctico de profiling para .NET 9/.NET 10 Un ciclo práctico de profiling para .NET 9 y .NET 10: captura trazas con dotnet-trace, visualízalas en Perfetto e itera sobre problemas de CPU, GC e hilos del thread pool.
Runtime de .NET y tooling
Cosas que cambian cómo se siente el día a día con .NET.
- Runtime Async de .NET 11 reemplaza las state machines con trazas de pila más limpias Runtime Async en .NET 11 mueve el manejo de async/await de las state machines generadas por el compilador al runtime mismo, produciendo trazas de pila legibles, breakpoints correctos, y menos asignaciones en heap.
- ASP.NET Core 11 incluye trazado OpenTelemetry nativo: deja el paquete NuGet adicional ASP.NET Core en .NET 11 Preview 2 agrega atributos semánticos de OpenTelemetry directamente a la actividad del servidor HTTP, eliminando la necesidad de OpenTelemetry.Instrumentation.AspNetCore.
MAUI y Flutter
Posts del lado móvil con suficiente detalle para ser accionables.
- .NET MAUI 11 incluye un LongPressGestureRecognizer integrado .NET MAUI 11 Preview 3 agrega LongPressGestureRecognizer como gesto de primera clase, con duration, umbral de movimiento, eventos de state, y binding de command, reemplazando el behavior común del Community Toolkit.
- Pin clustering aterriza en .NET MAUI 11 Maps .NET MAUI 11 Preview 3 agrega pin clustering integrado al control Map en Android e iOS, con grupos ClusteringIdentifier y un evento ClusterClicked.
- Flutter Text: el detalle de `leadingDistribution` que cambia cómo "respira" tu UI La propiedad leadingDistribution dentro de TextHeightBehavior en Flutter controla cómo se reparte el leading extra por encima y por debajo de los glifos. Aquí está cuándo importa y cómo arreglar texto que se ve desalineado vertical.