Si, por curiosidad o necesidad, alguna vez has abierto un archivo de solución de Visual Studio (.sln) con un editor cualquiera, habrás comprobado que se trata de un archivo de texto plano.
Su estructura, aunque no es excesivamente compleja y está bien documentada, es propietaria de Visual Studio y no es evidente a simple vista, resulta demasiado verbosa, tiene mucha información irrelevante duplicada y, en general, no es nada amigable para los desarrolladores que se ven obligados a modificarla, sobre todo cuando se trata de resolver conflictos en sistemas de control de versiones. Y, por supuesto, es algo que se agrava conforme crece el número de proyectos en la solución.
Esto llevó a Microsoft a presentar hace unos meses el nuevo formato de archivo de solución .slnx, una alternativa basada en XML mucho más ligera, concisa y fácil de entender, que será el utilizado por defecto a partir de la llegada de .NET 10.
Lo vemos en profundidad a continuación.
Esta semana, en la recopilación de enlaces encontramos el interesante repaso de Ricardo Peres a algunas técnicas para optimizar el trabajo con cadenas de texto en .NET en búsquedas, formateo, extracción de subcadenas y uso de interning.
Vale la pena también echar un vistazo a la notación de objetos orientada a tokens (TOON) propuesta por Johann Schopplich para reducir significativamente el coste en tokens al enviar datos estructurados (como JSON) a modelos de lenguaje.
Isaac Ojeda nos muestra cómo utilizar channels y servicios de .NET para crear un sistema de control de tareas en segundo plano, muy interesante.
E imperdible el detallado análisis de Andrew Lock sobre la grave vulnerabilidad "request smuggling" en ASP.NET Core, calificada con una puntuación de 9.9, la más alta hasta la fecha.
El resto de contenidos, a continuación.
Por si te lo perdiste...
- ¿Aplicar [Authorize] a todos los controladores MVC de una carpeta?
José M. Aguilar - No se puede conectar al servidor web 'https', el servidor web ya no funciona y otras pistas de que no has lanzado correctamente tu aplicación ASP.NET Core
José M. Aguilar
.NET
- Sistema de Control de Jobs en Tiempo Real con Channels y Background Services en .NET
Isaac Ojeda - Cómo implementar Redis en Clean Architecture utilizando .NET
Gerson Azabache Martínez - Thread-Safe Initialization with LazyInitializer
Gérald Barré - Using SignalR with Wolverine 5.0
Jeremy D. Miller - Akka.NET + Kubernetes: Everything You Need to Know
Aaron Stannard - Are you still using new Random() everywhere?
Steven Giesel - Building Dropbox in .NET: Chunked Uploads, Merkle Trees, and Cloud Architecture for Petabyte-Scale Sync
Sudhir Mangla - Working with Strings in .NET
Ricardo Peres - Load Testing Kafka Pipelines with C# and NBomber
Anton Martyniuk - How to Import, Export, and Filter PDF Annotations in C#
Chinnu Muniyappan - Distributed Isolator
Ricardo Peres - PackageDownload: NuGet's Forgotten Power Tool
Martin Stühmer - Distributed ID Generation at Scale in .NET: From Snowflake to ULID and Beyond
Sudhir Mangla - Your Tests Are Lying — Mutation Testing in .NET
Martin Stühmer - Grammarly in .NET: Real-Time Grammar Checking, Context-Aware Suggestions, and Processing 1 Billion Words Daily
Sudhir Mangla - Catching dependency injection configuration errors early
Bart Wullems - What’s new in .NET 10
Denis Makarenko
Los dev tunnels permiten exponer, permanente o temporalmente, aplicaciones web locales a Internet de forma segura y sencilla desde Visual Studio. Son ideales para desarrollo y pruebas y, si nos los conoces, deberías echar un vistazo al post de Mike Irving, donde explica cómo usarlos.
Derek Comartin reflexiona sobre la ubicación adecuada para implementar la autorización en nuestras aplicaciones: ¿debería estar en la capa de dominio o en la capa de aplicación? Una lectura muy recomendable para entender mejor este aspecto crucial del diseño de software.
A pesar del miedo generalizado a que la inteligencia artificial (IA) destruya empleos tecnológicos, la realidad es muy distinta. Desde CampusMVP nos llega un artículo que desmonta este mito y da pistas sobre cómo los profesionales podemos adaptarnos en esta nueva era.
Gerson Azabache nos habla sobre el concepto "idempotencia" y su importancia en la ingeniería de software moderna. Un principio clave para garantizar la confiabilidad y robustez de nuestras aplicaciones. No te pierdas su análisis.
Estos, y muchos más enlaces a artículos interesantes, a continuación.
Por si te lo perdiste...
- BenchmarkDotNet: Arañando microsegundos en proyectos .NET Core o .NET Framework
José M. Aguilar - Tuplas como variables de control en bucles "for" de C#
José M. Aguilar
.NET
- Introducing Isolator - a framework for running isolated code for .NET
Ricardo Peres - Inlining and structs in C#
Steven Giesel - xUnit v3 update: Ability to skip tests & a new TestContext
David Grace - RestClient.Net 7: Compile-Time Safety and OpenAPI MCP Generation
Christian Findlay - Understanding When Type.FullName Returns Null in .NET
Gérald Barré - Using profiler function hooks in .NET with Silhouette
Kevin Gosse - Practical OOP in Modern C#: Composition Over Inheritance, Records, and Pattern Matching
Sudhir Mangla - Announcing Sponsorship on NuGet.org
Simon Cropp - Upgrading to Microsoft Agent Framework in Your .NET AI Chat App
Bruno Capuano - Boxing in C#: What It Costs You and How to Get Rid of It
NDepend Team - Modern C# Design Patterns You Should Actually Use in 2025
Vahid Bakhtiary - Modern C# Design Patterns You Should Actually Use in 2025
Vahid Bakhtiary - C# 14: The field Keyword – Or Should I Say: I Had a Dream?
Thomas Claudius Huber - The Evolution of .NET Dependency Resolution
Ricardo Peres - ConstantExpectedAttribute: Unlocking Performance Through Compiler Awareness
Martin Stühmer
Los métodos extensores aparecieron con C# 3.0, hace casi veinte años. Desde entonces, se han convertido en una herramienta muy útil para los desarrolladores de C#, permitiéndonos "añadir" métodos a tipos existentes sin modificar su código fuente ni crear un nuevo tipo derivado. Sin embargo, desde aquella lejana versión, este mecanismo no había sufrido cambios significativos.
Con la llegada de C# 14 y .NET 10, el concepto de extensión se ha hecho mucho más ambicioso. Como veremos a continuación, no solo es posible definir métodos extensores, sino también propiedades y otros tipos de miembros, tanto de instancia como estáticos. Además, la sintaxis se ha mejorado para hacerla más clara y fomentar la cohesión entre los distintos miembros de extensión que implementemos para un mismo tipo de datos.
Lo vemos a continuación.
Amit Bahree está escribiendo una serie de artículos sobre cómo construir un modelo de lenguaje grande (Large Language Model, LLM) desde cero. En la primera publicación hace una introducción y en la segunda habla sobre la recopilación de datos y los tokenizadores personalizados. Muy recomendable si te interesa el tema de la inteligencia artificial más allá de utilizar APIs de terceros.
Raymond Chen desvela por qué, en versiones antiguas de Windows, al tomar una captura de pantalla de un vídeo y pegarla en Paint, el vídeo se reproducía dentro de esta aplicación. Todo un misterio que por fin queda resuelto, y el motivo es cuanto menos curioso.
Y también bastante curioso el post de MaiZure analizando en profundidad el código de Altair BASIC 3.0, recientemente publicado por Bill Gates para celebrar el 50 aniversario de Microsoft.
El resto de contenidos, a continuación...
Por si te lo perdiste...
- Problem Details: una forma estándar de retornar errores desde APIs HTTP (y cómo usarlo desde ASP.NET Core)
José M. Aguilar - Cómo mostrar una página de error 404 personalizada en una Blazor Web App
José M. Aguilar
.NET
- Announcing .NET 10 Release Candidate 2
Frank Krueger - Announcing the .NET Security Group
Jamshed Damkewala - TickerQ: The Modern .NET Job Scheduler That Beats Quartz and Hangfire
Anton Martyniuk - How .NET 10.0 boosted JSON Schema performance by 18%
Ian Griffiths - Testing with FakeLogger — Scopes
Adam Storr - Use fixtures in xUnit for shared context in unit tests
David Grace - How .NET Garbage Collector works (and when you should care)
Ali Hamza Ansari - Mastering the C# Dispose Pattern
Ivan Kahl - What’s New in the AWS Deploy Tool for .NET
Philippe El Asmar - .NET 10: Run Standalone C# Files Without Project
Thomas Claudius Huber - Top 8 C# PDF Libraries .NET Developers Can’t Miss in 2025
Ramkumar Ravy - LINQ and Learning To Be Declarative
Nick Stambaugh - Taking Multi-Model AI Orchestration Further: Azure AI Foundry Persistent Agents in .NET 9
Bruno Capuano
Te propongo un experimento: abre un documento en blanco con el block de notas y anota todas las unidades de medida de CSS que se te ocurran (por ejemplo, px, em, etc.) Luego, cuéntalas... ¿cuántas has recordado? Yo nueve, entre las que había una inventada 😕 Por eso me ha llamado la atención el artículo de Nikolaus Gebhardt en el que recopila las ¡42! unidades de medida que define CSS.
Una lectura de interés también el artículo Ricardo Peres explica cómo restringir el acceso a un método de acción en ASP.NET Core MVC utilizando el filtro [Authorize], atributos de autorización personalizados, políticas y otros mecanismos proporcionados por el framework.
Por último, Juan Irigoyen nos muestra una metodología práctica para generar código con IA usando prompts estructurados en formato Markdown.
El resto de contenidos interesantes recopilados durante la semana pasada, a continuación.
Por si te lo perdiste...
- C# bizarro, episodio 5: ¿cuál es la salida de este código?
José M. Aguilar - El filtro [ApiController] en ASP.NET Core MVC
José M. Aguilar
.NET
- Rx.NET v6.1 Now Available
Ian Griffiths - What .NET 10 GC Changes Mean for Developers
Roxeem - Introducing XAML.io Preview v0.5— Visual .NET Development, Instantly in Your Browser
OpenSilver - No More Mocking ILogger
Adam Storr - Use CancellationTokens
Steven Giesel - xUnit advanced Assert methods: Throws, IsType + more
David Grace - .NET 10: The Deathblow to Python’s AI Dominance?
DeeDee Walsh - Interesting new C# 14 features coming with .NET 10
Thomas Levesque - The 3 C# PDF Libraries Every Developer Must Know
Anton Martyniuk - Modern .NET or .NET Framework: Which Should Developers Choose in 2025?
Jeyasri Murugan - Automatic Mappings with AutoMapper
Ricardo Peres - How to Find an Available Network Port for a server in .NET
Gérald Barré - Announcing a new OData.NET serializer
Erik Ejlskov Jensen - Pass the State
Szymon Kulec - TUnit — A Pragmatic Evaluation for .NET Teams
Martin Stühmer

