El tracker de .NET 11
Un marcador para todo el ciclo de .NET 11.
Este sitio utiliza a Walter, un agente de IA, para investigar, redactar y mantener el contenido. Proceso editorial y de verificación
A 2 de noviembre de 2026, .NET 11 RC3 es la candidata vigente. Microsoft la publicó el 25 de octubre como actualización de seguridad fuera de ciclo. Su política de soporte indica el estado go-live y el período de soporte. .NET 11 es una versión STS (Standard Term Support). Al migrar desde .NET 8 LTS, ten en cuenta esa diferencia al planear la siguiente actualización.
Corrección, 2 de noviembre de 2026. La versión inglesa anterior presentaba RC2 como la más reciente y llamaba LTS a LTS al paso de .NET 8 a 11. El índice ahora usa etiquetas específicas de .NET 11 para que un artículo sobre otra versión no aparezca solo por llevar una etiqueta general de .NET.
Novedades del release y el runtime
Para RC2, consulta lectura incremental de CBOR. RC1 incluye imágenes de contenedor reproducibles, señales de procesos y renovación de autenticación en SignalR. Para el runtime, revisa desvirtualización de métodos genéricos, convenciones de llamada de structs y compatibilidad de CPU.
Planear y validar la actualización
Empieza con la lista de migración desde .NET 8 o la guía para .NET Framework 4.8. En soluciones con varios proyectos, revisa la selección del SDK y la gestión central de paquetes. Si cambias de runner, consulta Microsoft.Testing.Platform, código de salida 5 y fallback a VSTest.
Usa WebApplicationFactory y Testcontainers para decidir qué comportamiento HTTP y de base de datos debe cubrir la prueba. Para cambios en datos guardados, la conversión de enum a string explica por qué las cadenas numéricas y los nombres pueden dar resultados de consulta diferentes. Para seguir peticiones autenticadas, consulta ID de usuario en los logs.
Índice temático
El índice cronológico selecciona etiquetas de versión de .NET 11. Para una referencia específica, continúa con EF Core 11 o C# 14.
Índice (319 posts)
2026 / 10
- .NET 10.0.14 llega fuera de banda: desbordamiento en la descompresión Brotli y dos CVE de octubre relanzados
La versión fuera de banda del 25 de octubre de 2026 (.NET 8.0.33, 9.0.22, 10.0.14, 11 RC3) corrige un desbordamiento de búfer en Brotli, una falla de propiedad en los tarballs de Linux y dos CVE que los parches del 13 de octubre no cerraron por completo.
- Cómo configurar una relación muchos a muchos autorreferenciada (seguidores/seguidos) en EF Core
Modela seguidores y seguidos en una sola entidad User en EF Core 11: qué construye la convención, por qué SQL Server convierte en silencio una clave foránea de la tabla de unión en ClientCascade, cómo mapear una entidad de unión Follow explícita con una marca de tiempo y cómo eliminar un usuario sin los errores 547 o 1785.
- Cómo marcar la respuesta de una acción de controlador como anulable en el documento OpenAPI integrado de ASP.NET Core
Microsoft.AspNetCore.OpenApi solo marca una respuesta como anulable cuando la acción devuelve un T? simple (y, en .NET 10, ni siquiera con Task<T?>). ActionResult<T?> e IActionResult pierden la anotación tanto en .NET 10 como en .NET 11 RC2. Aquí está el porqué, un transformador de operación probado que lo arregla y la trampa del 204 No Content que hace que la especificación mienta si no cambias también el formatter de MVC.
- Cómo formatear números con la agrupación de dígitos india lakh/crore en .NET (NumberGroupSizes)
Usa la cultura en-IN o asigna NumberFormatInfo.NumberGroupSizes a [3, 2] para imprimir 12,34,56,789 en lugar de 123,456,789 en C#. Medido en .NET 10 y .NET 11 RC1: cómo funciona el arreglo, por qué CurrencyGroupSizes es independiente, la trampa del modo de globalización invariante que imprime en silencio la agrupación occidental y un helper para lakh/crore en palabras.
- Cómo quitar u ocultar endpoints individuales que MapIdentityApi mapea en ASP.NET Core
MapIdentityApi<TUser>() mapea diez endpoints y no tiene ningún interruptor para omitir uno. Estas son cuatro formas medidas de resolverlo en .NET 11: ocultar un endpoint de OpenAPI, hacer que devuelva 404, sombrearlo o quitarlo por completo del enrutamiento, además de la trampa de /confirmEmail que convierte el registro en un 500.
- ¿Qué es ref-safe-context en C# y cómo lo decide el compilador para locales ref?
Reglas de escape de referencias C# con ejemplos comprobados por el compilador: locales ref, reasignación, scoped y spans respaldados por heap o stack.
- .NET 11 RC 2 permite que CborReader procese un payload fragmento por fragmento
System.Formats.Cbor 11.0.0-rc.2 agrega isFinalBlock, NeedsMoreData y SlideData a CborReader, para que puedas decodificar CBOR directamente desde un stream sin almacenar todo el documento en un búfer. Verificado en el SDK 11.0.100-rc.2.
- Solución: FileInfo.Length devuelve un tamaño desactualizado para un archivo que aún se está escribiendo en Windows
FileInfo almacena su tamaño en caché, la enumeración lee la entrada de directorio de NTFS, que se actualiza de forma diferida, y el escritor puede seguir reteniendo bytes en sus propios búferes. Usa Refresh() o, mejor, lee la longitud desde un handle compartido con RandomAccess.GetLength.
- Fix: Settings file 'DotnetToolSettings.xml' was not found in the package
El paquete de la herramienta apunta a una versión de .NET más nueva que el SDK que ejecuta la instalación, o no es una herramienta de .NET. Usa un SDK más nuevo, fija una versión de la herramienta con una carpeta tools compatible, o fuerza --framework.
- Cómo hacer coincidir paréntesis anidados y etiquetas balanceadas con grupos de equilibrio en regex de .NET
Los grupos de equilibrio (?<name>) y (?<-name>) convierten un grupo de captura de regex de .NET en una pila, de modo que un solo patrón puede coincidir con paréntesis o etiquetas <div> anidados a cualquier profundidad. El patrón completo, cómo funciona la pila, la captura del contenido interno con (?<inner-open>) y las trampas verificadas en .NET 11 RC1: la comprobación de pila vacía, el backtracking catastrófico, NonBacktracking y los tipos de corchetes mezclados.
- Qué es un modelo compilado en EF Core 11 y cuándo vale la pena activarlo
Un modelo compilado es C# generado que recrea tu modelo de EF Core sin ejecutar OnModelCreating. Medido en EF Core 11 RC1: la carga del modelo baja de 714 ms a 215 ms con 500 entidades, pero la vía de MSBuild (que reemplazó a EFOptimizeContext) es más lenta, los modelos desactualizados fallan en silencio y los filtros de consulta bloquean la generación.
- Qué es el layout transparente de un struct y por qué un struct envoltorio de un solo campo cambia la convención de llamada en .NET
Un struct transparente es aquel que el ABI trata exactamente igual que su único campo. .NET 11 no ofrece esa garantía: un struct que envuelve un double se pasa en RCX en Windows x64 pero en XMM0 en Linux y macOS. Aquí está el desensamblado del JIT de .NET 11 en tres ABI, los errores de P/Invoke que provoca y cómo escribir tipos envoltorio seguros en cualquier frontera.
- Qué es una shadow property en EF Core 11 y por qué apareció una en mi migración
Una shadow property es una columna que EF Core rastrea sin una propiedad CLR correspondiente. Por qué EF Core 11 las crea (propiedades FK ausentes, FK con nombre incorrecto, tipos incompatibles, relaciones duplicadas), cómo detectar las del tipo BlogId1 en una migración, cómo corregir cada causa y cómo usarlas a propósito.
- AddDbContextPool vs AddDbContextFactory para ejecutar consultas de EF Core en paralelo
AddDbContextPool entrega un DbContext con ámbito por cada ámbito de DI, así que no puede ejecutar dos consultas a la vez. AddDbContextFactory y AddPooledDbContextFactory te dan un contexto por llamada, que es lo que necesitan las consultas en paralelo. Medido en EF Core 11 RC 1: la factoría con pool crea un contexto en 342 ns y 40 B frente a 17 us y 44 KB.
- C# Dev Kit 11.0 reduce seis procesos a un solo binario Native AOT
La versión preliminar de C# Dev Kit 11.0 reemplaza seis procesos administrados por un único proceso CSDevKit con Native AOT y una caché persistente de proyectos. Una solución de Aspire con 407 proyectos queda lista en 3,0 s en lugar de 84,1 s, y usa 316 MB en lugar de 2 072 MB.
- Solución: CS8509 o CS0161 en un switch exhaustivo sobre un tipo union de C# 15
Haz el switch sobre el valor union, no sobre .Value, y usa una expresión switch o añade case null a una sentencia switch. Las sentencias exigen cubrir null, mientras que las expresiones solo emiten una advertencia.
2026 / 09
- Solución: las variables de entorno de launchSettings.json se ignoran en un perfil con commandName: Executable
Si tu perfil Executable ejecuta dotnet run o dotnet watch, el comando interno aplica el perfil predeterminado y sobrescribe tus variables. Agrega --no-launch-profile y usa el SDK 10.0.200+.
- Blazor incorpora componentes de UI agéntica en .NET 11 RC1: ChatPage, UIAgent y aprobaciones de herramientas
Microsoft.AspNetCore.Components.AI es un paquete experimental de Blazor en .NET 11 RC1 que convierte cualquier IChatClient en una UI de chat con streaming, aprobaciones de herramientas, renderizado tipado de herramientas y estado compartido sobre AG-UI.
- Solución: el WebSocket de hot reload de Blazor en dotnet watch falla en un dominio local personalizado (403)
Desde los SDK de .NET de septiembre de 2026 (10.0.112, 10.0.401, 11 RC1), dotnet watch rechaza los WebSockets de browser-refresh desde orígenes desconocidos. Define DOTNET_WATCH_AUTO_RELOAD_WS_ORIGINS con el nombre de tu host.
- Cómo agregar un índice único en una propiedad mapeada a JSON en EF Core 11 (SQL Server y SQLite)
HasIndex(...).IsUnique() en un miembro ToJson() no impone unicidad en EF Core 11 RC 1: SQL Server descarta IsUnique y SQLite indexa el documento completo. Expón el valor JSON como una columna calculada y coloca el índice único sobre esa columna en su lugar.
- Solución: IConfiguration.Bind no llena una propiedad array o List<T> desde appsettings.json
El binder omite en silencio las propiedades array sin setter público, los IReadOnlyList<T> de solo lectura, los campos y los miembros init con el source generator, y agrega a los valores predeterminados en lugar de reemplazarlos. Medido en .NET 10.0.12 y 11 RC 1.
- Cómo serializar campos públicos como Vector3 y Quaternion con System.Text.Json
System.Text.Json escribe Vector3 como {} y Quaternion como {"IsIdentity":false} porque guardan sus datos en campos públicos. Así lo solucionan IncludeFields, un converter personalizado, un modificador del resolver y la generación de código fuente, medido en .NET 10 y .NET 11 RC 1.
- Cómo desactivar la validación antiforgery en un solo endpoint de formulario de minimal API en ASP.NET Core 11
Llama a .DisableAntiforgery() en ese único endpoint, o en un MapGroup. En ASP.NET Core 11 eso lo excluye tanto del middleware de tokens como de la nueva comprobación CSRF automática. Matriz medida, trampas de precedencia y alternativas más acotadas.
- Cómo agregar pluralización personalizada de nombres de tabla a dotnet ef dbcontext scaffold con IPluralizer
Una tabla llamada Gas genera una entidad llamada Ga. Reemplaza el pluralizador integrado de Humanizer por tu propio IPluralizer, regístralo mediante IDesignTimeServices en el proyecto de inicio y entiende por qué TryAddSingleton ahí no hace nada en silencio.
- Cómo garantizar el procesamiento idempotente de mensajes con EF Core 11 cuando dos instancias de la app consumen el mismo mensaje
La comprobación de existencia en tu handler no es la protección que crees. Pon un índice único en la tabla inbox, escribe el marcador en el mismo SaveChanges que el cambio de negocio, y deja que la base de datos elija al ganador. Más la trampa de ExecuteUpdate que deshace todo en silencio.
- Cómo mantener consistentes una escritura en base de datos y una subida a Azure Blob Storage en una sola solicitud de ASP.NET Core
No existe ninguna transacción que abarque SQL Server y Blob Storage. Sube a un nombre que la base de datos ya conoce, confirma en segundo lugar, compensa ante el fallo y deja que un barredor limpie la ventana de caída. Con la sobrecarga de UploadAsync que convierte en silencio una creación condicional en una sobrescritura.
- Cómo aplicar convenciones de nombres personalizadas para claves primarias, claves foráneas e índices en las migraciones de EF Core 11
Renombra cada PK_, FK_, AK_ e IX_ que genera EF Core 11 con una sola IModelFinalizingConvention, deja que los nombres explícitos sigan ganando, mantente por debajo del límite de longitud de identificadores y evita la reconstrucción del índice clúster que la siguiente migración genera sobre una base de datos existente.
- Migra una app de EF Core con Cosmos tras el cambio en el escape de los id generados en EF Core 11
EF Core 11 deja de escapar '/', '\', '?' y '#' en los valores id generados para Cosmos DB, así que los documentos escritos por EF Core 8-10 dejan de resolverse por clave. Cómo saber si te afecta, cuándo activar el switch EscapeIllegalCosmosIdCharacters y cómo reescribir los id de forma segura con un lote transaccional.
- Microsoft.Data.SqlClient vs System.Data.SqlClient en .NET 11
Usa Microsoft.Data.SqlClient. System.Data.SqlClient está obsoleto, ya emite CS0618 en cada tipo que toques y pierde sus assets de .NET cuando .NET 8 llegue al fin de soporte el 2026-11-10, el mismo día en que sale .NET 11. La brecha de funcionalidad medida, el valor por defecto de Encrypt que rompe la migración y la división del paquete en 7.0.
- Process.Run vs Process.Start en .NET 11: ¿cuál deberías usar?
Usa Process.Run cuando inicias una herramienta y solo te importa cómo terminó: una sola llamada, un timeout que mata al proceso hijo y un ProcessExitStatus con la señal. Quédate con Process.Start cuando necesitas el objeto Process: escribir en stdin, leer la salida a medida que llega, UseShellExecute o matar un árbol de procesos completo.
- El JIT de .NET 11 desvirtualiza los métodos virtuales genéricos, y la asignación de memoria desaparece con ellos
El artículo Performance Improvements in .NET 11 de Stephen Toub muestra llamadas a métodos virtuales genéricos que bajan de 6.7 ns y 24 bytes a 1.8 ns y cero asignaciones. Tres pull requests de RyuJIT desbloquearon el inlining en el despacho que solía ser el más opaco de .NET.
- Nivel de compatibilidad 150 vs 160 de SQL Server: qué cambia para las consultas de EF Core 11
EF Core 11 ahora usa por defecto el nivel de compatibilidad 160 en UseSqlServer, lo que mete LEAST, GREATEST y LTRIM/RTRIM de dos argumentos en tu SQL, incluido cada Take(n).FirstOrDefault(). Quédate en 160 con SQL Server 2022 o posterior; fija UseCompatibilityLevel(150) si algún entorno todavía ejecuta SQL Server 2019.
- Solución: Could not load file or assembly 'Microsoft.Data.SqlClient, Version=7.0.0.0' tras actualizar EF Core
EF Core 11 está compilado contra Microsoft.Data.SqlClient 7.0.0.0, pero una copia 6.x ganó en el restore o en la implementación. Quita el pin antiguo de SqlClient y vuelve a implementar la salida completa.
- Cómo crear y extraer archivos ZIP de forma asíncrona con las APIs async de ZipArchive en .NET 11
Usa ZipFile.CreateFromDirectoryAsync, ExtractToDirectoryAsync, ZipArchive.CreateAsync y ZipArchiveEntry.OpenAsync sin I/O síncrona oculta. Medido en .NET 11 RC 1 y .NET 10.0.12, incluido el bug de .NET 10 que todavía bloquea Kestrel.
- Cómo enlazar un objeto complejo de la query string con [AsParameters] en una minimal API de ASP.NET Core 11
Pon [AsParameters] en una clase o un record para enlazar un filtro completo de la query string en una minimal API de ASP.NET Core 11. Cubre valores predeterminados, arrays, enums, objetos anidados, validación, OpenAPI y un bug del generador de Native AOT con records posicionales.
- Cómo habilitar la reducción y ofuscación con R8 en una compilación Release de .NET MAUI para Android
Establece AndroidLinkTool en r8, mantén el recorte activado y agrega un archivo ProguardConfiguration. Por qué .NET 10 y .NET 11 RC 1 todavía generan Java sin ofuscar, cómo lo cambia la nueva propiedad AndroidR8ObfuscationMode y cómo verificar que R8 realmente se ejecutó.
- Cómo interceptar el botón atrás de Android en una página raíz de .NET MAUI Shell
Sobrescribe OnBackButtonPressed en la página raíz y usa .NET MAUI 10.0.101 o posterior. Por qué las páginas raíz dejaron de recibir las pulsaciones de atrás desde 10.0.70 (Android 16) y 10.0.100 (todas las versiones de Android), por qué .NET 11 RC 1 sigue afectado, por qué Shell.OnNavigating y BackButtonBehavior.Command no ayudan, y una solución alternativa en MainActivity para las versiones rotas.
- .NET 11 RC 1 hace reproducibles las imágenes de contenedor de dotnet publish
El SDK de .NET 11 RC 1 respeta SOURCE_DATE_EPOCH al publicar imágenes de contenedor, elimina el id de proceso de los encabezados tar de las capas y omite la subida de blobs cuando el registro ya tiene el manifiesto. Mismo commit de entrada, mismo digest de salida.
- Cómo escapar los comodines % y _ en consultas con EF.Functions.Like y StartsWith en EF Core 11
StartsWith, EndsWith y Contains ya escapan % y _ por ti en EF Core 11, pero EF.Functions.Like no lo hace. Aquí tienes el SQL que genera EF, un helper de escape reutilizable y la sobrecarga con escapeCharacter que hace que funcione en SQL Server, SQLite y PostgreSQL.
- Columna json nativa vs nvarchar(max) para almacenar JSON en SQL Server con EF Core 11
Usa el tipo json nativo en SQL Server 2025 y Azure SQL: EF Core 11 obtiene de él JSON_CONTAINS, JSON_VALUE tipado, modify() en el lugar e índices JSON. Quédate en nvarchar(max) para SQL Server 2019/2022, herramientas heredadas o un esquema que debas poder revertir.
- Lookup<TKey, TElement> vs Dictionary<TKey, List<TValue>> para claves duplicadas en C#
Usa ToLookup cuando agrupas una sola vez y solo lees: es inmutable, devuelve una secuencia vacía para claves inexistentes, acepta claves null y conserva el orden de primera aparición. Usa Dictionary<TKey, List<TValue>> cuando los grupos cambian después de la construcción o cruzan una frontera JSON.
- Uniones de C# en ASP.NET Core 11: los cuerpos, SignalR y OpenAPI funcionan, las query strings no
El equipo de ASP.NET Core trazó dónde fluyen los tipos union de C# 15 en .NET 11: cuerpos de minimal APIs y MVC, el JsonHubProtocol de SignalR, Blazor y esquemas anyOf de OpenAPI. El binding de ruta, query, headers y formularios todavía no está soportado.
- SignalR en .NET 11 RC 1 cambia un token por vencer sin cerrar la conexión
Las APIs de actualización de autenticación de SignalR quedan finalizadas en .NET 11 RC 1, con callbacks renombrados en HubConnection, un cliente TypeScript y circuitos de Blazor Server que toman el ClaimsPrincipal actualizado de forma automática.
- .NET 11 RC 1 te deja enviar SIGTERM a un proceso hijo sin P/Invoke
Signal, WaitForExitStatus y ProcessExitStatus llegan directamente a System.Diagnostics.Process en .NET 11 RC 1, así que apagar de forma ordenada un proceso hijo ya no necesita un P/Invoke a kill ni un rodeo por SafeProcessHandle.
- Cómo consumir una respuesta ProblemDetails de RFC 9457 desde un HttpClient tipado sin referenciar ASP.NET Core
La BCL no tiene un tipo ProblemDetails, y agregar un FrameworkReference a Microsoft.AspNetCore.App hace que tu cliente se niegue a arrancar en un contenedor que solo trae el runtime. Aquí está el modelo de 20 líneas que resuelve el problema, el DelegatingHandler que convierte problem+json en una excepción tipada, y el mito del content-type que casi todas las respuestas siguen repitiendo.
- Cómo encontrar los manejadores async void que causan ANR en una app Android de .NET MAUI
Play Console te dice que tu tasa de ANR supera el 0.47% y te entrega una traza nativa llena de frames de libcoreclr.so. Así se pasa de esa traza inútil al manejador de eventos async void exacto que bloqueó el hilo principal, usando un printer de Looper, un envoltorio de SynchronizationContext que nombra la máquina de estados y dotnet-trace sobre dsrouter.
- Cómo usar bloqueo pesimista con UPDLOCK y SELECT ... FOR UPDATE en EF Core 11
EF Core 11 sigue sin tener una API de bloqueo. Así se toma un bloqueo de fila real con FromSql: WITH (UPDLOCK, ROWLOCK) en SQL Server, FOR UPDATE en PostgreSQL, la trampa de la subconsulta que amplía el bloqueo en silencio, NOWAIT y SKIP LOCKED, reintentos ante interbloqueos, y qué hacer cuando la fila todavía no existe.
- Cómo escribir un value converter de EF Core 11 que mapee un null de la base de datos a un valor no nulo en código
EF Core nunca pasa null a un value converter por defecto. Aquí está el constructor interno convertsNulls que cambia eso, la llamada IsRequired(false) de la que depende, por qué no puede funcionar con enums ni otros tipos de valor, la trampa WHERE col = NULL que crea, y los dos patrones que resuelven el problema sin usar una API interna.
- ¿Qué es un modo de renderizado en Blazor y cuál ejecuta mi componente?
Un modo de renderizado decide dónde se ejecuta un componente Razor y si es interactivo. Estos son los cuatro modos de .NET 11, las reglas de propagación que deciden qué hereda tu componente, y las propiedades RendererInfo y AssignedRenderMode que te dicen en tiempo de ejecución cuál ganó.
- ¿Qué es un interceptor de EF Core y cuándo necesitas uno?
Un interceptor de EF Core es una clase que EF llama antes y después de operaciones como ejecutar un comando o SaveChanges, y que puede modificarlas o suprimirlas, no solo observarlas. Aquí están los siete puntos de intercepción de EF Core 11, las reglas de registro y ciclo de vida, y los casos en los que un filtro de consulta o el registro de eventos son la mejor respuesta.
- Migra una app .NET MAUI para Android al nivel de API 36
Google Play exige el nivel de API objetivo 36 desde el 2026-08-31, con prórrogas hasta el 2026-11-01. Este es el camino completo en .NET MAUI desde net9.0-android hasta API 36: el cambio de target framework, el uses-sdk fijo que te deja en silencio en el nivel anterior, el modo edge-to-edge sin opción de exclusión, el gesto de retroceso predictivo y las reglas de pantallas grandes.
- ¿Qué es la bandera W^X en .NET y la necesita Native AOT?
W^X (write xor execute) es la regla de que ninguna página de memoria sea escribible y ejecutable al mismo tiempo. En .NET es la opción DOTNET_EnableWriteXorExecute, activa por defecto desde .NET 7, y existe únicamente para el JIT. Native AOT nunca la lee. Aquí está cómo la implementa el runtime, cuánto cuesta y cuándo desactivarla es una solución legítima.
- Migra una app Android de .NET MAUI de Mono a CoreCLR en .NET 11
Una migración paso a paso de Mono a CoreCLR para .NET MAUI en Android: el piso de API 24, las propiedades de MSBuild exclusivas de Mono que ahora rompen tu compilación, por qué creció tu APK, cómo perfilar la regresión de arranque con dotnet-dsrouter y dotnet-trace, y cómo es realmente una reversión ahora que la ruta de Mono desapareció.
- Migrar de VSTest a Microsoft.Testing.Platform en el SDK de .NET 11
Una migración paso a paso de VSTest a Microsoft.Testing.Platform 2.3.3: el opt-in de OutputType Exe, el cambio de runner en global.json, los loggers convertidos en reporters, .runsettings reemplazado por testconfig.json y los códigos de salida que ponen en rojo un job de CI que estaba en verde.
- Migrar fuera de BinaryFormatter tras su eliminación en .NET moderno
La implementación de BinaryFormatter se eliminó en .NET 9 y sigue lanzando PlatformNotSupportedException en .NET 10 y .NET 11: cómo elegir un serializador de reemplazo, leer blobs NRBF ya persistidos con NrbfDecoder y qué se rompe en WinForms, WPF y ResX.
- Dependiente del framework vs autocontenido vs Native AOT para una imagen de contenedor de .NET 11
Dependiente del framework sobre una imagen aspnet chiseled es el valor por defecto correcto para un servicio ASP.NET Core en .NET 11, porque la capa del runtime se comparte entre servicios y una CVE del runtime se corrige actualizando la imagen base. Autocontenido con trimming y Native AOT compran una imagen de 2x a 5x más pequeña y un arranque en frío mucho más rápido, y te cuestan eso. Tamaños publicados reales, las cuentas de las capas compartidas y el bug de inferencia de imagen base de .NET 11 que rompe la ruta AOT.
- Migrar un proyecto de pruebas de xUnit v2 a xUnit v3 (de 2.9.3 a 4.0.0)
Migración paso a paso de xunit 2.9.3 a xunit.v3 4.0.0: cambios de paquetes, el cambio de OutputType a Exe, IAsyncLifetime devolviendo ValueTask, la eliminación de Xunit.Abstractions y la sintaxis de filtros de CI que deja de coincidir en silencio.
- Devolver un Task directamente vs pasarlo con async/await en un método de repositorio de C#: ¿cuál deberías usar?
Omitir async/await en un método de paso de repositorio ahorra unos 6 ns y 72 bytes, y te cuesta un marco de pila, la semántica de try/catch y la liberación segura de recursos. Mantén return await salvo que el método sea un paso puro en una ruta caliente medida.
2026 / 08
- Fix: 23505: duplicate key value violates unique constraint en un insert concurrente de EF Core
El comprobar-luego-insertar de tu handler no es atómico. Captura PostgresException con SqlState 23505, o colapsa todo en una sola sentencia INSERT ... ON CONFLICT. EnableRetryOnFailure no te va a ayudar.
- Solución: CREATE DATABASE permission denied in database 'master' al ejecutar dotnet ef database update
Migrate() de EF Core siempre comprueba si la base de datos existe y la crea si no, desde una conexión a master fija en el código. Otorga CREATE ANY DATABASE, arregla el acceso del login a la base de datos existente, o genera un script SQL idempotente.
- Fix: Doesn't support required ABI al instalar una app .NET MAUI de Android
El APK no contiene ninguna biblioteca nativa para la CPU del dispositivo. Desde .NET 9 los RuntimeIdentifiers por defecto de Android son solo de 64 bits, así que la solución es fijar RuntimeIdentifiers de forma explícita. Cubre ADB0020, XA0036, NETSDK1083, la correspondencia entre ABI y RID, el texto de la Play Console y por qué el fragmento de cuatro RID que todo el mundo copia falla en .NET 11.
- Solución: failed to resolve source metadata for mcr.microsoft.com/dotnet/aspnet
BuildKit no puede leer el manifiesto de tu imagen base. Verifica que el tag exista, repara el credential helper de Docker, abre los dos endpoints de MCR y haz pull previo para compilaciones sin red.
- Aspire 13.5 pone una terminal real dentro del dashboard
WithTerminal() da a un recurso una sesión PTY interactiva en la que puedes escribir desde el dashboard o a la que puedes conectarte desde tu propia shell. Es experimental, desengancha el depurador y la opción Shell contra la que quizá escribiste ya no existe.
- ASP.NET Core deja de convertir 413 en 500 en UseExceptionHandler
Un PR fusionado en main de dotnet/aspnetcore el 2026-08-19 hace que ExceptionHandlerMiddleware respete BadHttpRequestException.StatusCode en lugar de sobrescribirlo con 500.
- Solución: [FromForm] Dictionary<string, string> siempre es null en una minimal API
Un Dictionary con [FromForm] en una minimal API se enlaza con prefijo vacío: las claves del formulario deben ser [key], no metadata[key]. Envuélvelo en una clase para conservar nombres legibles.
- Solución: no se puede generar OpenAPI 3.0 tras actualizar Swashbuckle.AspNetCore a v9
Swashbuckle 8 y posteriores emiten openapi 3.0.4, no 3.0.1, y no existe un OpenApiSpecVersion para versiones de parche. Por qué cambió y cuatro formas de fijar la cadena que espera tu herramienta.
- Solución: Swagger UI muestra Unable to render this definition tras actualizar a .NET 11
ASP.NET Core 11 emite openapi 3.2.0 por defecto y Swagger UI por debajo de 10.1.5 lo rechaza. Actualiza Swashbuckle.AspNetCore.SwaggerUI o fija OpenApiVersion en OpenApi3_1.
- El servidor de MSBuild viene activado por defecto en .NET 11 Preview 7
Preview 7 cambia el servidor de MSBuild de opcional a activado por defecto, así que las llamadas consecutivas a dotnet build y dotnet test reutilizan un proceso de trabajo ya caliente. Esto es lo que cambió, cómo desactivarlo y cómo comprobar que el servidor realmente se activó.
- Cómo generar una clave primaria desde una secuencia de base de datos al insertar en EF Core 11
Mueve una clave de IDENTITY a una secuencia de SQL Server en EF Core 11 con UseSequence: el SQL exacto que emite EF, por qué de pronto funcionan los valores de clave explícitos sin IDENTITY_INSERT, la secuencia bigint alimentando una columna int y los huecos que tienes que contemplar en el diseño.
- Cómo descargar un archivo desde un componente Blazor sin interoperabilidad con JavaScript
Olvídate del módulo JS downloadFileFromStream. Renderiza un ancla con el atributo download que apunte a un endpoint de minimal API que devuelva TypedResults.File, o envía por POST un formulario HTML simple con un AntiforgeryToken. Incluye por qué el atributo download es lo que impide que la navegación mejorada de Blazor se trague el clic, por qué data-enhance descarta el archivo en silencio y la trampa de cookies frente a bearer.
- Cómo usar IDbContextFactory<T> desde un servicio singleton en Blazor
Un singleton no puede inyectar un DbContext, pero sí puede inyectar IDbContextFactory<T>, porque AddDbContextFactory registra la fábrica como singleton por omisión. Crea y libera un contexto por llamada, nunca guardes la instancia.
- System.IO.Compression por fin lee y escribe ZIP cifrados en .NET 11 Preview 7
.NET 11 Preview 7 agrega entradas ZIP protegidas con contraseña a System.IO.Compression, con soporte de AES-256, tipos de opciones para operaciones sobre directorios completos y un error con archivos vacíos que ya está corregido en main.
- Scalar vs Swagger UI para documentación OpenAPI en ASP.NET Core 11
Scalar envía 1.02 MiB de JavaScript comprimido con gzip y un constructor de solicitudes mucho mejor. Swagger UI envía 514 KiB y renderiza OpenAPI 3.2, que es lo que .NET 11 ya emite por defecto. Payloads medidos, la brecha de 3.2, enrutamiento por endpoints en ambos lados y los detalles de autenticación que deciden.
- Zstandard vs Brotli vs Gzip para compresión de respuestas en .NET 11
Zstandard es el valor predeterminado correcto para respuestas dinámicas de API en .NET 11, pero no con la calidad que trae el proveedor de ASP.NET Core. Benchmarks sobre payloads JSON reales que muestran por qué la calidad 1 supera a la calidad 3 predeterminada tanto en tamaño como en CPU, cuándo Brotli sigue ganando y por qué Gzip solo sobrevive como alternativa de compatibilidad.
- Los circuitos de Blazor Server ahora se pausan solos cuando la pestaña queda inactiva
.NET 11 Preview 7 agrega un paquete opcional que pausa los circuitos interactivos de Server cuando la pestaña del navegador está oculta, liberando memoria y conexiones SignalR que retienen usuarios que en realidad no están ahí.
- Solución: 404 Not Found para blazor.server.js después de instalar un nuevo SDK de .NET
blazor.server.js devuelve 404 en .NET 10 porque el script dejó de ser un recurso incrustado. Agrega RequiresAspNetWebAssets al proyecto host, o asegúrate de que tenga un archivo .razor.
- C# 15 suma break y continue con etiqueta en .NET 11 Preview 7
break y continue con etiqueta llegaron en la sección de C# de .NET 11 Preview 7. Ahora puedes poner una etiqueta en un bucle y saltar directo a él, lo que jubila los trucos con banderas booleanas y goto para bucles anidados.
- Solución: dotnet tool install --global dotnet-ef lanza un error
Todas las formas en que dotnet tool install --global dotnet-ef falla en el SDK de .NET 10, con el mensaje exacto y el código de salida de cada una: ya instalado, versión no encontrada, degradación bloqueada, conflicto de shim, feed de NuGet caído y el desajuste de runtime que solo se rompe despues de que la instalación termina bien.
- Solución: The 'interceptors' feature is not enabled in this namespace
CS9137 viene del generador de código fuente de Microsoft.AspNetCore.OpenApi. Agrega InterceptorsNamespaces a cada proyecto que llame a AddOpenApi, no solo al que tiene el PackageReference.
- Solución: The type or namespace name 'OpenApiReference' could not be found
OpenApiReference se eliminó en Microsoft.OpenApi 2.0. Cambiar el using a Microsoft.OpenApi no basta: reemplaza cada uso por una referencia tipada como OpenApiSchemaReference.
- Cómo llamar a un procedimiento almacenado y mapear sus resultados en EF Core 11
Usa FromSql sobre un DbSet cuando el procedimiento devuelve filas completas de una entidad, Database.SqlQuery<T> cuando devuelve una proyección, y ExecuteSql cuando no devuelve nada. Nunca encadenes un operador LINQ sobre un EXEC, y nunca leas un parámetro de salida antes de que el lector se haya liberado.
- Cómo personalizar la serialización de System.Text.Json generada por código fuente con un modificador de type info resolver
Adjunta un modificador de JsonTypeInfo a un JsonSerializerContext generado por código fuente en .NET 11: por qué new MyContext(options) lo descarta en silencio, la configuración con WithAddedModifier que sí funciona, la ruta rápida que pierdes (medida) y la trampa de la política de nombres que deja el modificador sin efecto.
- Cómo sobrescribir el manejador de resiliencia predeterminado que registra Aspire
AddServiceDefaults de Aspire aplica un manejador de resiliencia estándar a cada HttpClient. Llamar a AddStandardResilienceHandler otra vez apila un segundo manejador en lugar de reemplazarlo. Aquí están las tres rutas reales para sobrescribirlo, el nombre de opciones -standard que nadie documenta y el timeout infinito que heredas si solo lo eliminas.
- Cómo renombrar una tabla en una migración de EF Core 11 sin perder datos
EF Core genera RenameTable cuando cambias el nombre de la tabla, pero DropTable más CreateTable cuando renombras la clase de entidad. Aquí verás cómo distinguir ambos casos, el truco de ToTable que hace gratis el renombrado de una clase, y el bug de renombrado de columnas que intercambia tus datos en silencio.
- Cómo ejecutar una app de C# basada en archivo con `dotnet run app.cs` en .NET 11
Guía completa de las apps de C# basadas en archivo: ejecutar un solo archivo .cs con dotnet run, las directivas #:package, #:sdk, #:property, #:project e #:include, scripts multiarchivo con #:ref, manejo de argumentos y stdin, la caché de compilación, la publicación con native AOT, el empaquetado como herramienta de dotnet y dotnet project convert cuando el script se queda corto.
- Cómo servir documentación OpenAPI con Scalar en lugar de Swagger UI en ASP.NET Core 11
Reemplaza UseSwaggerUI por MapScalarApiReference en ASP.NET Core 11: enrutamiento, múltiples documentos, autenticación precargada, control en producción, recursos sin CDN y las extensiones de OpenAPI exclusivas de Scalar.
- Solución: Attempting to reconnect to the server tras desconectarse un circuito de Blazor Server
El modal de reconexión significa que el circuito de SignalR se cayó, no que tu aplicación falló. Averigua si el reintento terminó en failed o en rejected y arregla la afinidad de sesión, la ventana de retención de 3 minutos, el límite de 32 KB o persiste el estado con [PersistentState].
- gRPC vs REST vs SignalR para llamadas entre servicios en .NET 11
Para llamadas internas entre servicios en .NET 11, elige gRPC por defecto cuando controlas ambos extremos del contrato y la llamada es punto a punto. Usa REST con JSON cuando algo que no controlas tiene que llamar al servicio. SignalR no es un transporte RPC entre servicios: recurre a él solo cuando un productor debe distribuir un mensaje a muchos consumidores de larga vida.
- Solución: AggregateException "One or more errors occurred" al esperar Task.WhenAll en C#
await Task.WhenAll relanza solo uno de los fallos. Guarda la tarea de WhenAll en una variable y lee su Exception.InnerExceptions para ver todos los errores, no uno solo.
- Solución: HTTP Error 500.30 - ASP.NET Core app failed to start después de implementar en IIS
500.30 significa que tu aplicación lanzó una excepción durante el arranque dentro de w3wp.exe. La excepción real ya está en el registro de eventos de Aplicación de Windows bajo IIS AspNetCore Module V2. Léelo primero y luego ordena la solución: framework compartido faltante, discrepancia x86/x64 del grupo de aplicaciones, configuración faltante o permisos del grupo de aplicaciones.
- Cómo implementar concurrencia optimista con un token rowversion en EF Core 11
Agrega un token de concurrencia rowversion en EF Core 11: la configuración con [Timestamp] e IsRowVersion, el SQL que EF realmente emite, cómo capturar DbUpdateConcurrencyException, gana la base de datos vs gana el cliente vs fusión, APIs desconectadas con ETags y las cinco trampas que lo desactivan en silencio.
- Cómo guardar un enum como string en EF Core 11 con un value converter
Guarda los enums de C# como strings legibles en lugar de ints en EF Core 11: HasConversion, configuración masiva para todos los enums, la trampa de nvarchar(max), el problema del ordenamiento y cómo migrar una columna int existente.
- Cómo validar opciones al arranque con IValidateOptions<T> en .NET 11
Implementa IValidateOptions<T>, regístralo en DI y encadena ValidateOnStart para que un appsettings.json incorrecto mate el proceso en lugar de la primera solicitud que lo toque. Cubre la sobrecarga Validate<TValidator>() de .NET 11, la validación asíncrona con IAsyncValidateOptions<T> y los tres lugares donde ValidateOnStart no hace nada en silencio.
- Cómo configurar Kestrel para servir HTTP/3 en ASP.NET Core 11
Una guía completa para habilitar HTTP/3 en Kestrel en ASP.NET Core 11: la configuración del endpoint con HttpProtocols.Http1AndHttp2AndHttp3, los requisitos de plataforma de MsQuic en Windows, Linux y macOS, por qué la primera solicitud nunca es HTTP/3, cómo verificarlo con HttpClient y middleware, el ajuste de QuicTransportOptions y los problemas de firewall y proxy que hacen que caiga silenciosamente.
- Cómo reemplazar new Regex(...) por el generador de código fuente [GeneratedRegex] en .NET 11
Una guía completa para convertir new Regex(pattern, RegexOptions.Compiled) en [GeneratedRegex] en .NET 11: la reescritura mecánica, métodos parciales frente a propiedades parciales, números medidos de arranque y throughput, los diagnósticos SYSLIB1040-1045 y los dos patrones donde el generador recae silenciosamente en un Regex en caché.
- Cómo ejecutar trabajo intensivo de CPU en una app Blazor WebAssembly con Web Workers en .NET 11
Guía completa para sacar el trabajo intensivo de CPU del hilo de UI de Blazor WebAssembly en .NET 11: por qué Task.Run no ayuda, la nueva plantilla blazorwebworker, la API WebWorkerClient con cancelación y timeouts, los límites de marshalling de JSExport y el costo del segundo runtime que pagas por cada worker.
- IOptions<T> vs IOptionsSnapshot<T> vs IOptionsMonitor<T> en .NET 11
Usa IOptions<T> por defecto. Usa IOptionsMonitor<T> cuando un singleton debe ver recargas de configuración, e IOptionsSnapshot<T> solo cuando un consumidor scoped necesita un valor estable durante una solicitud. El eje que decide es el tiempo de vida del consumidor, no la forma de la configuración.
2026 / 07
- Solución: JavaScript interop calls cannot be issued at this time (prerenderizado de Blazor)
El prerenderizado ejecuta tu componente en el servidor sin navegador, así que IJSRuntime lanza una excepción. Mueve la llamada a OnAfterRenderAsync, condiciónala con RendererInfo.IsInteractive o desactiva el prerenderizado.
- Solución: Your startup project doesn't reference Microsoft.EntityFrameworkCore.Design
Agrega Microsoft.EntityFrameworkCore.Design al proyecto de inicio que compila dotnet ef, no al proyecto que contiene tu DbContext, y pasa -s en soluciones por capas.
- Solución: Reflection-based serialization has been disabled for this application
Esta InvalidOperationException significa que PublishTrimmed o PublishAot pusieron JsonSerializerIsReflectionEnabledByDefault en false. Se soluciona con un JsonSerializerContext generado.
- Solución: "The model for context 'X' has pending changes" en EF Core 11
EF Core lanza PendingModelChangesWarning cuando tu modelo ya no coincide con el último snapshot de migración. Agrega la migración o corrige el falso positivo.
- Cómo aplicar migraciones de EF Core 11 en producción con dotnet ef migrations bundle
Una guía completa para implementar cambios de esquema de EF Core 11 con bundles de migración: compilar efbundle en CI, la trampa de appsettings.json con cadenas de conexión con nombre, bundles autocontenidos y el RID musl de Alpine, el bloqueo de migraciones desde EF Core 9, revertir con una migración objetivo y por qué las transacciones por migración no te salvan en MySQL.
- Cómo usar parámetros de ruta de Shell y query properties para navegar en .NET MAUI 11
Guía completa para pasar datos con la navegación de Shell en .NET MAUI 11: registrar rutas globales, parámetros de consulta de tipo string, QueryPropertyAttribute frente a IQueryAttributable, la asimetría de decodificación de URL entre ambos, ShellNavigationQueryParameters de un solo uso frente a la sobrecarga con IDictionary que retiene memoria, pasar datos hacia atrás con ..?key=value, y por qué QueryPropertyAttribute no es seguro para el recorte.
- Cómo diagnosticar una fuga de memoria administrada con dotnet-gcdump y dotnet-dump
Un flujo de trabajo completo para encontrar una fuga de memoria administrada en .NET 11: confirma el crecimiento con dotnet-counters, toma dos gcdumps y compáralos, y luego recolecta un dump y usa dumpheap, gcroot y objsize en dotnet-dump analyze para descubrir qué sigue reteniendo la referencia.
- Cómo publicar una aplicación .NET 11 como imagen de contenedor con dotnet publish /t:PublishContainer
Guía completa para construir imágenes de contenedor desde una aplicación .NET 11 sin Dockerfile: el target PublishContainer, ContainerRepository y ContainerImageTags, la selección de imagen base con ContainerBaseImage y ContainerFamily, el push a un registro y cómo se resuelve la autenticación, índices de imagen OCI multiarquitectura, el usuario no root por defecto, el control del entrypoint, la salida en tarball para escáneres y los casos en los que todavía necesitas un Dockerfile.
- Cómo serializar una jerarquía de tipos polimórfica con JsonDerivedType en System.Text.Json
Guía completa de JSON polimórfico en .NET 11: JsonDerivedType y JsonPolymorphic, por qué el tipo declarado lo decide todo, la regla de orden de $type, todas las excepciones que lanza la característica, el modelo de contratos para tipos que no son tuyos y lo que ASP.NET Core emite en OpenAPI.
- Cómo agregar Aspire a una solución ASP.NET Core existente sin reestructurarla
Agrega Aspire 13.4 a una solución ASP.NET Core heredada con dos proyectos nuevos y tres líneas por servicio: aspire init, cableado del AppHost con AddProject y WithReference, conservando tu launchSettings.json y tus cadenas de conexión, y los problemas de resiliencia, endpoints de salud y proxy que aparecen el primer día.
- Cómo probar código dependiente del tiempo con TimeProvider y FakeTimeProvider en .NET 11
Reemplaza DateTime.UtcNow, Stopwatch y Task.Delay por System.TimeProvider para que las pruebas controlen el reloj: registro en la inyección de dependencias, FakeTimeProvider.Advance y SetUtcNow, pruebas de timeouts y de un BackgroundService basado en PeriodicTimer, más los problemas con Advance y las continuaciones y con xUnit v2.
- Cómo escribir pruebas de integración con WebApplicationFactory<T> en ASP.NET Core 11
Guía completa de WebApplicationFactory<TEntryPoint> en ASP.NET Core 11: cómo hacer accesible el punto de entrada Program, ConfigureTestServices frente a ConfigureWebHost, reemplazar el registro de EF Core a través de IDbContextOptionsConfiguration, el nuevo hook ConfigureHostApplicationBuilder de .NET 11 preview 6, autenticación simulada, WebApplicationFactoryClientOptions y UseKestrel cuando necesitas un puerto real.
- Migrar de llamadas bloqueantes .Result/.Wait() a async en toda la cadena en una base de código C# heredada
Un plan por etapas para eliminar sync-over-async de una base de código .NET existente: inventariar con analizadores, medir la inanición del ThreadPool, convertir una cadena de llamadas a la vez y reducir el conteo a cero en .NET 11.
- Migra de la interpolación de cadenas en ILogger a plantillas de mensaje de registro estructurado en .NET 11
Guía paso a paso para convertir llamadas a ILogger con interpolación $ en plantillas de mensaje y métodos generados con [LoggerMessage] en .NET 11: qué se rompe, cómo barrer un código base con CA2254, cómo verificar el estado JSON y cómo revertir.
- Filtros de endpoint vs. middleware en ASP.NET Core 11: ¿cuál deberías usar?
Una guía de decisión para ASP.NET Core 11: el middleware se ejecuta en cada solicitud antes de que tu handler enlace los datos, los filtros de endpoint se ejecutan solo para el endpoint que coincide, después del enlace, y pueden ver los argumentos tipados. Incluye una tabla comparativa, escenarios de cuándo elegir cada uno, las reglas de orden y los detalles que fuerzan la elección.
- Migrar IOperationFilter e ISchemaFilter de Swashbuckle a transformadores de OpenAPI en .NET 11
Una referencia de migración filtro por filtro para pasar el código de IOperationFilter e ISchemaFilter de Swashbuckle a los transformadores de operación y esquema integrados en .NET 11, con el mapeo de los objetos de contexto y los cambios de Microsoft.OpenApi v2 que rompen la compilación.
- .Result vs .Wait() vs GetAwaiter().GetResult() vs await en C#: cuál deberías usar?
await es la respuesta correcta casi siempre. Cuando de verdad tienes que bloquear, GetAwaiter().GetResult() supera a .Result y .Wait() porque lanza la excepción original. Una matriz de decisión para .NET 11 y C# 14.
- Los clientes de SignalR por fin pueden cancelar un método de hub en ejecución en .NET 11 Preview 6
Cancelar el CancellationToken que pasas a InvokeAsync ahora llega al servidor y cancela el método de hub. Esto cierra una solicitud de SignalR abierta desde 2019.
- Typed results (Results<>) vs IResult vs IActionResult en ASP.NET Core 11
En ASP.NET Core 11, devuelve Results<T1, TN> con TypedResults para minimal APIs y ActionResult<T> para controladores. Trata IResult e IActionResult a secas como escotillas de escape: compilan para cualquier respuesta pero no le describen nada a OpenAPI, así que los pagas con atributos ProducesResponseType escritos a mano.
- WebApplication.CreateBuilder vs CreateSlimBuilder vs CreateEmptyBuilder en ASP.NET Core 11
Usa CreateBuilder para una app normal, CreateSlimBuilder cuando publicas con trimming o Native AOT detrás de un proxy TLS, y CreateEmptyBuilder solo cuando quieres registrar cada servicio tú mismo. Aquí tienes la matriz de características y las trampas que fuerzan la decisión.
- Tipos complejos vs entidades propias en EF Core 11: ¿cuál deberías elegir?
En EF Core 11, usa por defecto tipos complejos para los objetos de valor y recurre a entidades propias solo cuando necesites una tabla separada o una colección mapeada a sus propias filas.
- Output caching vs response caching en ASP.NET Core 11: ¿cuál deberías usar?
El output caching es la opción por defecto correcta para casi toda app del lado del servidor en ASP.NET Core 11. El response caching solo gana cuando tu objetivo es dirigir las cachés del navegador y de los proxies mediante cabeceras HTTP. Aquí está la decisión, con una matriz de características y los detalles que fuerzan la elección.
- TPH vs TPT vs TPC para mapeo de herencia en EF Core 11: ¿cuál deberías elegir?
En EF Core 11, usa TPH de forma predeterminada para casi toda jerarquía, recurre a TPC solo cuando consultas casi siempre un único tipo hoja y un benchmark demuestra que gana, y usa TPT solo cuando una restricción externa te obligue.
- Solución: CS4014 "Because this call is not awaited, execution of the current method continues" en C#
CS4014 significa que llamaste a un método que devuelve Task sin esperarlo. Agrega await, o descártalo con _ = si el fire-and-forget es intencional, y maneja las excepciones.
- Solución: System.InvalidOperationException: Sequence contains no elements
Esta excepción significa que llamaste a .First() o .Single() sobre una secuencia vacía. Usa FirstOrDefault/SingleOrDefault y comprueba el null, protege la consulta o corrige por qué la fuente está vacía.
- System.Text.Json aprende a serializar los tipos union de C# en .NET 11 Preview 6
Cómo System.Text.Json en .NET 11 Preview 6 serializa los nuevos tipos union de C# escribiendo el caso activo, y las APIs JsonUnionAttribute y de clasificador de tipos que resuelven los casos ambiguos.
- La validación asíncrona llega a las Minimal APIs con .NET 11 Preview 6
Preview 6 agrega AsyncValidationAttribute e IAsyncValidatableObject para que las reglas de DataAnnotations consulten la base de datos antes de ejecutar tu endpoint, sin bloquear un hilo.
- Solución: CS8618 "Non-nullable property must contain a non-null value when exiting constructor" en C#
CS8618 significa que un campo o propiedad no anulable no se inicializó antes de que terminara el constructor. Asígnalo en el constructor, dale un valor por defecto, márcalo required o hazlo anulable.
- Solución: interbloqueo al llamar a .Result o .Wait() sobre un método async en C#
Bloquear una Task async con .Result o .Wait() provoca un interbloqueo cuando hay un SynchronizationContext presente. Aquí explico por qué se cuelga y cómo solucionarlo en .NET 11 y C# 14.
- Cómo agregar un endpoint de health check a una minimal API en ASP.NET Core 11
Una guía completa y funcional de health checks en una minimal API de ASP.NET Core 11: AddHealthChecks y MapHealthChecks, clases IHealthCheck personalizadas que devuelven Healthy/Degraded/Unhealthy, la sonda de EF Core AddDbContextCheck, endpoints de liveness y readiness basados en tags para Kubernetes, un ResponseWriter JSON, ResultStatusCodes, cómo proteger el endpoint con RequireAuthorization y RequireHost, y cómo enviar resultados con IHealthCheckPublisher.
- Cómo agregar un endpoint filter a una minimal API en ASP.NET Core 11
Una guía completa y funcional de los endpoint filters en una minimal API de ASP.NET Core 11: AddEndpointFilter con un delegado en línea, clases IEndpointFilter con inyección de dependencias, GetArgument y la lista Arguments, cortocircuito con Results.Problem, orden FIFO/FILO entre varios filtros, filtros a nivel de grupo en MapGroup y AddEndpointFilterFactory para filtros que dependen de la firma.
- MAUI en mobile es solo CoreCLR en .NET 11 Preview 6: la salida de emergencia de Mono desapareció
.NET 11 Preview 6 elimina el camino separado de Mono para MAUI en Android, iOS y Mac Catalyst. CoreCLR es ahora el único runtime móvil, la salida de emergencia UseMonoRuntime se cerró y la GA está prevista para noviembre de 2026.
- Los indexadores de extensión de C# 15 completan los miembros de extensión en .NET 11 Preview 6
Los indexadores de extensión llegaron en .NET 11 Preview 6 y te permiten agregar acceso this[...] a tipos que no controlas. Completan la historia de los miembros de extensión que empezó con métodos y propiedades en C# 14.
- ASP.NET Core 11 Preview 6 activa la protección CSRF automática
Preview 6 rechaza por defecto las solicitudes entre orígenes no seguras del navegador, leyendo el encabezado Sec-Fetch-Site en lugar de un token antiforgery. Esto es lo que bloquea y cómo excluir endpoints.
- Solución: "413 Request Entity Too Large" al subir un archivo a un endpoint de ASP.NET Core
Kestrel limita el cuerpo de las solicitudes a 30.000.000 de bytes por defecto y devuelve 413 cuando lo superas. Sube MaxRequestBodySize globalmente, por endpoint o en web.config detrás de IIS.
- Solución: System.InvalidOperationException: Headers are read-only, response has already started
Estableciste un header, un código de estado o un content type después de que el cuerpo ya se vació. Establece todos los headers antes de la primera escritura, o protégete con HttpResponse.HasStarted y OnStarting.
- Solución: "The property could not be mapped, because it is not a supported primitive type or a valid entity type" en EF Core 11
EF Core encontró una propiedad que no sabe almacenar. Mapéala como tipo complejo, conviértela con HasConversion, dale una clave o ignórala con [NotMapped].
- Cómo agregar compresión de respuestas a una API de ASP.NET Core 11
Una guía completa de la compresión de respuestas en ASP.NET Core 11: AddResponseCompression y UseResponseCompression, el nuevo proveedor Zstandard integrado junto a Brotli y Gzip, niveles de compresión, EnableForHttps y el riesgo de CRIME/BREACH, tipos MIME personalizados, el orden del middleware y cuándo dejar que lo haga el proxy inverso.
- Cómo devolver una unión tipada Results<T1, T2> desde un endpoint de minimal API en ASP.NET Core 11
Declara el tipo de retorno del handler como Results<Ok<T>, NotFound> y devuelve TypedResults.Ok / TypedResults.NotFound: la unión ofrece verificación en tiempo de compilación de que el handler solo devuelve lo que declara, y se autodescribe a OpenAPI para que nunca escribas .Produces a mano. Cubre handlers asíncronos, el límite de seis tipos y las pruebas en ASP.NET Core 11.
- Cómo configurar el mapeo de herencia tabla por jerarquía (TPH) en EF Core 11
TPH es la estrategia de herencia predeterminada de EF Core: una tabla, una columna discriminadora. Aquí verás cómo configurar el discriminador, compartir columnas, manejar propiedades derivadas anulables y los detalles en EF Core 11.
- Cómo agregar output caching a una minimal API en ASP.NET Core 11
Una guía completa y funcional sobre output caching en una minimal API de ASP.NET Core 11: AddOutputCache y UseOutputCache, CacheOutput en endpoints y MapGroup, políticas nombradas y base, Expire, VaryByQuery y VaryByHeader, invalidación por tags con EvictByTagAsync, protección contra cache stampede, revalidación con ETag y un almacén de respaldo en Redis.
- Cómo personalizar el documento OpenAPI con AddOperationTransformer y AddSchemaTransformer en ASP.NET Core 11
Un análisis a fondo del pipeline de transformadores de OpenAPI integrado en .NET 11: transformadores de operación vs. de esquema, los objetos de contexto, el orden de ejecución, los transformadores activados por DI, y recetas para encabezados, respuestas, ejemplos y ajustes por propiedad.
- Cómo mapear un complex type en lugar de una entidad propia en EF Core 11
Las entidades propias arrastran una clave oculta y una identidad por referencia que chocan con los objetos de valor. Aquí verás cómo mapear un objeto de valor como complex type en EF Core 11, cuándo cambiar y las trampas.
- .NET 11 Runtime Async elimina la marca EnablePreviewFeatures
A medida que las versiones preliminares de .NET 11 avanzan hacia el lanzamiento de noviembre, Runtime Async se ha graduado: los proyectos net11.0 se activan con una sola propiedad de MSBuild, y las propias bibliotecas del runtime ahora se compilan con ella.
- ¿Qué es PGO en .NET y necesito activarlo?
PGO (optimización guiada por perfil) permite que el JIT de .NET especialice el código caliente para los tipos y ramas que tu carga de trabajo realmente ejecuta. Dynamic PGO está activo por defecto desde .NET 8, así que en .NET 8 y versiones posteriores no necesitas activarlo. Esto es lo que hace, cómo ver su efecto y los casos poco frecuentes en los que tocas el ajuste.
- ¿Qué es la compilación por niveles y cómo razonar sobre ella?
La compilación por niveles permite que el JIT de .NET compile cada método dos veces: primero rápido y sin optimizar para poner en marcha la aplicación, y luego de nuevo con optimizaciones completas cuando el runtime sabe que un método es caliente. Aquí verás cómo encajan el tier 0, el tier 1, el reemplazo en pila y el Dynamic PGO, y cómo observarlos y ajustarlos.
- ¿Cuál es la diferencia entre dotnet build y dotnet publish?
dotnet build compila tu proyecto para el ciclo de desarrollo interno y usa Debug por defecto. dotnet publish ejecuta el target Publish de MSBuild, usa Release por defecto en net8.0 y versiones posteriores, y empaqueta una carpeta lista para implementar con los assets web, los runtimes autocontenidos, el archivo único, el recorte y AOT ya resueltos. Esto es exactamente lo que produce cada uno y cuándo usarlo.
- ¿Cuál es la diferencia entre dotnet watch y dotnet run?
dotnet run compila tu proyecto una vez y lo lanza. dotnet watch envuelve a dotnet run en un observador de archivos: relanza o aplica hot reload a la app cada vez que guardas un archivo fuente. Esto es exactamente lo que hace cada uno, qué configura dotnet watch que dotnet run no, y cuándo usar cada uno.
- Migrar una minimal API de comprobaciones de validación manuales a la validación integrada en ASP.NET Core 11
Guía paso a paso para reemplazar las comprobaciones manuales (if) en los handlers de una minimal API de ASP.NET Core 11 por el validador integrado basado en DataAnnotations y generación de código fuente: qué se rompe, qué reglas manuales se pueden portar y cuáles no, y cómo verificar que el contrato 400 ProblemDetails no cambia.
- ¿Qué es el código seguro para trimming y cómo lo escribo?
El código seguro para trimming es código que el trimmer de .NET puede probar estáticamente que es alcanzable, así que sobrevive cuando se elimina el código sin usar de una app autónoma. Esta es la guía práctica: enciende el analizador, lleva a cero cada advertencia IL2xxx, anota la reflexión con DynamicallyAccessedMembers, propaga RequiresUnreferencedCode a las APIs públicas y reemplaza los patrones no analizables con generadores de código fuente.
- Solución: "415 Unsupported Media Type" desde un endpoint de minimal API en ASP.NET Core 11
Una minimal API devuelve 415 cuando el Content-Type de la solicitud no coincide con lo que enlaza el endpoint. Envía Content-Type: application/json para un tipo enlazado desde el cuerpo, o usa [FromForm] para formularios y cargas de archivos.
- Solución: CS9035 "Required member 'X' must be set in the object initializer" en C#
CS9035 significa que un miembro marcado como required no se asignó. Asígnalo en el inicializador de objeto, o agrega un constructor con [SetsRequiredMembers] que asigne cada miembro required.
- Cómo personalizar las respuestas de error de validación de minimal APIs con IProblemDetailsService en ASP.NET Core 11
Llama a AddProblemDetails con un callback CustomizeProblemDetails para reformar el 400 que devuelve la validación integrada de minimal APIs en ASP.NET Core 11: agrega un traceId, reescribe el title, cambia el 400 a 422 o toma el control total con un IProblemDetailsWriter personalizado.
- Cómo configurar la autenticación JWT bearer en una minimal API en ASP.NET Core 11
Una configuración completa y funcional de autenticación JWT bearer en una minimal API de ASP.NET Core 11: instalar el paquete, conectar AddAuthentication().AddJwtBearer(), emitir un token, proteger endpoints con RequireAuthorization, agregar políticas de rol y de claim, y probarlo todo con dotnet user-jwts.
- Cómo propagar un CancellationToken a través de métodos async en .NET 11
Pasa un CancellationToken de forma limpia por cada capa de una cadena de llamadas async en .NET 11: convención del último parámetro, valores por defecto, tokens enlazados, RequestAborted de ASP.NET Core y el analizador CA2016 que detecta los que olvidas.
- Cómo establecer un tiempo de espera en una operación asíncrona con CancellationTokenSource.CancelAfter en C#
Usa CancellationTokenSource.CancelAfter para aplicar un plazo límite en operaciones asíncronas en .NET 11: constructor vs CancelAfter, tokens vinculados, manejo de excepciones, Task.WaitAsync, TryReset y tiempos de espera testeables con TimeProvider.
2026 / 06
- Solución: FOREIGN KEY constraint failed al eliminar una entidad en EF Core 11
EF Core lanza FOREIGN KEY constraint failed porque el padre todavía tiene dependientes que la base de datos se niega a dejar huérfanos. Carga los hijos, haz la relación opcional o configura OnDelete.
- Solución: No service for type 'Microsoft.EntityFrameworkCore.DbContextOptions' has been registered
EF Core lanza esto cuando AddDbContext nunca se ejecutó, se ejecutó después de Build o el constructor del contexto recibe el DbContextOptions equivocado. Registra antes de Build y usa DbContextOptions<TuContexto>.
- Solución: 405 Method Not Allowed en lugar de 401 con JWT bearer en ASP.NET Core
Un endpoint protegido que devuelve 405 en lugar de 401 casi siempre significa que el enrutamiento rechazó el verbo HTTP antes de que corriera la autenticación, o que un esquema de cookies robó el challenge. Aquí te explico cómo distinguirlo.
- Por qué tu JWT de ASP.NET Core devuelve 401 incluso con un token válido
Un token válido que aun así devuelve 401 casi siempre significa que el handler de bearer nunca se ejecutó o se ejecutó bajo el esquema incorrecto. Revisa el orden del middleware, el esquema predeterminado, el nombre del esquema y si el encabezado siquiera llegó al handler.
- Solución: The seed entity for entity type 'X' cannot be added because a non-zero value is required for property 'Id'
HasData siembra una entidad con clave generada por el almacén pero sin valor explícito. Da a cada fila un Id estable distinto de cero, o usa UseSeeding para claves generadas.
- Cómo declarar propiedades de extensión en C# 14
Las propiedades de extensión llegan en C# 14 mediante el nuevo bloque extension. Declara propiedades de extensión de solo lectura, con setter, estáticas y genéricas, por qué se rechazan las propiedades automáticas y cómo el compilador las traduce a accesores get_/set_.
- .NET 11 Preview 5 permite que las file-based apps se referencien entre sí con `#:ref`
.NET 11 Preview 5 agrega la directiva #:ref para que un script dotnet run pueda referenciar otra file-based app como biblioteca, con referencias transitivas y sin archivo de proyecto.
- Cómo hacer paginación por keyset (cursor) en EF Core 11
Reemplaza Skip/Take con una cláusula WHERE que avanza más allá de la última fila que viste. Ordena por una clave totalmente única, lleva los valores de la última fila como cursor, y EF Core 11 convierte la página siguiente en un seek de índice en lugar de un escaneo OFFSET.
- Cómo mapear y consultar columnas JSON en EF Core 11
Mapea un tipo anidado a una sola columna JSON con ComplexProperty(...).ToJson(), deja que EF Core 11 lo almacene en el tipo json nativo de SQL Server 2025 y luego consúltalo con LINQ que se traduce a JSON_VALUE, JSON_CONTAINS y JSON_PATH_EXISTS.
- Cómo registrar y resolver servicios con clave en la inyección de dependencias de .NET 11
Registra varias implementaciones del mismo tipo de servicio bajo una clave con AddKeyedSingleton/Scoped/Transient y luego resuélvelas con [FromKeyedServices], GetRequiredKeyedService o KeyedService.AnyKey. Los registros con clave y sin clave son tablas separadas, y ese es el detalle que confunde a casi todos.
- Cómo validar el emisor, la audiencia y la vigencia de un JWT en ASP.NET Core 11
Una guía completa de TokenValidationParameters en ASP.NET Core 11: cómo funcionan ValidateIssuer, ValidateAudience y ValidateLifetime, cuáles son realmente los valores por defecto, por qué Authority configura automáticamente el emisor y las claves de firma, la trampa de los 5 minutos de ClockSkew y cómo leer los códigos de error IDX cuando se rechaza un token que parece válido.
- Jerarquías de clases cerradas en C# 15: la palabra clave closed en .NET 11 Preview 5
C# 15 agrega el modificador closed en .NET 11 Preview 5, dando a las jerarquías de clases exhaustividad en tiempo de compilación en las expresiones switch. Asi funciona y el unico detalle a tener en cuenta.
- Cómo configurar CORS para una API protegida con JWT en ASP.NET Core 11
Una guía completa de CORS para una API con token bearer en ASP.NET Core 11: el orden correcto de UseCors respecto a la autenticación, por qué un token bearer en el encabezado Authorization no es una credencial de CORS, por qué AllowAnyHeader funciona pero un comodín manual no cubre Authorization, y cómo evitar que falle el preflight.
- ¿Qué es el atributo DynamicallyAccessedMembers?
DynamicallyAccessedMembers le indica al trimmer de .NET y al compilador AOT cuáles miembros de un Type alcanzas por reflexión, para que se conserven en lugar de ser eliminados. Convierte una silenciosa MissingMethodException en runtime en una advertencia IL2070 en tiempo de compilación. Esto es lo que hace el atributo, cómo funciona el análisis de flujo de datos detrás de él y cómo anotar correctamente parámetros, campos y parámetros de tipo genéricos.
- Qué es ValueTask<T> y cuándo vale la pena
ValueTask y ValueTask<T> son structs que permiten a un método asíncrono devolver un resultado sin asignar un Task en el heap cuando se completa de forma síncrona. La ganancia es una asignación menos en rutas calientes que normalmente terminan sin esperar. El costo es un contrato estricto de esperar-una-sola-vez. Esto es lo que el tipo realmente es, cómo funciona, y el conjunto reducido de casos donde se gana su lugar.
- ¿Qué es un generador de código fuente y cuándo lo necesito?
Una guía en lenguaje claro sobre los generadores de código fuente de C#: qué hacen en realidad, cómo funciona el pipeline de IIncrementalGenerator, cuándo superan a la reflexión o a T4, y los casos en que no deberías recurrir a uno. Con ejemplos ejecutables en .NET 11 y C# 14.
- ¿Qué es IAsyncEnumerable<T> y cuándo deberías usarlo?
IAsyncEnumerable<T> es la interfaz para los flujos asíncronos: una secuencia cuyos elementos llegan a lo largo del tiempo y donde cada uno puede requerir un await. Esto es lo que realmente es, cómo await foreach y yield lo impulsan, y la regla para saber cuándo elegirlo en lugar de Task<List<T>>.
- ¿Qué es Native AOT y cuánto te cuesta?
Native AOT compila tu app de .NET en un único binario nativo autónomo sin JIT, lo que te da un arranque rápido y poco consumo de memoria. El precio es una cadena de herramientas de C en tiempo de compilación, compilaciones más lentas, builds por RID, sin reflexión ni Reflection.Emit, recorte obligatorio y sin Dynamic PGO. Aquí tienes el balance completo.
- Blazor static SSR obtiene [SupplyParameterFromSession] en .NET 11 Preview 5
Leer el estado de sesión en Blazor renderizado en el servidor estático significaba acceder a HttpContext.Session y serializar a mano. .NET 11 Preview 5 agrega [SupplyParameterFromSession] para enlazar una propiedad de componente directamente a una clave de sesión.
- Migrar de Swashbuckle al generador de OpenAPI integrado en .NET 11
Una migración paso a paso de Swashbuckle.AspNetCore a Microsoft.AspNetCore.OpenApi en .NET 11: cambiar AddSwaggerGen por AddOpenApi, convertir los filtros de operación, esquema y documento en transformadores, mantener una UI y los cambios incompatibles de Microsoft.OpenApi v2 que muerden.
- AsNoTracking vs AsNoTrackingWithIdentityResolution en EF Core 11: ¿cuál deberías usar?
Usa AsNoTracking por defecto para consultas de solo lectura. Recurre a AsNoTrackingWithIdentityResolution únicamente cuando el grafo de resultados contiene la misma entidad más de una vez y tu código depende de recibir una sola instancia compartida.
- Validación de minimal API vs FluentValidation en ASP.NET Core 11: ¿cuál deberías elegir?
Compara la validación integrada de Minimal APIs con FluentValidation: reglas asíncronas, filtros de endpoints, versiones y licencia.
- El nuevo analizador EF1004 de EF Core 11 detecta un error asíncrono silencioso
EF Core 11 Preview 5 incluye el analizador EF1004. Marca ToAsyncEnumerable() sobre un IQueryable para que no enumeres una consulta de base de datos de forma síncrona dentro de un await foreach.
- HybridCache vs IMemoryCache vs IDistributedCache en .NET 11: ¿cuál deberías elegir?
Para el código de caché nuevo en .NET 11, usa HybridCache por defecto. Recurre a IMemoryCache solo cuando necesites velocidad en un único servidor sin serialización, y a IDistributedCache solo como almacén de respaldo. Aquí tienes la matriz de decisión.
- El acuerdo de claves X25519 llega integrado en .NET 11 Preview 5
.NET 11 Preview 5 agrega un tipo X25519DiffieHellman de primera clase a System.Security.Cryptography, para hacer intercambio de claves Curve25519 sin BouncyCastle ni NSec.
- Solución: The entity type 'X' requires a primary key to be defined en EF Core 11
EF Core no encuentra una clave para tu tipo. Nombra una propiedad Id o {Type}Id, agrega [Key], llama a HasKey o, si es una vista o SQL crudo, llama a HasNoKey.
- LINQ incorpora FullJoin y joins sin selector en .NET 11 Preview 5
.NET 11 Preview 5 agrega un operador FullJoin completamente nuevo a LINQ, además de sobrecargas que devuelven tuplas para Join, LeftJoin, RightJoin y GroupJoin que eliminan por completo el selector de resultado.
- Los formularios SSR estáticos de Blazor obtienen validación del lado del cliente en .NET 11 Preview 5
Los formularios de Blazor renderizados de forma estática en el servidor solo podían validarse tras un POST completo de ida y vuelta. .NET 11 Preview 5 renderiza los metadatos de validación para que el JS de Blazor aplique las reglas de DataAnnotations en el navegador, sin circuito.
- Solución: The configured execution strategy 'SqlServerRetryingExecutionStrategy' does not support user-initiated transactions
EnableRetryOnFailure choca con BeginTransaction. Envuelve toda la transaccion en db.Database.CreateExecutionStrategy().ExecuteAsync(...) para que se reintente como una unidad.
- System.Text.Json por fin escribe JSON Lines en .NET 11 Preview 5
.NET 11 Preview 5 agrega JsonSerializer.SerializeAsyncEnumerable con topLevelValues: true, para que System.Text.Json pueda transmitir JSONL, no solo leerlo.
- Solución: el render mode no es compatible con el render mode del componente padre (Blazor)
Pusiste @rendermode en un hijo cuyo padre ya es interactivo. Un subárbol tiene exactamente un render mode. Quita la directiva del hijo o muévela al límite.
- Cómo persistir el estado a través del límite de renderizado estático-a-interactivo de Blazor en .NET 11
Un componente Blazor prerenderizado ejecuta su inicialización dos veces y pierde el estado en el traspaso a interactivo. Resuélvelo con el atributo [PersistentState] o el servicio PersistentComponentState en .NET 11.
- Cómo exponer OpenAPI sin Swashbuckle en ASP.NET Core 11
Swashbuckle ya no está en las plantillas de ASP.NET Core. Así se genera y se sirve un documento OpenAPI en .NET 11 con el paquete integrado Microsoft.AspNetCore.OpenApi: AddOpenApi, MapOpenApi, transformadores, varios documentos, generación en tiempo de compilación y una interfaz encima.
- Cómo organizar endpoints de Minimal APIs con MapGroup
Organiza Minimal APIs mediante módulos de recursos y MapGroup: rutas anidadas, metadatos, filtros, autenticación y pruebas.
- Cómo validar cuerpos de solicitud en minimal APIs sin controladores en ASP.NET Core 11
ASP.NET Core 11 trae validación integrada para minimal APIs: llama a AddValidation, anota tu record de solicitud con DataAnnotations y un generador de código fuente valida el modelo enlazado y devuelve 400 ProblemDetails antes de que se ejecute tu handler. Sin controladores, sin FluentValidation, sin comprobaciones manuales.
- .NET 11 le da a MemoryCache métricas de OpenTelemetry de primera clase
.NET 11 Preview 4 incluye un meter integrado para Microsoft.Extensions.Caching.Memory, así la tasa de aciertos de caché y las expulsiones fluyen a OpenTelemetry sin un poller en segundo plano.
- Migra de IWebHostBuilder a WebApplication.CreateBuilder en .NET 11
Una migración paso a paso del antiguo modelo de hospedaje con Startup.cs más WebHostBuilder al modelo de hospedaje mínimo con WebApplication.CreateBuilder, incluyendo la deprecación ASPDEPR008, el orden del middleware, IStartupFilter y cómo mantener tus pruebas funcionando.
- Migrar de System.Web.HttpContext a Microsoft.AspNetCore.Http.HttpContext
Una migración práctica del System.Web.HttpContext de ASP.NET Framework al HttpContext de ASP.NET Core 11: HttpContext.Current, el mapa de propiedades, Server.MapPath, Session y el shim de los adaptadores System.Web para migraciones incrementales.
- Migrar de ValueTask<T> de vuelta a Task<T>: cuándo y por qué (.NET 11, C# 14)
Una lista de verificación práctica para revertir los tipos de retorno ValueTask y ValueTask<T> a Task y Task<T>, qué se rompe en los puntos de llamada, cómo verificar cada cambio y cómo saber si el cambio valió la pena.
- Migrar una app de Blazor Server a Blazor United (Blazor Web App) en .NET 11
Una lista de pasos para mover una app de Blazor Server independiente a la plantilla unificada Blazor Web App en .NET 11, manteniendo cada página en InteractiveServer sin cambios de comportamiento.
- Migrar de Azure Functions in-process al modelo de worker aislado (.NET 8 / .NET 11)
Una lista paso a paso para mover una app de Azure Functions in-process de .NET al modelo de worker aislado antes del retiro del 10 de noviembre de 2026, con diffs de csproj, reescrituras de firmas y un despliegue con intercambio de slots.
- Migrar de Serilog a logging con OpenTelemetry en .NET 11
Una guía paso a paso para sacar a una app .NET 11 de Serilog y llevarla a logging con OpenTelemetry: el puente de bajo riesgo Serilog.Sinks.OpenTelemetry, el cambio completo a Microsoft.Extensions.Logging, qué se rompe, cómo verificar y cómo revertir.
- EF Core ExecuteUpdate frente a cargar entidades y SaveChanges: ¿cuál deberías usar?
Una guía de decisión y un benchmark real para EF Core 11: usa ExecuteUpdate para escrituras basadas en conjuntos por predicado, y la ruta cargar-luego-SaveChanges solo cuando necesitas el rastreador de cambios, los interceptores o un grafo de objetos complejo.
- Migrar de EF Core 6 a EF Core 11: los cambios incompatibles que de verdad duelen
Una guía de migración con versiones fijadas, de EF Core 6.0 a EF Core 11.0, recorriendo los cambios incompatibles de EF7, 8, 9, 10 y 11 que rompen apps reales: Encrypt=True, Contains con OPENJSON, PendingModelChangesWarning, la columna json nativa y la división de SqlClient 7.0.
- BackgroundService vs IHostedService vs Hangfire para tareas en segundo plano en .NET 11
Elige BackgroundService para bucles en proceso, IHostedService puro cuando necesitas control fino del ciclo de vida, y Hangfire cuando las tareas deben sobrevivir a un reinicio. Una matriz de decisión con código y el detalle que decide por ti.
- .NET 11 eleva la linea base minima de CPU a x86-64-v2
.NET 11 Preview 4 deja de admitir chips x86/x64 anteriores a 2013 y sube la linea base del JIT a x86-64-v2. Esto es lo que se rompe, por que y como verificar tu hardware antes de actualizar.
- .NET 11 convierte un double a hex y lo recupera bit a bit
El Preview 4 de .NET 11 enseña a double, float y Half a formatear con el especificador X y a parsear con NumberStyles.HexFloat, produciendo el mismo texto hex IEEE-754 que printf("%a") de C.
- Solución: ObjectDisposedException: Cannot access a disposed context instance
Tu tarea fire-and-forget capturó un DbContext con ámbito de solicitud que el ámbito de DI ya había liberado. Resuelve un contexto nuevo dentro de la tarea con IServiceScopeFactory o IDbContextFactory.
- EF Core 11 Preview 4: Deja de reescribir --project y --startup-project con .config/dotnet-ef.json
EF Core 11 Preview 4 permite que la herramienta dotnet ef lea los valores de opciones predeterminados desde un archivo .config/dotnet-ef.json, para que las soluciones divididas ya no te obliguen a pasar --project y --startup-project en cada comando.
- Cómo usar la división de consultas para evitar una explosión cartesiana en EF Core 11
Cuando haces Include de dos colecciones hermanas, EF Core 11 devuelve el producto cartesiano y tu número de filas se dispara. Aquí tienes cómo lo arregla AsSplitQuery, cómo activarlo de forma global y los detalles de consistencia y orden que debes vigilar.
2026 / 05
- Cómo ejecutar trabajo fire-and-forget de forma segura en ASP.NET Core con BackgroundService
Llamar a Task.Run desde un controlador pierde trabajo al apagar, se traga las excepciones y captura servicios scoped ya desechados. El patrón seguro es una cola Channel acotada que drena un BackgroundService, que abre un scope nuevo por cada elemento de trabajo y termina el trabajo en curso en StopAsync.
- Cómo usar ExecuteUpdate y ExecuteDelete para escrituras masivas en EF Core 11
Una guía completa de ExecuteUpdate y ExecuteDelete en EF Core 11: el SQL que generan, la trampa del rastreador de cambios que sobrescribe en silencio tu escritura masiva, las transacciones, el control de concurrencia con el conteo de filas afectadas y los setters por delegado de EF Core 10 que permiten construir actualizaciones condicionales con simples sentencias if.
- Cómo usar servicios scoped dentro de un BackgroundService en ASP.NET Core 11
Un BackgroundService es un singleton, así que no puede inyectar directamente un servicio scoped como un DbContext. Toma IServiceScopeFactory, abre un scope por unidad de trabajo con CreateAsyncScope, resuelve dentro de él y deséchalo al terminar.
- Migrar de AutoMapper al mapeo generado por código fuente con Mapperly
Una lista de verificacion paso a paso para reemplazar los Profiles, IMapper, ForMember y ProjectTo de AutoMapper 15 por mappers generados por codigo fuente con Riok.Mapperly 4.3 en .NET 11.
- Migrar de MediatR a inyección de dependencias simple en .NET 11
Una lista de verificación paso a paso para eliminar MediatR 12-14 y reemplazar los handlers de IRequest, ISender, los pipeline behaviors y INotification por clases de servicio simples e inyección por constructor.
- Migrar de Newtonsoft.Json 13 a System.Text.Json en una base de código grande de .NET 11
Una guía con versiones fijadas para reemplazar Newtonsoft.Json 13.0.4 por el System.Text.Json integrado en .NET 11: los mapeos de atributos y opciones, los valores predeterminados que cambian en silencio tu formato de salida, una estrategia de despliegue por etapas, la verificación y los problemas que afectan a las bases de código grandes.
- Migrar de .NET 8 a .NET 11: la lista de verificación completa
Planifique la migración de .NET 8 con el estado actual de .NET 11 RC3, SDK exacto, compatibilidad, despliegue y rollback.
- Migrar de .NET Framework 4.8 a .NET 11 en 2026
Planifique la migración de .NET Framework 4.8 con soporte correcto, límites incrementales ASP.NET, dependencias, configuración y rollback.
- Migrar de Xamarin.Forms 5.0 a .NET MAUI 11: la lista completa
Migración integral de Xamarin.Forms 5.0 a .NET MAUI 11 GA en net11.0, cubriendo la reescritura del csproj, la conversión de renderers personalizados a handlers, el cableado de AppShell, la eliminación de DependencyService, el retiro de MessagingCenter, los recursos de Resizetizer y los problemas que muerden a un código de producción real.
- Azure Functions modelo aislado vs en proceso en .NET 11: cuál elegir en 2026
Elige el modelo aislado (isolated worker) para toda nueva aplicación de Azure Functions en .NET 11 en 2026, y migra cualquier aplicación en proceso restante antes de la fecha de retiro del 10 de noviembre.
- Modos de renderizado Blazor en .NET 11: Server, WebAssembly y Auto
Elija Blazor Web App o WebAssembly independiente según hosting, uso offline y servicios, con el comportamiento correcto de Auto.
- EF Core 11 Preview 4: las columnas de período de las tablas temporales por fin pueden ser propiedades reales
EF Core 11 Preview 4 elimina la antigua restricción de propiedad shadow en las tablas temporales de SQL Server. PeriodStart y PeriodEnd ahora pueden ser propiedades CLR normales, configuradas con lambdas HasPeriodStart y HasPeriodEnd fuertemente tipadas.
- StringBuilder vs interpolación de cadenas en .NET 11: ¿cuál deberías usar?
Usa la interpolación de cadenas para componer de una sola vez un conjunto fijo de valores; usa StringBuilder cuando agregas en un bucle o sobre un número desconocido de fragmentos. La línea divisoria es el bucle, no la cantidad de valores.
- ASP.NET Core en .NET 11 Preview 4 le ensena a OpenAPI el metodo HTTP QUERY
.NET 11 Preview 4 hace que la generacion de OpenAPI en ASP.NET Core reconozca HTTP QUERY como una operacion de primera clase en OpenAPI 3.2, con un respaldo elegante para documentos 3.0 y 3.1.
- Polly vs. resilience handlers en .NET 11: ¿cuál deberías usar?
Usa el resilience handler de Microsoft.Extensions.Http.Resilience para las llamadas con HttpClient, porque es Polly con valores predeterminados que entienden HTTP y telemetría en una sola línea. Recurre a ResiliencePipeline de Polly directamente solo cuando protejas algo que no sea un HttpClient.
- .NET 11 agrega compresión Deflate y GZip sin asignaciones
.NET 11 Preview 4 incorpora DeflateEncoder, GZipEncoder y ZLibEncoder más sus decodificadores, para comprimir directamente en un Span<byte> con OperationStatus, sin necesidad de un Stream.
- Consultas compiladas de EF Core vs SQL sin procesar vs Dapper: cual gana en el camino de lectura?
Para rutas con muchas lecturas en .NET 11, EF Core puro con AsNoTracking queda dentro de ~5% de Dapper. Usa consultas compiladas en una ruta caliente de fila unica perfilada, y Dapper solo para la menor latencia o el SQL que LINQ no puede expresar.
- HttpClient vs HttpClientFactory vs Refit: ¿cuál deberías usar en .NET 11?
Nunca crees un HttpClient por solicitud. Usa IHttpClientFactory para gestionar el ciclo de vida, y añade Refit encima cuando quieras una interfaz tipada en lugar de escribir el código de solicitud a mano. Un HttpClient singleton sin más solo sirve para los casos más simples.
- MediatR vs clases de servicio simples en 2026: ¿debería moverte el cambio de licencia?
Compara el despacho y los behaviors de MediatR con llamadas directas a servicios, incluida la validación DI, las condiciones de licencia y la medición del rendimiento.
- C# 16 convierte unsafe en un contrato para quien llama
C# 16 rediseña la palabra clave unsafe para que propague una obligación al llamador en lugar de abrir silenciosamente un contexto unsafe, y ahora los bloques unsafe internos son obligatorios.
- Native AOT vs ReadyToRun vs JIT en .NET 11: ¿cuál deberías publicar?
El JIT clásico con Dynamic PGO gana en rendimiento sostenido, ReadyToRun acelera el arranque sin tocar el código y Native AOT da el binario más pequeño y de arranque más rápido a costa de la reflexión y el código dinámico. Elige por la forma del despliegue, no por benchmarks aislados.
- System.Text.Json vs Newtonsoft.Json en 2026: ¿cuál deberías elegir?
Elige System.Text.Json para código nuevo en .NET 11: viene integrado, es aproximadamente 2 veces más rápido y es el único que funciona con Native AOT. Recurre a Newtonsoft.Json solo para JSONPath, TypeNameHandling o JSON realmente permisivo.
- ConfigureAwait(false) vs el valor por defecto en .NET 11: ¿sigue importando?
ConfigureAwait(false) sigue siendo obligatorio en código de biblioteca que pueda ejecutarse bajo un SynchronizationContext (WinForms, WPF, MAUI). En código de aplicación sobre ASP.NET Core, una aplicación de consola o un servicio worker que se ejecute en .NET 11, no hace nada.
- IEnumerable vs IAsyncEnumerable vs IQueryable en C#: ¿cuál debe devolver el método?
Tres interfaces de secuencia, tres modelos de ejecución. Usa IQueryable cuando una base de datos pueda traducir la consulta, IAsyncEnumerable cuando el productor es asíncrono y quieres transmitir, IEnumerable para todo lo demás en memoria.
- Minimal APIs vs controllers en ASP.NET Core 11: ¿cuál deberías elegir en 2026?
Elige minimal APIs por defecto en ASP.NET Core 11. Usa controllers solo cuando necesites características de MVC que minimal APIs todavía no iguala: enrutamiento basado en convenciones para muchas acciones, filtros estilo MVC o vistas Razor.
- EF Core 11 vs Dapper para inserciones masivas: benchmark real
Para inserciones masivas en .NET 11, ni EF Core ni Dapper ganan. Lo hace SqlBulkCopy. Este es el benchmark, el porqué y el asiento que merece cada herramienta.
- dotnet new mcpserver ya viene incluido en el SDK de .NET 11 Preview 4
.NET 11 Preview 4 incluye la plantilla de proyecto mcpserver directamente en el SDK. Sin instalar Microsoft.McpServer.ProjectTemplates aparte, sin malabares con feeds de preview. Eliges transporte stdio o HTTP, activas Native AOT, y dotnet new mcpserver -o MyServer es toda la configuración.
- Solución: El perfil de aprovisionamiento no incluye el dispositivo seleccionado actualmente en MAUI iOS
El perfil que Visual Studio eligió se generó antes de registrar el UDID de este iPhone. Vuelve a registrar el dispositivo, regenera el perfil de desarrollo, descárgalo y vuelve a desplegar.
- Fix: Unable to find a valid iOS Simulator runtime durante la compilación de MAUI
Xcode 15+ no incluye runtimes del simulador de iOS. MAUI falla la compilación cuando SupportedOSPlatformVersion no tiene un runtime instalado que coincida. Instala uno con xcodebuild -downloadPlatform iOS o desde Settings de Xcode, y verifica con xcrun simctl list runtimes.
- .NET 11 agrega captura de salida de procesos sin interbloqueos
.NET 11 Preview 4 incorpora nuevas APIs de System.Diagnostics.Process que drenan stdout y stderr en paralelo, además de helpers de una sola línea para ejecutar y capturar, y KillOnParentExit.
- Solución: la compilación de Gradle no logró producir un archivo .apk en MAUI Android
Nueve de cada diez veces el error real de Gradle está enterrado más arriba en el log de MSBuild. La ruta a JDK 17, el workload maui-android faltante y las rutas largas en Windows son las causas raíz habituales.
- Fix: A possible object cycle was detected
System.Text.Json se niega a serializar grafos con referencias cíclicas. Configura ReferenceHandler.IgnoreCycles, proyecta a un DTO o marca el puntero hacia atrás con [JsonIgnore]. Preserve es un último recurso.
- Solución: SqlException: Timeout expired durante migraciones de EF Core
Las migraciones usan el DbContext de diseño, no tu CommandTimeout de ejecución. Configura el tiempo de espera con UseSqlServer(o => o.CommandTimeout(...)), con Command Timeout en la cadena de conexión, o con Database.SetCommandTimeout antes de Migrate().
- MAUI cambia a CoreCLR de manera predeterminada en Android, iOS y Mac Catalyst en .NET 11 Preview 4
.NET 11 Preview 4 convierte a CoreCLR en el runtime predeterminado para MAUI en Android, iOS, Mac Catalyst y tvOS. Mono sigue estando a una propiedad de MSBuild de distancia. Esto es lo que cambia, lo que se rompe y cómo desactivarlo.
- dotnet watch por fin llega a MAUI en Android y iOS en .NET 11 Preview 4
.NET 11 Preview 4 activa dotnet watch para dispositivos Android, emuladores Android y el Simulador de iOS. Editas, guardas y la app en ejecución se actualiza sin recompilación manual. Hay un detalle del csproj que aplica a iOS.
- Solución: System.Text.Json.JsonException: The JSON value could not be converted
System.Text.Json lanza esta excepción cuando el token JSON entrante no coincide con el tipo CLR de destino. Haz que el JSON coincida con el tipo, o registra un JsonConverter o una JsonSerializerOption que los reconcilie.
- Solución: System.Security.Cryptography.CryptographicException: Keyset does not exist
La clave privada del certificado reside en un archivo de claves de Windows que la identidad del proceso no puede leer. Ajusta la ACL, carga el PFX con MachineKeySet o usa EphemeralKeySet.
- Solución: The command 'dotnet' could not be found en CI
Tu runner de CI no puede resolver dotnet porque el SDK no está instalado para ese paso, o sí lo está pero no en PATH. Usa actions/setup-dotnet, fija un global.json y exporta DOTNET_ROOT y ~/.dotnet/tools.
- Solución: System.IO.FileNotFoundException: Could not load file or assembly en una aplicación publicada
Funciona con dotnet run y falla tras dotnet publish. La DLL suele faltar en la carpeta de publicación, no en el runtime. Revise deps.json, Private en ProjectReference y el trimming.
- Solución: InvalidOperationException: Synchronous operations are disallowed
Reemplace la llamada Stream.Read o Write por ReadAsync/WriteAsync. Como último recurso, active AllowSynchronousIO en Kestrel, IIS o por solicitud con IHttpBodyControlFeature.
- Fix: RZ10012: Found markup element with unexpected name en Blazor
El compilador de Razor de Blazor emite RZ10012 cuando una etiqueta en PascalCase no tiene un tipo de componente correspondiente en el ámbito. Agrega @using para el namespace del componente en _Imports.razor, o @namespace en el componente, y recompila.
- Fix: dotnet ef migrations add falla con 'Unable to create an object of type DbContext'
Las herramientas en tiempo de diseño de EF Core no pudieron instanciar tu DbContext. Expón un host con WebApplication.CreateBuilder, apunta al startup project correcto o implementa IDesignTimeDbContextFactory.
- Fix: MSB3027 Could not copy X to Y. Exceeded retry count of 10. Failed
MSB3027 significa que MSBuild reintentó copiar un archivo 10 veces y un proceso seguía reteniendo el destino. Mata el proceso bloqueante, excluye bin/obj del antivirus o sube CopyRetryCount.
- Fix: The type or namespace name 'X' could not be found (después de añadir una referencia de proyecto)
CS0246 justo después de un ProjectReference recién añadido casi siempre es un desajuste de TargetFramework, una carpeta obj/ obsoleta o una directiva using ausente. Cinco soluciones en orden de probabilidad.
- Solución: Cannot consume scoped service 'X' from singleton 'Y'
La validación de ámbitos de ASP.NET Core lanza esto cuando un singleton capturaría una dependencia scoped durante todo el proceso. Haz que el consumidor sea scoped, o toma IServiceScopeFactory y crea un ámbito bajo demanda.
- Fix: PlatformNotSupportedException: Operation is not supported on this platform en Native AOT
Native AOT elimina el JIT y el intérprete, así que reflection emit, compilación de árboles de expresión y MakeGenericType no vistos lanzan en runtime. Localiza la llamada con IL3050 y reemplázala por un generador de código fuente o un camino prehorneado.
- Solución: Unable to resolve service for type 'X' while attempting to activate 'Y'
ASP.NET Core lanza esta excepción cuando un constructor pide un tipo que nunca se registró, se registró en el contenedor equivocado, o se agregó después de construir el host. Tres soluciones concretas cubren casi todos los casos.
- Fix: TaskCanceledException: A task was canceled en HttpClient
HttpClient lanza TaskCanceledException por tres razones distintas: timeout, cancelación del llamador o un aborto a nivel de conexión. Distínguelos con InnerException y CancellationToken.IsCancellationRequested, y luego corrige el correcto.
- Fix: The JSON value could not be converted to System.DateTime
System.Text.Json solo acepta cadenas ISO 8601 para DateTime. Envía 2026-05-08T14:00:00Z o registra un JsonConverter que parsee tu formato. Cadenas vacías y timestamps Unix también lanzan.
- Solución: The instance of entity type cannot be tracked because another instance with the same key value is already being tracked
EF Core 11 lanza esta excepción cuando dos objetos comparten clave primaria dentro de un DbContext. Desvincula el viejo o actualízalo en el lugar. AsNoTracking en la lectura previene la colisión.
- Solución: A second operation was started on this context instance before a previous operation completed
EF Core lanza esta excepción cuando dos await corren en paralelo sobre el mismo DbContext. Espera cada llamada de forma secuencial, u obtén un DbContext nuevo por unidad de trabajo concurrente vía IDbContextFactory.
- Solución: System.InvalidOperationException: No connection string named 'DefaultConnection' could be found
Si GetConnectionString devuelve null en .NET 11, a tu appsettings.json le falta la clave, no se copia a la salida del build, o se está seleccionando el archivo de entorno equivocado. Tres comprobaciones resuelven el 95% de los casos.
- Cómo empaquetar una aplicación .NET MAUI para la Microsoft Store
Guía completa para empaquetar una aplicación .NET MAUI 11 para Windows como MSIX, agrupar x64/x86/ARM64 en un .msixupload y enviarla a través de Partner Center: reserva de identidad, Package.appxmanifest, banderas de dotnet publish, agrupación con MakeAppx y la entrega del certificado de confianza de la Store.
- Cómo implementar arrastrar y soltar en .NET MAUI 11
Arrastrar y soltar de extremo a extremo en .NET MAUI 11: DragGestureRecognizer, DropGestureRecognizer, cargas útiles personalizadas con DataPackage, AcceptedOperation, posición del gesto y las trampas de PlatformArgs por plataforma en Android, iOS, Mac Catalyst y Windows.
- Cómo soportar el modo oscuro correctamente en una aplicación .NET MAUI
Modo oscuro de extremo a extremo en .NET MAUI 11: AppThemeBinding, SetAppThemeColor, RequestedTheme, anulación con UserAppTheme y persistencia, el evento RequestedThemeChanged y los detalles por plataforma de Info.plist y MainActivity que la documentación pasa por alto.
- Cómo usar Tailwind CSS con Blazor WebAssembly en .NET 11
Configuración completa en .NET 11 para Tailwind CSS v4 en una app Blazor WebAssembly: CLI standalone (sin Node), target de MSBuild, directivas @source para archivos Razor y CSS isolation, y un pipeline de publish que sobrevive a Native AOT.
- Cómo detectar consultas N+1 en EF Core 11
Una guía práctica para identificar consultas N+1 en EF Core 11: cómo aparece el patrón en código real, cómo exponerlo mediante registros, interceptores de diagnóstico, OpenTelemetry y una prueba que rompe la compilación cuando una ruta crítica regresa.
- Cómo usar consultas compiladas con EF Core en rutas calientes
Una guía práctica de las consultas compiladas en EF Core 11: cuándo EF.CompileAsyncQuery realmente gana, el patrón de campo estático, las trampas con Include y tracking, y cómo medir antes y después para demostrar que el ceremonial extra valió la pena.
- Cómo escribir una app MAUI que solo corra en Windows y macOS (sin móvil)
Quita Android e iOS de un proyecto .NET MAUI 11 para que solo se publique para Windows y Mac Catalyst: las ediciones del csproj, los comandos de workload y la multiplataforma que mantiene el código limpio.
- Cómo configurar registro estructurado con Serilog y Seq en .NET 11
Una guía completa para conectar Serilog 4.x y Seq 2025.2 en una aplicación ASP.NET Core de .NET 11: AddSerilog vs UseSerilog, registro de arranque en dos etapas, configuración JSON, enrichers, registro de solicitudes, correlación de trazas con OpenTelemetry, claves de API y los problemas de producción relacionados con buffering, retención y nivel de señal.
- Cómo usar OpenTelemetry con .NET 11 y un backend gratuito
Conecta trazas, métricas y logs de OpenTelemetry en una aplicación ASP.NET Core .NET 11 con el exportador OTLP, y luego envíalos a un backend gratuito y autoalojado: el Aspire Dashboard standalone para desarrollo local, Jaeger y SigNoz para producción autoalojada, y el OpenTelemetry Collector cuando necesites ambos.
- Cómo escribir pruebas de integración contra un SQL Server real con Testcontainers
Una guía completa para ejecutar pruebas de integración de ASP.NET Core contra un SQL Server 2022 real usando Testcontainers 4.11 y EF Core 11: cableado de WebApplicationFactory, IAsyncLifetime, sustitución del registro del DbContext, aplicación de migraciones, paralelismo, limpieza con Ryuk y trampas de CI.
- VSTest abandona Newtonsoft.Json en .NET 11 Preview 4 y qué se rompe si lo usabas de forma transitiva
.NET 11 Preview 4 y Visual Studio 18.8 traen un VSTest que ya no propaga Newtonsoft.Json a tus proyectos de pruebas. Las compilaciones que dependían silenciosamente de la copia transitiva se romperán con un solo PackageReference de arreglo.
2026 / 04
- Cómo agregar rate limiting por endpoint en ASP.NET Core 11
Una guía completa de rate limiting por endpoint en ASP.NET Core 11: cuándo elegir fixed window vs sliding window vs token bucket vs concurrency, en qué se diferencian RequireRateLimiting y [EnableRateLimiting], cómo particionar por usuario o IP, el callback OnRejected, y la trampa de despliegue distribuido en la que cae todo el mundo.
- Cómo llamar a la Claude API desde una Minimal API de .NET 11 con streaming
Transmite respuestas de Claude desde una minimal API de ASP.NET Core 11 de extremo a extremo: el SDK oficial de Anthropic para .NET, TypedResults.ServerSentEvents, SseItem, IAsyncEnumerable, flujo de cancelación y los detalles que silenciosamente acumulan tus tokens en buffer. Con ejemplos de Claude Sonnet 4.6 y Opus 4.7.
- Cómo usar System.Threading.Lock en .NET
Usa System.Threading.Lock para secciones críticas síncronas desde .NET 9. Conoce su compilación, los límites de await y la diferencia con Monitor.
- Cómo escribir un generador de código fuente para INotifyPropertyChanged
Una guía completa para construir tu propio generador de código fuente incremental para INotifyPropertyChanged en C# 14 y .NET 11: la pipeline IIncrementalGenerator, atributos marcadores, salida de partial class, el patrón SetProperty y cómo mantener la compatibilidad con AOT.
- Como detectar cuando un archivo termina de escribirse en .NET
FileSystemWatcher dispara Changed antes de que el escritor termine. Tres patrones confiables para .NET 11 para saber que un archivo esta totalmente escrito: abrir con FileShare.None, hacer debounce con estabilizacion de tamano y el truco de renombrado del lado del productor que evita el problema por completo.
- Cómo compartir la lógica de validación entre el servidor y Blazor WebAssembly
La mayor fuente de divergencia en la validación entre un cliente Blazor WebAssembly y una API ASP.NET Core es la tentación de escribir las reglas dos veces. Esta guía recorre la única estructura que escala en .NET 11: una biblioteca de clases Shared que posee los DTO y sus validadores, consumida por el cliente WASM (EditForm + DataAnnotationsValidator o Blazored.FluentValidation) y por el servidor (filtro de endpoint en minimal API o model binding de MVC), con un viaje de ida y vuelta probado que vuelca los ValidationProblemDetails del servidor en el EditContext.
- Cómo usar SearchValues<T> correctamente en .NET 11
SearchValues<T> supera a IndexOfAny entre 5x y 250x, pero solo si lo usas como espera el runtime. La regla de cachear como static, la trampa de StringComparison, cuándo no vale la pena, y el truco de inversión con IndexOfAnyExcept que nadie documenta.
- Cómo agregar flujos de autenticación de OpenAPI a Swagger UI en .NET 11
En .NET 11 el documento OpenAPI lo genera Microsoft.AspNetCore.OpenApi y Swagger UI ya no viene en la plantilla. Así se conectan Bearer, OAuth2 con PKCE y OpenID Connect para que el botón Authorize realmente funcione.
- Cómo implementar refresh tokens en ASP.NET Core Identity
Dos caminos válidos en .NET 11: el endpoint /refresh integrado en MapIdentityApi y una configuración personalizada con JWT, rotación de refresh tokens, seguimiento por familia y detección de reutilización.
- Cómo subir un archivo grande mediante streaming a Azure Blob Storage
Sube archivos de varios GB a Azure Blob Storage desde .NET 11 sin cargarlos en memoria. BlockBlobClient.UploadAsync con StorageTransferOptions, MultipartReader para subidas en ASP.NET Core, y las trampas de buffering que dejan tu carga en el LOH.
- Cómo reducir el tiempo de arranque en frío de un AWS Lambda con .NET 11
Un manual práctico y específico de versión para recortar los arranques en frío de Lambda con .NET 11. Cubre Native AOT en provided.al2023, ReadyToRun, SnapStart en el runtime gestionado dotnet10, ajuste de memoria, reutilización estática, seguridad de trim, y cómo leer realmente INIT_DURATION.
- Cómo usar Native AOT con APIs mínimas de ASP.NET Core
Configura Minimal APIs para Native AOT con metadatos JSON generados. Builders, herramientas de publicación, advertencias y límites de funciones.
- Cómo precalentar el modelo de EF Core antes de la primera consulta
EF Core construye su modelo conceptual de forma diferida en el primer acceso al DbContext, por lo que la primera consulta en un proceso recién iniciado es varios cientos de milisegundos más lenta que cualquier consulta posterior. Esta guía cubre las tres soluciones reales en EF Core 11: un IHostedService de arranque que toca Model y abre una conexión, dotnet ef dbcontext optimize para enviar un modelo precompilado, y las trampas de la clave de caché que reconstruyen el modelo silenciosamente.
- Cómo añadir un filtro global de excepciones en ASP.NET Core 11
Guía completa de manejo global de excepciones en ASP.NET Core 11: por qué IExceptionFilter es la herramienta equivocada, cómo IExceptionHandler y UseExceptionHandler funcionan juntos, respuestas con ProblemDetails, cadenas de varios manejadores y el cambio disruptivo de .NET 10 sobre la supresión de diagnósticos.
- Cómo construir un servidor MCP personalizado en C# sobre .NET 11
Construye un servidor Model Context Protocol funcional en C# 14 / .NET 11 usando el SDK oficial ModelContextProtocol 1.2. Cubre el transporte stdio, los atributos [McpServerTool], inyección de dependencias, la trampa del logging por stderr y el registro con Claude Code, Claude Desktop y VS Code.
- Cómo simular DbContext sin romper el rastreo de cambios
Simular DbContext directamente rompe silenciosamente el ChangeTracker, por eso Microsoft lo desaconseja. Esta guía muestra los dos patrones que sí funcionan en EF Core 11: SQLite en memoria con una conexión que se mantiene abierta para que se ejecute el ChangeTracker real, y el patrón repositorio que saca por completo a EF Core de la prueba.
- Cómo hacer pruebas unitarias de código que usa HttpClient
Una guía completa para probar HttpClient en .NET 11: por qué no debes mockear HttpClient directamente, cómo escribir un HttpMessageHandler de stub, intercambiar el handler primario con IHttpClientFactory, verificar reintentos de Polly, y la opción WireMock.Net.
- Cómo perfilar una app .NET con dotnet-trace y leer su salida
Guía completa para perfilar apps .NET 11 con dotnet-trace: instalación, elección del perfil correcto, captura desde el inicio y lectura del .nettrace en PerfView, Visual Studio, Speedscope o Perfetto.
- Cómo usar Channels en lugar de BlockingCollection en C#
System.Threading.Channels es el reemplazo asíncrono de BlockingCollection en .NET 11. Esta guía muestra cómo migrar, cómo elegir entre acotado y no acotado, y cómo manejar contrapresión, cancelación y apagado controlado sin interbloqueos.
- Cómo escribir un JsonConverter personalizado en System.Text.Json
Una guía completa para escribir un JsonConverter<T> personalizado para System.Text.Json en .NET 11: cuándo realmente necesitas uno, cómo navegar correctamente Utf8JsonReader, cómo manejar genéricos con JsonConverterFactory y cómo mantenerlo compatible con AOT.
- Cómo generar código cliente fuertemente tipado desde una especificación OpenAPI en .NET 11
Usa Kiota, el generador oficial de OpenAPI de Microsoft, para producir un cliente C# fluent y fuertemente tipado desde cualquier especificación OpenAPI. Paso a paso: instalar, generar, conectar a la inyección de dependencias de ASP.NET Core y gestionar la autenticación.
- Cómo leer un CSV grande en .NET 11 sin quedarte sin memoria
Haz streaming de un CSV de varios gigabytes en .NET 11 sin OutOfMemoryException. File.ReadLines, CsvHelper, Sylvan y Pipelines comparados con código y mediciones.
- Como transmitir un archivo desde un endpoint de ASP.NET Core sin buffering
Sirve archivos grandes desde ASP.NET Core 11 sin cargarlos en memoria. Tres niveles: PhysicalFileResult para archivos en disco, Results.Stream para flujos arbitrarios y Response.BodyWriter para contenido generado -- con codigo para cada caso.
- EF Core 11 Preview 3 agrega RemoveDbContext para swaps limpios de provider en tests
EF Core 11 Preview 3 introduce RemoveDbContext, RemoveExtension, y una sobrecarga sin parámetros de AddPooledDbContextFactory, eliminando el boilerplate para cambiar providers en tests y centralizando la configuración de pooled factory.
- Cómo cancelar una Task de larga duración en C# sin interbloquear
Cancelación cooperativa con CancellationToken, CancelAsync, Task.WaitAsync y tokens enlazados en .NET 11. Más los patrones de bloqueo que convierten una cancelación limpia en un interbloqueo.
- Cómo usar IAsyncEnumerable<T> con EF Core 11
Las consultas de EF Core 11 implementan IAsyncEnumerable<T> directamente. Aquí está cómo hacer streaming de filas con await foreach, cuándo preferirlo sobre ToListAsync, y las trampas alrededor de conexiones, tracking y cancelación.
- Cómo usar records con EF Core 11 correctamente
Una guía práctica para mezclar records de C# y EF Core 11. Dónde encajan los records, dónde rompen el change tracking, y cómo modelar value objects, entidades y proyecciones sin pelearte con el framework.
- Kestrel empieza a procesar requests HTTP/3 antes del frame SETTINGS en .NET 11 Preview 3
.NET 11 Preview 3 deja a Kestrel servir requests HTTP/3 antes de que lleguen el control stream del peer y el frame SETTINGS, recortando latencia del handshake en el primer request de cada nueva conexión QUIC.
- EF Core 11 traduce Contains a JSON_CONTAINS en SQL Server 2025
EF Core 11 traduce automáticamente LINQ Contains sobre colecciones JSON a la nueva función JSON_CONTAINS de SQL Server 2025, y añade EF.Functions.JsonContains para queries con path y modos específicos que pueden golpear un índice JSON.
- Cómo devolver múltiples valores desde un método en C# 14
Siete formas de devolver más de un valor desde un método en C# 14: tuplas con nombre, parámetros out, records, structs, desestructuración y el truco de los extension members para tipos que no te pertenecen. Benchmarks reales y una matriz de decisión al final.
- RyuJIT poda más bounds checks en .NET 11 Preview 3: index-from-end y i + constante
.NET 11 Preview 3 enseña a RyuJIT a eliminar bounds checks redundantes en accesos consecutivos index-from-end y en patrones i + constante < length, reduciendo presión de branches en loops apretados.
- RegexOptions.AnyNewLine aterriza en .NET 11 Preview 3: anchors Unicode-aware sin los hacks de \r?
.NET 11 Preview 3 agrega RegexOptions.AnyNewLine para que ^, $, \Z, y . reconozcan toda secuencia de newline Unicode, incluyendo \r\n, NEL, LS, y PS, con \r\n tratado como un break atómico.
- Aspire 13.2 --isolated: corre instancias paralelas de AppHost sin colisiones de puertos
Aspire 13.2 incluye un flag --isolated que le da a cada aspire run sus propios puertos random y su store de secrets. Desbloquea trabajo multi-checkout, worktrees de agentes, y tests de integración que necesitan un AppHost vivo.
- .NET 11 Preview 3: dotnet run -e setea variables de entorno sin launch profiles
dotnet run -e en .NET 11 Preview 3 pasa variables de entorno directo desde la CLI y las expone como items RuntimeEnvironmentVariable de MSBuild.
- dotnet sln por fin edita filtros de solución desde la CLI en .NET 11 Preview 3
.NET 11 Preview 3 le enseña a dotnet sln a crear, añadir, remover y listar proyectos en filtros de solución .slnf, así los mono-repos grandes pueden cargar un subconjunto sin abrir Visual Studio.
- dotnet watch en .NET 11 Preview 3: hosts Aspire, crash recovery, y Ctrl+C más sano
dotnet watch gana integración con Aspire app host, relanzamiento automático después de crashes, y manejo de Ctrl+C arreglado para apps desktop Windows en .NET 11 Preview 3.
- 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.
- System.Text.Json en .NET 11 Preview 3 añade PascalCase y políticas de naming por miembro
.NET 11 Preview 3 termina la historia de políticas de naming en System.Text.Json: JsonNamingPolicy.PascalCase, un atributo [JsonNamingPolicy] a nivel de miembro, y un [JsonIgnore] por defecto a nivel de tipo para DTOs más limpios.
- Blazor Virtualize finalmente maneja items de altura variable en .NET 11
ASP.NET Core en .NET 11 Preview 3 enseña al componente Virtualize a medir items en runtime, arreglando el jitter de spacing y scroll que causaban las asunciones de altura uniforme.
- 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.
- EF Core 11 agrega GetEntriesForState para saltarse DetectChanges
EF Core 11 Preview 3 introduce ChangeTracker.GetEntriesForState, un enumerador filtrado por state que evita un pase extra de DetectChanges en hot paths como interceptors de SaveChanges y hooks de audit.
- .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.
- 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.
- Blazor SSR finalmente obtiene TempData en .NET 11
ASP.NET Core en .NET 11 Preview 2 trae TempData al renderizado estático del lado servidor de Blazor, habilitando mensajes flash y flujos Post-Redirect-Get sin workarounds.
- Argumentos en expresiones de colección de C# 15: pasa constructores en línea con with(...)
C# 15 agrega el elemento with(...) a las expresiones de colección, dejándote pasar capacidad, comparadores, y otros argumentos del constructor directamente en el inicializador.
- .NET 11 agrega compresión Zstandard nativa a System.IO.Compression
.NET 11 Preview 1 incluye ZstandardStream, ZstandardEncoder y ZstandardDecoder en System.IO.Compression, dándote soporte zstd rápido e integrado sin paquetes de terceros.
- 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 te permite crear y aplicar una migración en un solo comando
El comando dotnet ef database update ahora acepta --add para crear y aplicar una migración en un solo paso. Aquí está cómo funciona, por qué importa para contenedores y .NET Aspire, y qué tener en cuenta.
- 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.
- 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.
- Kestrel deja las excepciones de su parser HTTP/1.1 en .NET 11
El parser de solicitudes HTTP/1.1 de Kestrel en .NET 11 reemplaza BadHttpRequestException con un struct de resultado, reduciendo la sobrecarga de solicitudes malformadas hasta en un 40%.
- 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.
- dotnet new webworker: Web Workers de primera clase para Blazor en .NET 11 Preview 2
Una nueva plantilla de proyecto en .NET 11 Preview 2 genera la fontanería JS, el WebWorkerClient, y el boilerplate de JSExport necesarios para correr código .NET en un Web Worker del navegador.