
Desde la aparición de Blazor y sus distintos tipos de hosting de componentes (SSR, Server, WebAssembly), se intentó promover que estos fueran agnósticos respecto a su modo de ejecución. Sin embargo, en la práctica esto no es siempre posible, y en ocasiones necesitamos saber en qué modo se está ejecutando un componente para poder adaptarlo a las necesidades de la aplicación.
Hace más de un año, cuando aún Blazor 8 era la versión más reciente de este framework, vimos por aquí un truco para detectar si un componente Blazor estaba ejecutándose de forma estática (SSR) o interactiva. Y algunos años antes, ya habíamos visto también distintas formas para detectar si un componente interactivo estaba corriendo sobre Blazor Server o Blazor WebAssembly.
Aunque las soluciones propuestas funcionaban bien y solucionaban nuestro problema, eran simplemente trucos (o "hacks", algo retorcidos en algunos casos) para cubrir unas necesidades que no estaban bien resueltas desde el propio framework.
Con .NET 9 esto cambió, y desde esta versión de Blazor ya existen mecanismos nativos para detectar cuándo un componente se ejecuta en modo estático o interactivo, y en este último caso, qué modo de renderizado se está utilizando.
Vamos a ver cómo conseguirlo.

Aquí está ya la recopilación semanal de enlaces a contenidos a los que vale la pena echarles un vistazo, sobre .NET, patrones, buenas prácticas, acceso a datos, IA, desarrollo web y tooling, entre otros temas.
Esta semana destacamos un interesante post de Chema Alonso sobre cómo saltarse las restricciones de ChatGPT y otros LLMs para obtener imágenes prohibidas utilizando el conocimiento que ya tienen del mundo.
También, José Manuel Alarcón nos cuenta en un detallado artículo las novedades que podemos encontrar en el recién lanzado Angular 20.
Gregor Sutttie nos habla de una de las novedades presentadas en Microsoft Build 2025: los asistentes de actualización de .NET, que nos ayudarán a modernizar nuestras aplicaciones y migrarlas a las últimas versiones.
Me ha llamado la atención el log buffering, una característica de .NET 9 que desconocía y que permite retrasar el momento en que se emiten las trazas. Nos lo cuenta Evgenii Fedorov en su post Emit logs on-demand with log buffering.
Y por último, Braulio Díez nos recuerda la importancia de saber decir que no.
El resto, a continuación 🙂
Por si te lo perdiste...
- Probar scripts en producción sin desplegar nada, y otros usos interesantes de Fiddler
José M. Aguilar - Deserializar un objeto JSON a un diccionario .NET con System.Text.Json
José M. Aguilar
.NET
- Why is enumerating over List faster than IList?
Steven Giesel - Boost Your .NET Projects: Enhance Your Workflow with AssemblyHelper in Spargine
David McCarter - Creating your first sample game with MonoGame
Andrew Lock - Sniffing HttpClient
Sergio León - Upgrading Your .NET Applications: Exploring .NET Upgrade Assistants at Microsoft Build
Gregor Suttie - IEnumerable vs. IAsyncEnumerable in .NET: Streaming vs. Buffering
Ali Hamza Ansari - Deep C# - Delegates
Mike James - Automating Null-Forgiving Operator Removal in C# Projects
Gérald Barré - Making Event Sourcing with Marten Go Faster
Jeremy D. Miller - Catch Up on Microsoft Build 2025: Essential Sessions for .NET Developers
.NET Team - Emit logs on-demand with log buffering
Evgenii Fedorov

Desde hace ya bastante tiempo, el equipo de .NET está introduciendo mejoras en el SDK para simplificar algunos escenarios y facilitar el acceso a la tecnología de desarrolladores que, o bien están empezando, o bien proceden de otras plataformas.
Una de estas mejoras fueron los top level statements, que permiten escribir los entry points de nuestras aplicaciones C# sin necesidad de definir una clase o un método Main
. También las directivas using
globales e implícitas ayudaban a reducir el boilerplate necesario para escribir una aplicación C#.
Pero esta vez han ido más lejos 🙂
Con .NET 10, se está trabajando en eliminar toda la ceremonia necesaria para crear y ejecutar una aplicación .NET simple. De la misma forma que se puede hacer en otras plataformas y lenguajes como Node.js o Python, ahora bastará con crear un archivo con extensión .cs
y ejecutar el comando dotnet run
para compilar y ejecutar el archivo sobre la marcha. Es decir, pasamos de aplicaciones basadas en proyecto a aplicaciones basadas en archivos.
Pero, además, esto abre interesantes posibilidades para la creación de prototipos, pruebas rápidas o incluso para la creación de scripts que aprovechen el poder de .NET y C# sin necesidad de crear un proyecto completo.
Lo vemos en profundidad a continuación.

Una semana más, aquí tenéis la recopilación de los contenidos que he ido encontrando durante los últimos días. (Afortunadamente) menos enlaces que semanas anteriores, pero aún así, muchas novedades y material interesante sobre .NET, JavaScript, IA, herramientas, patrones y buenas prácticas, entre otros.
Destacamos la reflexión de José Manuel Alarcón, derivada a su vez de un artículo de Dustin Curtis, sobre el impacto del uso de la IA sobre el aprendizaje. Realmente es uno de los temas que más me preocupan sobre el uso masivo de la IA, porque, como siempre se ha dicho, "lo que no se usa, se atrofia". ¿Se va a atrofiar nuestra capacidad de razonamiento, de análisis, de crítica, de creación? ¿Vamos a perder la capacidad de pensar por nosotros mismos? ¿Podríamos quedar relegados a ser la interfaz física de una inteligencia externa que nos diga qué hacer en cada momento? Bueno, esperemos que no, pero debemos estar atentos.
Desde CampusMVP nos llega una alerta, especialmente importante si trabajamos con sitios web y aplicaciones que usan certificados HTTPS: todos caducarán cada 47 días. Nos toca revisar nuestros procesos de renovación y automatizarlos al máximo, tanto por seguridad como por comodidad.
Eladio Rincón actualiza su benchmark de generación de SQL a partir de lenguaje natural usando LLMs.
Interesante también la visión de Microsoft sobre el futuro del proceso de desarrollo de aplicaciones, donde colaboraremos con agentes IA en todas las fases del ciclo de vida: conceptualización, prototipado, generación de código, tests, mejoras, despliegue, monitorización, etc.
Angular 20 ya está aquí: estabilización de APIs, nuevas herramientas de depuración, mejoras en comprobación de tipos, literales en plantillas, server-side y más.
El resto, a continuación.
Por si te lo perdiste...
- ¿Podría Blazor llegar a reemplazar a MVC?
José M. Aguilar - Usar plantillas personalizadas de ASP.NET Core MVC desde línea de comandos
José M. Aguilar
.NET
- Stop modifying your appsettings for local development. (please)
Barrett Stolzman - How to Get Windows 8.3 Short File Names Using FindFirstFileW (UNC) and GetShortPathName (local) in C#
Niels Rasmussen - Avoiding reflection in C# in way unsafer ways!
Steven Giesel - Coding Faster with dotNetTips Spargine: Validating Arguments Made Easy with Validator
David McCarter - Using Pattern Matching in C# for Performance Optimization
Gérald Barré - Using C# Ignored Directives: A Guide for Programmers
Vijay Anand - Building a Custom Domain Events Dispatcher in .NET
Milan Jovanović - Circuit Breaker Policy Fine-tuning Best Practice
Xin Lyu - Fine-tune the volume of logs your app produces
Evgenii Fedorov - An Alternative to nuget install-package
Bryan Hogan - Configuring Microsoft.AI.Extensions with multiple providers
Rick Strahl

Cuando usamos tipos enumerados en C#, muchas veces buscamos seguridad. Los valores de un enum
son constantes conocidas de antemano y se comprueban en tiempo de compilación, lo que evita asignaciones inválidas que podrían derivar en errores en tiempo de ejecución.
También, el hecho de poder acceder a los valores del enum
utilizando nombres o identificadores descriptivos da lugar a un código más legible y fácil de mantener. Y encima, las ayudas para el autocompletado y descubrimiento de valores posibles que nos proporcionan los IDEs modernos nos ayudan a ser más productivos. Todo son ventajas 🙂
Sin embargo, los enum
de C# sólo permiten que sus valores subyacentes sean numéricos ( byte
, sbyte
, short
, ushort
, int
-el tipo por defecto-, uint
, long
o ulong
). Esto puede suponer una limitación en casos en los que nos vendría bien disfrutar de todos los beneficios anteriores, pero usando valores string
... es decir, deberíamos poder definir un tipo que pueda contener únicamente un conjunto de cadenas de texto predefinidas.
Algunos lenguajes como TypeScript, Python o Swift soportan de forma nativa la creación de enumerados de texto; en cambio, en C# no tenemos esta posibilidad. Pero bueno, no todo está perdido... gracias a la flexibilidad del lenguaje, podemos conseguir algo bastante parecido 😉

Como todos los lunes, aquí tenemos ya los enlaces a contenidos interesantes que he ido recopilando durante la semana pasada, donde la IA ha sido la gran protagonista.
La verdad es que la semana ha sido una locura, tanto que no he podido seguir el ritmo de los contenidos que han ido publicándose, sobre todo debido a la celebración del evento de I/O 2025 de Google y Build 2025 de Microsoft. A estos adicionalmente se han sumado otros lanzamientos y novedades interesantes, así como los posts técnicos que nos encontramos habitualmente en estas recopilaciones. El resultado: más de 80 enlaces a contenidos que no os podéis perder 😊
Con tanto material es difícil destacar algo concreto, pero creo que como mínimo deberíais echarle un vistazo a los siguientes links:
- Resumen de novedades y presentaciones de Google I/O 2025
- Novedades presentadas en Microsoft Build 2025
Aparte, ya se ha lanzado la preview de la nueva y controvertida versión del compilador nativo de TypeScript basado en Go.
También me ha llamado la atención el salto a open source de varios productos, como la extensión Github Copilot Chat para Visual Studio Code, el Windows subsystem for Linux, y Edit, un editor de línea de comandos que no conocía.
Por último, un toque de nostalgia noventera con el artículo de Antonio Vallejo sobre el botón turbo de los PCs de la época, que en realidad no aceleraba el PC sino todo lo contrario. Todo un alarde de creatividad marketiniana.
El resto de enlaces, a continuación.
Por si te lo perdiste...
- Parámetros opcionales en lambdas con C# 12
José M. Aguilar - Precompilación de vistas MVC en ASP.NET Core
José M. Aguilar
.NET
- A sub-millisecond GC for .NET?!
Alfred White - Writing new guards with extensions in C# 14
Steven Giesel - Nullable bool and if statement
Jiří Činčura - “ZLinq”, a Zero-Allocation LINQ Library for .NET
Yoshifumi Kawai - Memory leak from improper usage of Microsoft.Extensions.Configuration APIs in .NET on Windows
Matt Hamrick - Transforming an image into a table with Windows OCR
Bruno Sonnino