¿Deberíamos adoptar ya Blazor como nuestro framework de desarrollo por defecto para las aplicaciones web? Arunachalam Kandasamy analiza los puntos a favor y en contra y nos da consejos para tomar la decisión.
Y sin cambiar de framework, Arulraj Aboorvasamy nos explica cómo gestionar el estado de la aplicación en Blazor para construir aplicaciones escalables.
Se ha presentado Angular 22, y José Manuel Alarcón nos hace un resumen de las novedades más importantes, con muchos ejemplos de código para que podamos entenderlas mejor.
Muchos más enlaces a contenidos interesantes, a continuación.
Por si te lo perdiste...
- Simulando enumerados de texto en C#
José M. Aguilar - Enumerables asíncronos en C#
José M. Aguilar
.NET
- Your first Microsoft.UI.Reactor app
Morten Nielsen - .NET 11: The STS Release With C# 15 Union Types and Runtime-Async
Martin Stühmer - Discriminated unions in C# and .NET 11 (for real this time)
Maarten Balliauw - Strongly typed generic object in C#
Jiří Činčura - Ship your C# MCP Server as a one-click bundle with MCPB
Bart Wullems - dotnet cleanup v2: Quickly Clean Up bin, obj & node_modules Folders
Sebastian Nilsson - Standardize or Drift: One Defaults Package for All Your Solutions
Martin Stühmer - "Optimizing" concurrent regexes
Oren Eini
Publicado por José M. Aguilar a las 8:00 a. m.
Etiquetas: enlaces
Esta semana hay que destacar tanto el anuncio a bombo y platillo de los modelos Claude Fable y Mythos 5 de Anthropic... como su retirada unos días después, debido una orden del gobierno de Estados Unidos por motivos de seguridad nacional. Un mundo curioso este 😉
También se ha lanzado .NET 11 Preview 5, con novedades interesantes como el soporte para JSONL, full outer joins en LINQ, mejoras en runtime asíncrono, una nueva plantilla de proyecto MCP, jerarquías cerradas en C#, validación en cliente y QuickGrid en Blazor SSR, parámetros proporcionados por variables de sesión y muchas más cosas, que podéis encontrar detalladas aquí.
Por último, destacar un artículo sobre el principio DRY, uno de los más utilizados mientras programamos, pero que a menudo se malinterpreta. Milan Jovanović nos explica por qué y cómo debemos aplicarlo correctamente.
El resto de enlaces a contenidos interesantes, a continuación.
Por si te lo perdiste...
- Asignaciones seguras con 'null conditional assignments' de C# 14 (.NET 10)
José M. Aguilar - Switch expressions en C# 8
José M. Aguilar
.NET
- Proxies en Go o C#
Fernando Escolar - .NET 11 Preview 5 is now available!
.NET Team - .NET at Microsoft Build 2026: Must watch sessions
Daniel Roth - Microsoft Build 2026 recap: vision, launches, and top sessions
Jon Galloway - Convert HTML to Markdown in C# Without Losing Structure or Images
Mathan Kumar Varadharaja - Model Validation in ASP.NET Core: Data Annotations and FluentValidation
Nick Cosentino - Boost Your .NET Projects: Future-Proofing Performance with Spargine’s Fast Methods
David McCarter - Introducing Corvus.Text.Json V5: Why V5 Exists
Ian Griffiths - The new Visual Studio Solution File Format: Goodbye .SLN, Welcome .SLNX!
Thomas Claudius Huber - C#14 The field keyword
Karen Payne - New features and Roslyn analyzers for Meziantou.Framework.FullPath
Gérald Barré - Introducing Corvus.Text.Json V5: Schema Validation 10x Faster & Pooled-Memory Parsing
Ian Griffiths - TUnit.Mocks: No Castle, No Reflection, No Drama
Martin Stühmer - Creating a Packaged Single File Web Site Viewer Executable
Rick Strahl
Todos hemos tenido que lidiar con situaciones en las que una función o método puede devolver diferentes tipos de datos dependiendo de ciertas condiciones. El ejemplo clásico es una función que puede devolver un resultado exitoso o un error, lo que a menudo se maneja con tipos como Result<T> o haciendo algunos malabarismos con composiciones de clases o herencia.
var result = GetUser(1);
if(result.Success)
{
var user = result.Value;
// Hacer algo con el usuario
}
else
{
var error = result.Error;
// Manejar el error
}
Son artificios que, aunque funcionan, dan trabajo, complican la legibilidad y ocultan la intención real del desarrollador a la hora de escribir código de procedimientos que manejen múltiples tipos de retorno.
Los tipos unión son una de las características más solicitadas en C# durante años, y finalmente los tendremos disponibles en la versión 15 del lenguaje, que vendrá de la mano de NET 11 en noviembre de 2026.
Con esta nueva capacidad, podremos crear tipos que pueden contener valores de varios tipos diferentes, con controles en tiempo de compilación y sin apenas complejidad adicional.
Lo vemos en detalle a continuación.
El evento Microsoft Build 2026 ha sido el gran protagonista de la semana, con tantos anuncios interesantes que cuesta trabajo citar sólo unos pocos: siete nuevos modelos AI propios, el framework UI Reactor, GitHub Copilot para escritorio, novedades en Windows para desarrolladores y plataformas de agentes, una nueva versión del chip cuántico Majorana, Azure Cobalt VM, HorizonDB, Windows NVidia RTX Spark, e incluso un divertido sistema operativo cuyas herramientas se van autogenerando mediante alucinaciones de la IA 😄🤯
Pero aún así, se han publicado otras muchas cosas que no deberíamos dejar de leer. Por ejemplo, ahora que estamos intentando asimilar el giro brutal de la política de precios de Github Copilot, Bruno Capuano nos ofrece consejos basados en su propia experiencia sobre cómo usar GitHub Copilot de forma efectiva, sin quemar el presupuesto de tokens en un rato. Muy recomendable si usas esta herramienta y quieres sacarle el máximo partido.
¿Puede un endpoint de .NET manejar un millón de solicitudes por segundo? Patrick Kearns nos cuenta cuáles son los cuellos de botella reales si pretendemos alcanzar ese nivel de rendimiento, y qué podemos hacer para mejorar el rendimiento de nuestras aplicaciones ASP.NET Core.
Hector Pérez nos muestra cómo aprovechar las nuevas capacidades de validación de formularios en Blazor 10, con ejemplos prácticos y consejos para mejorar la experiencia de usuario.
Se ha presentado Angular 22, con el nuevo Signal Forms, primitivas de accesibilidad, reactividad asíncrona y otras mejoras, muchas enfocadas en facilitar el desarrollo mediante IA.
Muchos más enlaces a contenidos interesantes de la semana, a continuación.
Por si te lo perdiste...
- Cómo obtener el nombre de la clase actual en .NET
José M. Aguilar - Implementación por defecto en interfaces de C#8, un primer vistazo
José M. Aguilar
.NET
- Microsoft.UI.Reactor: A declarative, component-based C# framework for building WinUI 3 desktop apps Microsoft
- How to Use Build5Nines.SharpVector with Microsoft Agent Framework for Local RAG in C#
Chris Pietschmann - Introducing ReflectionIT.PropertyThrowGenerator - Add compile‑time validated properties to your C# classes with zero boilerplate
Fons Sonnemans - Pointers in C# and Memory Safety: Span vs. C# 16 unsafe
NDepend Team - Getting Started with Claude in .NET
Yohan Malshika
Mientras programamos, todos hemos dicho alguna vez "voy a tomar este atajo", "ya lo solucionaré en el futuro", "lo dejo hardcodeado por ahora"... y el código se queda así para siempre. Viene bien reflexionar sobre lo que estas decisiones implican, como las reflexiones de Martin Stühmer sobre lo crueles que somos a veces con nuestro yo del futuro, en un par de posts con títulos muy ilustrativos: My biggest enemy writes my code y I’m done making empty promises.
Interesante también el artículo de Fran Iglesias explicando cómo usar métricas objetivas —no solo intuiciones o “elegancia”— para decidir cuándo y cómo refactorizar código con el fin de reducir costes de mantenimiento y mejorar la calidad.
Agentes, agentes IA everywhere... Pero, ¿cómo funcionan por detrás los agentes IA? En este post de Waldek Mastykarz nos explica el flujo de trabajo un agente para que podamos comprenderlo de forma sencilla.
También, Chris Pietschmann nos lleva de nuevo a las bases para revisar los ámbitos de vida de servicios en .NET (Singleton, Scoped y Transient) y entender cuándo usar cada uno de ellos.
Muchos más enlaces interesantes, a continuación.
Por si te lo perdiste...
- Obtener información sobre el origen de la invocación de un método con los atributos "caller info" de .NET
José M. Aguilar - Tipos referencia anulables en C# 8
José M. Aguilar
.NET
- No llames a
BuildServiceProvider()
Fernando Escolar - Automatically getting API difference diagrams in your .NET PRs
Morten Nielsen - C#: Should This Service Be Singleton, Scoped, or Transient?
Chris Pietschmann - The Support Length for .NET LTS and STS versions – Thomas Claudius Huber
Thomas Claudius Huber - In C#, When Should You Use Exceptions, Result Objects, or Validation Errors?
Chris Pietschmann - Python for .NET devs: data types, classes, objects, records and interfaces
Davide Bellone - C# Nullable Types Explained (2026)
NDepend Team
Probablemente alguna vez habréis trabajado en Visual Studio con una solución .NET enorme, con decenas o centenares de proyectos. Es algo habitual en sistemas que tienen ya muchos años de vida, con una arquitectura muy compleja o que han ido creciendo con el tiempo sin un control adecuado.
En estos casos, el entorno de desarrollo tarda una eternidad en cargar la solución y quedar listo para su uso, el rendimiento de Visual Studio se resiente enormemente, con lo que cada acción que realicemos (compilar, ejecutar, depurar, etc.) se vuelve lenta y frustrante, y encima, al navegar por el código, todo se complicará bastante por la cantidad de proyectos y archivos que tendremos que manejar.
Y lo peor de todo es que es para nada. En la mayoría de los casos no es necesario tener todos los proyectos de la solución cargados para poder realizar nuestras tareas, porque lo habitual es que solo trabajemos con un subconjunto de ellos, normalmente bastante pequeño.
Afortunadamente, .NET permite crear filtros de solución (archivos .slnf), algo así como mini-soluciones que incluyen solo los proyectos que nos interesan en cada ocasión, mejorando el rendimiento de los entornos de desarrollo y facilitando la navegación por el código.
En este artículo vamos a ver qué son los filtros de solución, cómo crearlos y cómo usarlos.

