El 1 de julio de 2011 recibí por primera vez la notificación de que había sido reconocido como Microsoft MVP (Most Valuable Professional). Fue una sorpresa en toda regla, porque nunca pensé que mis aportaciones a la comunidad fueran lo suficientemente relevantes como para merecer este reconocimiento y, por supuesto, tampoco podía sospechar que alguien me hubiera nominado para ello.
No era consciente del impacto que ese nombramiento tendría en mi vida profesional y personal a partir de ese momento, pero sí del honor, con su correspondiente parte de vértigo y síndrome del impostor, que suponía formar parte de aquel grupo selecto de personas que compartían su experiencia y conocimientos con la comunidad de desarrolladores, y a las que admiraba desde hacía tiempo.
Desde entonces, cada mes de julio he seguido recibiendo puntualmente este nombramiento de manera consecutiva, y ayer me notificaron oficialmente el decimosexto reconocimiento como Microsoft MVP, por mi contribución a la comunidad de desarrolladores y mi implicación en la difusión de conocimientos sobre tecnologías Microsoft durante el año anterior. Todo un privilegio que me hace sentir muy orgulloso y, sobre todo, profundamente agradecido por haber sido considerado digno de pertenecer a este grupo durante tantos años.
Aprovecho este momento para agradecer a Cristina González Herrero y al resto de miembros del equipo del programa MVP que sigan apoyando mi trabajo y reconociendo mis contribuciones.
También quiero agradecer a todos los que me habéis acompañado en este viaje, ya sea leyendo mis posts, dejando comentarios, compartiendo mis contenidos o, simplemente, apoyando mi trabajo de alguna manera. Sin vosotros, nada de esto habría sido posible.
Y, por supuesto, a mi familia, por su paciencia infinita durante todos estos años. Su apoyo ha sido fundamental para poder llegar hasta aquí, así que este reconocimiento también lo celebraremos juntos, como la ocasión merece 😊
¡Seguimos!
Publicado en: www.variablenotfound.com.
La versión 7.0 final de TypeScript ya está disponible. Si has ido probando las RC, ya habrás visto que el incremento de velocidad en compilación es espectacular. Y si no lo has hecho, estás tardando en actualizar.
David Grace nos muestra cómo es posible registrar los cambios automáticamente utilizando las tablas temporales en EF Core.
Al diseñar una API, cualquier comportamiento que expongamos puede ser utilizado por los clientes, y cambiarlo puede romper sus aplicaciones. Esto se conoce como la Ley de Hyrum, y Oren Eini cuenta cómo les afectó en RavenDB.
Waldek Mastykarz nos recuerda que, cuando hablamos de modelos IA, lo último no es necesariamente lo mejor. Si los adoptamos conforme aparecen, podríamos encontrarnos con sorpresas desagradables, como incrementos de coste, pérdidas de calidad o de predictibilidad. Lo más prudente es probarlos antes en nuestros escenarios concretos, y decidir a partir de ahí.
Los agentes de Microsoft Agent Framework para .NET ya pueden utilizar skills, por lo que podemos proporcionarles conocimientos especializados que cargarán bajo demanda cuando necesiten realizar tareas específicas. Nos lo cuenta Sergey Menshykh.
El resto de enlaces a contenidos interesantes, a continuación.
Por si te lo perdiste...
- La directiva @helper, ¿reencarnada en ASP.NET Core 3?
José M. Aguilar - Evitar el aviso de compilación "NETSDK1057: You are using a preview version of .NET" usando global.json
José M. Aguilar
.NET
- Fin del soporte de .NET 8 y .NET 9
CampusMVP - NuGet Versioning and Semantic Versioning (SemVer) in .NET & NuGet Package Metadata Best Practices: README, Icon, Tags, and License & How to Publish a NuGet Package to NuGet.org
Nick Cosentino - Improvements to reading Process outputs
Andrew Lock - Migrate Your WPF App to the Web, From Your Browser
Xaml.io - Agent Skills for .NET Is Now Released
Sergey Menshykh - You inherited a .NET codebase with zero tests. Now what?
Ebrahim Sayed Ebrahim
Aunque siempre estuvieron ahí, la moda de los agentes IA ha vuelto a llamar al escenario a los worktrees de Git, que permiten trabajar en varias ramas al mismo tiempo sobre el mismo repositorio. En este artículo, José Manuel Alarcón nos explica cómo funcionan y cómo pueden ayudarnos en nuestro día a día.
Cuando lanzamos peticiones desde .NET, lo habitual es esperar a que la respuesta llegue completa antes de procesarla, aunque a veces, si los datos a recibir son masivos, esto no escala bien. Pero, ¿y si pudiéramos procesar los datos a medida que nos van llegando? En este artículo, Nick Cosentino nos explica cómo hacerlo con HttpClient y Server-Sent Events.
Si sigues trabajando con .NET exactamente igual a como lo hacías hace unos años, quizás te vendría bien echar un vistazo al resumen que Simon Foster ha hecho de las novedades que se han ido incorporando a .NET desde la versión 5 hasta la 10, para ver qué cosas nuevas podemos aprovechar.
El resto de enlaces a contenidos interesantes, a continuación.
Por si te lo perdiste...
- Evaluación en cliente de EF Core
José M. Aguilar - Determinar el modo de renderización de un componente Blazor (versión 9 y posteriores)
José M. Aguilar
.NET
- .NET 8 and .NET 9 will reach End of Support on November 10, 2026
Rahul Bhandari - Packaging and Package Identity for .NET apps with WinApp CLI on Windows
Zachary Teutsch - Closed class hierarchies
Andrew Lock - Building an MCP Server in .NET Without Buying the Hype
Martin Stühmer - Claude Skills for .NET: Teach AI to Build Features Your Way
Anton Martyniuk - .NET 5 to 10: Key Features Introduced in Every Release
Simon Foster - Identity vs Principal: Modeling the Current User in .NET — AppointMe
BravoDev - HttpClient Streaming in C#: HttpCompletionOption, ReadAsStreamAsync, and Server-Sent Events
Nick Cosentino - Building a Windows Tray App by combining Microsoft.UI.Reactor and a Worker Project
Morten Nielsen - Writing a .NET Garbage Collector in C#
Kevin Gosse - How to match names in C# without exact string comparisons
Nick Harrison
En Blazor no existen "signals", como en Angular. Sin embargo, es posible crear algo similar, para conseguir que la UI se actualice automáticamente cuando cambian los datos. Steven Giesel nos explica cómo hacerlo.
Rick Strahl nos explica qué opciones tenemos para crear aplicaciones Windows que puedan ejecutarse tanto en modo consola como en modo GUI, y por qué ninguna de ellas es perfecta 👉
Los caracteres de salto de línea no son simplemente a CR y LF. En este post Gérald Barré nos explica qué debemos tener en cuenta para gestionarlos correctamente en .NET.
Y por último, ¿sabías que desde la llegada de .NET 10 hace unos meses puedes ejecutar un archivo C# directamente desde la línea de comandos? Puedes crear scripts, pequeñas utilidades y ejecutarlas de forma rápida sin necesidad de crear y compilar un proyecto completo. En este post te explico cómo hacerlo.
Enlaces a más contenidos interesantes, a continuación.
Por si te lo perdiste...
- Ejecutar directamente archivos C# desde línea de comandos con "dotnet run"
José M. Aguilar - Implementación de servicios gRPC con ASP.NET Core
José M. Aguilar
.NET
- File-based WinUI apps with Microsoft.UI.Reactor
Morten Nielsen - Avoiding ToString() allocations with StringBuilder.MoveChunks
Andrew Lock - TimeProvider Test Patterns That Hold Up in CI and Production
Martin Stühmer - Creating Dual Use Windows GUI and Console Applications
Rick Strahl - New lines are more than \r and \n
Gérald Barré - Can Claude Code build a .NET app with your code style?
David Grace
Seguro que alguna vez os habéis encontrado con la necesidad de usar un servicio registrado como scoped desde el código de un servicio registrado como singleton. Un caso típico es cuando en una aplicación ASP.NET Core tenemos un servicio corriendo en segundo plano (vaya, un BackgroundService) y necesitamos acceder a servicios que usan bases de datos o cualquier otro recurso que está normalmente asociado al ámbito de una petición HTTP.
Si intentamos inyectar directamente un servicio scoped dentro de un servicio singleton, obtendremos un error al iniciar la aplicación, durante el proceso de validación del árbol de dependencias, ya que el contenedor de .NET no permite esta combinación:
System.AggregateException: 'Some services are not able to be constructed
(Error while validating the service descriptor 'ServiceType:
Microsoft.Extensions.Hosting.IHostedService Lifetime: Singleton ImplementationType:
MyBackgroundService': Cannot consume scoped service 'MyDbContext' from
singleton 'Microsoft.Extensions.Hosting.IHostedService'.)'
Una posibilidad (peligrosa: ¡no hacer!) es deshabilitar esta validación inicial, pero esto solo ocultaría el problema y casi con toda seguridad nos llevaría más tarde a errores en tiempo de ejecución que podrían ser difíciles de diagnosticar y, en el peor de los casos, incluso tumbarnos la aplicación.
En este post vamos a ver la forma correcta de resolver el problema creando ámbitos personalizados dentro del servicio singleton, y usándolos para resolver los servicios scoped que necesitemos.
¿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

