SetCompatibilityVersion()
que veíamos en la plantilla de proyectos ASP.NET Core MVC y Razor Pages desde la versión 2.1:public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Esta llamada era incluida de serie en los nuevos proyectos ASP.NET Core desde la versión 2.1, pero en la versión 3.0 ya no aparece. Y probablemente también os llame la atención a quienes ya habéis trabajado con ASP.NET Core 2.x, así que he pensado que sería interesante comentarlo por aquí.Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: aspnetcore, aspnetcoremvc, novedades
Por si te lo perdiste...
- Ejecutar tareas en segundo plano en ASP.NET 4.x
José María Aguilar - Cómo crear un paquete NuGet y publicarlo en Nuget.org
Jorge Turrado
.NET Core / .NET
- Announcing .NET Core 3.1 Preview 2
Richard Lander - .NET Core 3 for Windows Desktop
Olia Gavrysh - Managing output in the .NET SDK projects
Cezary Piątek - Performance Profiling of .NET Core 3 applications on Linux with dotnet-trace and PerfView
Michael Shpilt - .NET Core with Jupyter Notebooks - Available today | Preview 1
Maria Naggaga - The Most Subtle C# Bugs in 2019: Null Conditional Operator with Any()
Mikael Koskinen - Struct with “main method” as an entry point
Jiří Činčura - TryParse is your friend
Adam Storr - New features of C# 8
Koolprasadd - How to Work with C# Vectors and Matrices for Machine Learning
James McCaffrey - Novedades de C# 8: IAsyncEnumerable
Jorge Turrado

En este post echaremos un vistazo a gRPC y su uso en la nueva versión del framework.
Por si te lo perdiste...
- Invalidar el contenido cacheado por el tag helper "cache" de ASP.NET Core MVC
José María Aguilar - Lanzar el depurador desde Javascript
José María Aguilar
.NET Core / .NET
- Introducing Orleans 3.0
Reuben Bond - How to use Nullable Reference Types in .NET Standard 2.0 and .NET Framework
Gérald Barré - NET Core 3.0 : SDK, Runtime and Set up for Development
Kusnaditjung - The .NET Process class on Linux
Tom Deseyn - How to write to a file with C# in 2019
Thomas Ardal - Defer with C# 8.0
Stuart Lang - Autofac: Eager vs Lazy Construction During Registration
Ken Dale - The history of the GC configs
Maoni Stephens - Trying Out Daily Builds of Roslyn
Stuart Lang

Pues bien, tras años sufriendo esto en silencio, he decidido invertir unos minutos a ver si existía una forma de ahorrarme los dichosos segundos que tardaba en desactivar la captura de tráfico cada vez que abría la herramienta.

Y como efectivamente es posible, os dejo la forma de conseguirlo por si hay por ahí algún perezoso más al que pueda interesarle ;)
Por si te lo perdiste...
- Registro y obtención de múltiples implementaciones de servicios en ASP.NET Core, y un caso práctico
José María Aguilar - Eager loading en Entity Framework: mejora drástica del rendimiento en acceso a datos
José María Aguilar
.NET Core / .NET
- .NET Vector Performance
Frank A. Krueger - JSON Serialization in .NET Core 3: Tiny Difference, Big Consequences
Roland Weigelt - Differences Between .NET Framework, .NET Core, and .NET Standard
Marinko Spasojevic - New in .NET Core 3.0: local tools: Exploring ASP.NET Core 3.0
Andrew Lock - Generating IDs in C#, 'safely' and efficiently
Nima Ara - C# exception handling best practices
Thomas Ardal - C# 8 Positional Patterns Custom Deconstructor Pitfall
Ian Griffiths - Simplifying the Cake global tool bootstrapper scripts with .NET Core 3 local tools
Andrew Lock - Create exceptional interactive documentation with Try .NET
Scott Hanselman - Research based on the .NET Runtime
Matt Warren

IEnumerable
con un bucle foreach
, cada uno de los elementos debía existir previamente en la colección o bien ser generado de forma síncrona.Por ejemplo, en el siguiente código no teníamos una forma razonable de implementarlo si la obtención de cada uno de los valores retornados desde el método generador tuviera que ser asíncrona:
foreach (var i in GetNumbers())
{
Console.WriteLine(i);
}
IEnumerable<int> GetNumbers()
{
for (var i = 0; i < 1000_000_000; i++)
{
var a = i * 2; // <-- Esto es una operación síncrona,
yield return a; // ¿cómo haríamos si en lugar de esta operación síncrona
// necesitásemos hacer una llamada asíncrona para obtenerlo?
}
}
Aunque convertir el método GetNumbers()
en asíncrono pudiera parecer una alternativa razonable, en realidad no lo es; de hecho, los resultados no llegarían al cliente hasta que hubiéramos generado todos los valores, por lo que sería peor que la primera opción en términos de rendimiento y ocupación de memoria:foreach (var i in await GetNumbersAsync())
{
Console.WriteLine(i);
}
async Task<IEnumerable<int>> GetNumbersAsync()
{
var list = new List<int>();
for (var i = 0; i < 1000_000_000; i++)
{
var a = await Task.FromResult(i * 2); // <-- Aquí generamos los valores usando asincronía,
list.Add(a); // pero el consumidor seguirá esperando hasta
// que los hayamos generado todos.
}
return list; // <-- Aquí retornamos la colección completa
}
En este último caso la llamada a GetNumbersAsync()
se ejecutaría de forma asíncrona, es decir, daríamos la oportunidad al hilo de ejecución actual de dedicarse a otros menesteres mientras la llamada es realizada, desde el punto de vista de su consumidor es a todos los efectos como si se tratara de un método síncrono.Pues bien, aparte de características mainstream como la implementación por defecto en interfaces, los tipos referencia anulables, índices y rangos o muchas otras, en la última versión del framework y C# 8 se ha introducido el soporte para la generación y consumo de secuencias asíncronas.
Por si te lo perdiste...
- La interfaz IMiddleware: Middlewares tipados per request en ASP.NET Core
José María Aguilar - Generar archivos Excel como un señor con ClosedXml
José María Aguilar
.NET Core / .NET
- Announcing .NET Core 3.1 Preview 1
Richard Lander - Fall .NET Core Survey
Sam Spencer - What’s New in .NET Core 3.0?
Damir Arh - No More .NET Framework APIs Will Be Ported to .NET Core, Microsoft Says
David Ramel - Allow Your App through the Firewall With C#
Damien Tohin Doumer Kake - Anonymous classes and generics limit in .NET/C#?
Jiří Činčura - No Exception Left Unlogged
Mark Heath - Introducing Microsoft.Data.SqlClient
Jonathan Allen - Ordering of static fields in C# matters
Bill Boga - C# 8: Nullable Reference Types
Gérald Barré - .Net Core Global Tools – your custom app from nuget package
Michał Białecki - dotnet-script 0.50 is out – with support for .NET Core 3.0!
Filip Woj - Creating a Windows Service with .NET Core 3.0
Christian Nagel - Running .NET Core global tools in non-sdk Docker images
Andrew Lock - C# 8.0 and .NET Standard 2.0
Stuart Lang - The Battle of C# to JSON Serializers in .NET Core 3
Michael Shpilt - New features in .NET Core 3.0 on Linux
Tom Deseyn - Assert your assumptions - .NET Core and subtle locale issues with WSL's Ubuntu
Scott Hanselman

Para ponernos en situación, imaginemos que tenemos una expresión como la siguiente, donde retornamos el texto
"Rojo"
cuando le suministramos el valor de enumeración Color.Red
, y "Desconocido"
en otros casos. Algo fácil de solucionar utilizando el operador condicional ?
:enum Color { Purple, Red, Blue, Orange, Black, Pink, Gray, Green, White };
string GetColorName(Color color)
{
var str = color == Color.Red ? "Rojo" : "Desconocido";
return str;
}
Imaginemos ahora que la aplicación evoluciona y debemos añadir otro caso a esta condición, como el soporte para el color azul. No pasa nada, podemos seguir el mismo patrón, aunque empezaremos a notar que esto no va a escalar demasiado porque la legibilidad empieza a resentirse:var str = color == Color.Red ? "Rojo" : color == Color.Blue ? "Azul" : "Desconocido";
Por si te lo perdiste...
- El hosting in-process de ASP.NET Core 2.2
José María Aguilar - Closures en JavaScript: entiéndelos de una vez por todas
Óscar Sotorrío
.NET / .NET Core
- Compartir versionado entre ensamblados en .NET Core, Parte I y Parte II
Jorge Serrano - Non-nullable references with C# 8 and .NET Core 3.0
Cezary Piątek - Import and Export RSA Key Formats in .NET Core 3 Kevin Jones
- Regex - Deny of Service (ReDoS)
Gérald Barré - Worker Service: Cómo crear un servicio .Net Core 3 multiplataforma
Jorge Turrado - C# 8 New Features
Shameel Ahmed - Deploying .NET Core 3 apps as self-contained
Tim Heuer - Lenguaje C#: interfaces y qué diferencia existe entre implementarlas explícita o implícitamente
José Manuel Alarcón - 4 Predictions for the Future of .NET
Patrick Smacchia - Using C# 8 and Nullable Reference Types in .NET Framework
Jonathan Allen - A Proposal for IDisposable and Static Analysis: DisposeUnused Attribute
Jonathan Allen - ¿Cómo averiguar qué versión o versiones de la plataforma .NET tengo instaladas en mi equipo?
José Manuel Alarcón
ASP.NET / ASP.NET Core
- Generalize file access for ASP.NET Core applications using IFileClient implementations
Gunnar Peipman - ASP.NET CORE Token Authentication and Authorization using JWT (No Cookies) – Part 2
Joseph Rozario - How to Include AntiForgeryToken for MVC Integration Testing
Marinko Spasojevic - 3 Ways to Bind Blazor Data to DOM
Bradley Wells - Configure Different Implementations for Different Controllers in ConfigureServices
Steve Smith - Run an External Executable in ASP.NET Core
Changhui Xu - gRPC Response Compression with ASP.NET Core 3.0
Steve Gordon - Async Streaming with ASP.NET Core SignalR and C# 8
Christian Nagel <img src="images/blazor.png" style="float:right; margin: 0 0 10px 10px" alt="Blazor"> - Blazor Server in .NET Core 3.0 scenarios and performance
Daniel Roth - Writing the Code for a gRPC Service and Client in ASP.NET Core 3.0
Peter Vogel - Working With Query Strings In Blazor
Mike Brind
Error en proyectos gRPC al usar un nombre de usuario de Windows con espacios o caracteres especiales

C:\Users\<Tu nombre>
:
De hecho, llevo ya varios encontronazos de este tipo en los últimos meses (por ejemplo, con Anaconda o con el SDK de Android para Windows), y el último lo he tenido al intentar utilizar las herramientas de Protobuf para la creación de servicios gRPC que, como sabéis, es una de las novedades incluidas en .NET Core 3.
Aunque el problema lo he encontrado trabajando con Visual Studio, ciertamente este IDE tiene poco que decir al respecto; ocurre lo mismo usando línea de comandos o cualquier otro entorno que se base en el tooling oficial de gRPC para .NET.
Por si te lo perdiste...
- 101 nuevas citas célebres del mundo de la informática (¡y van 404!)
José María Aguilar - Crear y utilizar librerías multiplataforma con C++ y .NET Core (Parte 2)
Jorge Turrado
.NET / .NET Core
- Introducing .NET Core Windows Forms Designer Preview 1
Olia Gavrysh - Deprecating packages on nuget.org
Anand Gaurav - .NET Serialization Benchmark 2019 Roundup
Alois Kraus - Adventures in IL: Conditionals and Loops
Aaron Powell - .NET Core 3 Local Tools
Stuart Lang - C# Inheritance: A Complete but Gentle Introduction
Carlos Schults - New in ASP.NET Core 3.0: Worker Services
Jürgen Gutsch - Using the .Net Core Template Engine to Create Custom Templates and Projects
Matt Ellis - How to Stress the C# Compiler
Henning Dieterichs - What’s the maximum number of generic parameters for a class in .NET/C#?
Jiří Činčura - Publicada la versión final de DotNetCore.FeatureFlags
Jorge Serrano
Bueno, la cuestión es que en ASP.NET Core 3.0 ha vuelto a cambiar, y esperemos que sea por última vez ;)
Veamos en qué han consistido estos cambios.
Por si te lo perdiste...
- ¿Por qué separamos los directorios con la barra invertida?
José María Aguilar - ¿Se pueden introducir directivas o lógica de inicialización en todas las vistas y páginas sin duplicar código?
José María Aguilar
.NET / .NET Core
- Announcing .NET Core 3.0
Richard Lander - .NET Core 3.0 Released / .NET 5 Is VNext
Chris Pietschmann - Announcing F# 4.7
Phillip Carter - Single-file executables in .NET Core 3
Magnus Montin - Exploring .NET Core 3.0. What's New?
Andrea Chiarelli - .NET Core 3.0 New APIs
Patrick Smacchia - dotnet new - Behind the Scenes
Mark Heath - Nullable<T>: Value vs GetValueOrDefault() in term of performance
Gérald Barré - A Closer Look at C# 8 Interfaces
Jeremy Clark - C#8 Interfaces: Properties and Default Implementation & Unit Testing Default Implemetation & "dynamic" and Default Implementation & Dangerous Assumptions in Default Implementation
Jeremy Clark - Adventures in IL: Conditionals and Loops
Aaron Powell - Announcing free C#, .NET, and ASP.NET for beginners video courses and tutorials
Scott Hanselman - Creating gRPC .NET Core Client libraries
Steve Gordon - gRPC and C# 8 Async stream & * gRPC and C# 8 Async stream cancellation
Laurent Kempé - The Maybe Monad
Yacoub Massad - All about IDisposable
Gunnar Peipman - “Stubs” in the .NET Runtime
Matt Warren - Detecting Profanity in Users Input
Stephen Haunts - Modernize Your C# Code
Florian Rappl - Como medir el rendimiento de nuestro código
Jorge Turrado

Seguramente estáis al tanto de que Microsoft acaba de anunciar la disponibilidad de .NET Core 3.0 y tecnologías relacionadas, incluyendo ASP.NET Core 3.0.
Pues bien, me complace anunciaros que, sólo un día más tarde, desde CampusMVP hemos lanzado el nuevo curso Desarrollo Web con ASP.NET Core 3 MVC.
Se trata de una gran revisión del curso de desarrollo con ASP.NET Core MVC que ha formado ya con éxito a cientos de desarrolladores de todo el mundo, en la que hemos introducido los cambios y novedades que han venido de la mano de la nueva versión del framework.
En este post intentaremos responder a las siguientes preguntas:
Publicado por José M. Aguilar a las 8:09 a. m.
Etiquetas: aspnetcore, aspnetcoremvc, autobombo, curso

- .NET Core 3.0
- C# 8
- ASP.NET Core 3.0
- Blazor server-side
- Entity Framework Core 3.0
- Entity Framework 6.3 (sí, ¡compatible con .NET Core!)
- SignalR 3.0
- ML.NET
- Soporte WinForms y WPF para .NET Core 3
- Visual Studio 2019 16.3
- Simplificación del archivo de proyecto
.csproj
- Uso del host genérico
- Introducción del endpoint routing
- Mayor modularidad en el registro de servicios de MVC
- Nuevo serializador/deserializador JSON (bye bye, JSON.NET!)
- Compatibilidad exclusivamente con .NET Core (bye bye, target .NET Framework!)
- Limpieza de
Microsoft.AspNetCore.App
- Cambios en la compilación de vistas
- Soporte para gRPC
- Y, por supuesto, muchas otras mejoras...
Novedades de ASP.NET Core 3.0
¡No os lo perdáis!
Publicado en: www.variablenotfound.com.
Publicado por José M. Aguilar a las 8:55 a. m.
Etiquetas: aspnetcore, aspnetcoremvc, noticias, novedades
Por si te lo perdiste...
- Otras formas de obtener dependencias en controladores ASP.NET Core MVC
José María Aguilar - Login único para subdominios en ASP.NET
José María Aguilar
.NET / .NET Core
- Debug .Net Core en Azure WebApp desde Visual Studio
Elena Salcedo - Emulating a PlayStation 1 (PSX) entirely with C# and .NET
Scott Hanselman - Custom certificate validation in .NET
Gérald Barré - Async Lock In C#
Ahmed Fouad - Alignment with C# 8 Switch Expressions
Christian Nagel - Using Roslyn to build object to object mapper
Gunnar Peipman - Async Streams – A Look at New Language Features in C# 8
Matthias Koch - Avoid thread synchronization problems with Roslyn: Synchronization primitives traps
Cezary Piątek - Bucket Sort in C#
Matthew Jones - gRPC and C# 8 Async stream
Laurent Kempé - “Implementing” a non-public interface in .NET Core with DispatchProxy
Filip Woj - How many .NET Core SDK-s you REALLY have?
Gunnar Peipman - Zip files and folders then export them from your app with .NET Standard
Matt Crombie - Aspect-Oriented Programming: Caching and Connection Handling in .NET
Marko Paden

Pues sí, y creo que no del todo, respectivamente ;)
En este post vamos a echar un primer vistazo a la que creo que es una de las características más controvertidas de la nueva versión del lenguaje.
Nota: aún estamos usando compiladores y tooling preliminar, por lo que lo dicho aquí podría resultar incompleto o inexacto cuando la versión definitiva de C# 8 sea lanzada (en pocos días, vaya ;)
Así que ya estamos de vuelta... y para celebrar el inicio de esta nueva temporada, nada mejor que echar un vistazo a los enlaces recopilados durante la semana pasada que, como de costumbre, espero os resulten interesantes.
Por si te lo perdiste...
- Mi controlador tiene muchos parámetros en el constructor, ¿estoy haciendo algo mal?
José María Aguilar - Las 20 mejores tiras cómicas sobre desarrollo de software
José María Aguilar
.NET / .NET Core
- C# 8.0 – Specification: Pattern Matching – Positional Patterns & Asynchronous Streams & Disposable ref structs & Null coalescing assignment & Nullable reference types
Jorge Serrano - C# y .NET: Tuplas y cómo devolver más de un objeto como retorno de una función
Jorge Turrado - StringBuilder performance pitfalls
Gérald Barré - Using Certificate Authentication with IHttpClientFactory and HttpClient
Damien Bowden - Asynchronous Producer Consumer Pattern in .NET (C#)
Alex Basiuk - GC Perf Infrastructure – Part 0
Maoni Stephens - How .NET 4.8 Can Break Your Application
Alois Kraus - Interacting with native libraries in .NET Core 3.0
Tom Deseyn - Interfaces in C# 8.0 gets a makeover #dotnet #csharp #oops #interface
Talking Dotnet - Gnome Sort in C# & Radix Sort in C#
Matthew Jones - What to Look Forward to in .NET Core 3.0 Features
Graham High - Unit Testing with .NET Core ILogger<T>
Changhui Xu - Use Performance Counters in .NET to measure Memory, CPU, and Everything - Full Guide
Michael Shpilt - Default Interface Members and Inheritance
Dave Glick - Detecting Sync over Async Code in ASP.NET Core
Derek Comartin - A Quirk With Implicit vs Explicit Interfaces
Aaron Powell - An Introduction to SequenceReader
Steve Gordon - Default Interface Members, What Are They Good For?
Dave Glick - You're Using HttpClient Wrong
Peter Vogel - File uploads with Blazor
Steve Sanderson - Writing high performance code despite C#
Oren Eini
Así pues, me complace anunciaros que voy a dedicar algunas semanas a tomar aire fresco y formatear un poco la mente. Mis planes son muy simples: al principio un par de semanas de familia, playita y descanso, y el resto a seguir trabajando, pero a un ritmo más tranquilo y dejándome libres los fines de semana, que es cuando suelo aprovechar para escribir en el blog.
¡Nos vemos a la vuelta, ya en septiembre!

Publicado en Variable not found.
Por si te lo perdiste...
- Establecer textos por defecto y localizados en validaciones de ASP.NET Core MVC
José María Aguilar - Introducción a SignalR (I): Conceptos básicos
José María Aguilar
.NET / .NET Core
- La potencia de la Reflexión en C# (Parte 3: Constructores)
Jorge Turrado - How to prompt for a password on Windows?
Gérald Barré - C# 8: Static Local Functions and Using Declarations
Peter Mbanugo - Custom Binary Serialization in C#
Jean-Bernard Pellerin - Pipeline Pattern Implementations in C# .NET
Michael Shpilt - Exploring Raygun's new application performance monitoring tool for .NET Core
Andrew Lock - Poner una propiedad a readonly no te asegura que sea readonly
Jorge Serrano - Generar .exe en Net Core
Nacho Fanjul - The 3 Most Common C# Data Types: Explanations and Examples
Carlos Schults - Write Better Code Faster with Roslyn Analyzers
Mika Dumont - C# - .NET Reunified: Microsoft’s Plans for .NET 5
Mark Michaelis

De hecho, en el top ten de errores de ejecución de aplicaciones creadas con casi cualquier lenguaje y plataforma, las excepciones o crashes debidos a las referencias nulas son, con diferencia, el tipo de error más frecuente que solemos encontrar.
Pues en este repaso que vamos dando a las novedades principales de C# 8, hemos llegado la que probablemente podría ser la característica más destacada en este entrega, cuyo objetivo es precisamente establecer las bases para que podamos olvidarnos de las referencias no controladas a nulos.
No olvidéis que hasta que sea lanzado oficialmente C# 8, para poder probar sus características hay que hacer algunas cosillas.
Por si te lo perdiste...
- Funciones constructoras en Javascript
Oscar Sotorrío - Localizar errores de validación del binding en ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- Exception usage analyzer
Cezary Piątek - Preview of C# 8.x
Jonathan Allen - C# 8 Interfaces
Mangesh Gaherwar - Using Span for high performance interop with unmanaged libraries
Eric Sink - Distributed Caching in .NET Core with PostSharp and Redis
Tugberk Ugurlu - C#: [Obsolete] on an extension method? Also remove ‘this’
Rick Brewster - Help Wanted! Autofac (Still) Looking for Owners
Travis Illig

Recordad que C#8 está aún en preview, y para usarlo hay que seguir los pasos que vimos en un post anterior.En otras palabras, esta mejora pretende simplificar implementaciones como las siguientes, donde comprobamos si una variable contiene
null
y, en caso afirmativo, le asignamos un valor:...
var defaultValue = ... // lo que sea;
var x = GetSomething();
// Usando un bloque if:
if(x == null)
{
x = defaultValue;
}
// O bien, usando el null coalescing operator:
x = x ?? defaultValue;
Por noveno año consecutivo (¡nueve años ya, wow!), he sido reconocido Microsoft MVP por las contribuciones realizadas a la comunidad de desarrolladores durante el año pasado.
Es todo un lujo y un honor seguir formando parte de este grupo de locos de la tecnología y apasionados del software, entre los que me precio de contar con buenos amigos y colegas a los que admiro profundamente.
Lo primero, me gustaría volver a agradeceros a todos, amigos y amigas de Variable Not Found, vuestro incondicional apoyo a lo largo de estos años. Sin duda, es lo ha hecho posible llegar hasta este punto, y tener aún cuerda para ir mucho más lejos ;)
Gracias a mis tres niñas por permitirme tantas horas de dedicación a lo que tanto me gusta, asumiendo con deportividad mi ausencia en muchos momentos. De no contar con su comprensión e infinita generosidad, tampoco habría sido posible llegar a este momento ❤
Me gustaría también agradecer al equipo del programa MVP en Microsoft el trabajo que realizan, y especialmente a Cristina e Irene por su esfuerzo, cercanía y por ponerlo todo tan fácil.
Por último, aprovecho para enviar una afectuosa bienvenida a los MVP que en este momento estáis celebrando vuestro primer nombramiento y desearos que disfrutéis el momento, porque probablemente se convierta en uno de vuestros más preciados recuerdos. Y por supuesto, mi más sincera enhorabuena también a los que repetís galardón: como suele decirse, el mérito no es sólo llegar, sino también mantenerse.
Y ahora, ¡a celebrarlo!

Publicado en: www.variablenotfound.com.
Por si te lo perdiste...
- El Tao de la Programación
José María Aguilar - Mi controlador tiene muchos parámetros en el constructor, ¿estoy haciendo algo mal?
José María Aguilar
.NET / .NET Core
- La potencia de la Reflexión en C# (Parte 2: Ensamblados)
Jorge Turrado - Top five tips for handling .NET Exceptions
Justin Miller - Microsoft Feature Toggle Feature Flag Library: A First Look
Jason Roberts - Find, Fix, and Avoid Performance Problems in C# .NET: 10 Best Practices
Michael Shpilt - Questions from the NDC Oslo Panel Discussion on the Future of .NET
K. Scott Allen - Selective enrichment
Nicholas Blumhardt - C# 8 Features Nullable References
Peter Mbanugo - Using C# anonymous types to assert complex results in your unit tests
Dror Helper - Use Polly fallback policies for default return values
Jerrie Pelser - Versioning limitations in .NET
Jon Skeet
ASP.NET / ASP.NET Core
- gRPC – Hello World
Jorge Serrano - gRPC y “no gRPC” todo junto en el mismo proyecto & Traducir entre gRPC y HTTP/JSON
Eduard Tomás - Routing in ASP.NET Core MVC
Marinko Spasojevic - Creating a Custom Tag Helper in ASP.NET Core: Generating HTML
Peter Vogel - Web.config transformations - The definitive syntax guide
Thomas Ardal - Using Blazor Components In An Existing MVC Application
Chris Sainty - Decode JWTs in C# for Authorization
Ryan Foster - Ensuring consistent feature flags across requests: Adding feature flags to an ASP.NET Core app
Andrew Lock - Access your local ASP.NET Core web application from the public web & Use Conveyor to access your IIS Express app over the internet Jerrie Pelser
- ASP.NET Core Vue CLI Templates
Daniel Jimenez Garcia - Using Chained Certificates for Certificate Authentication in ASP.NET Core 3.0
Damien Bowden - Using the BodyReader and BodyWriter in ASP.NET Core 3.0
Steve Gordon

TagWith()
de Entity Framework Core que, como recordaréis, venía de perlas para incluir un comentario en las consultas SQL enviadas al servidor de datos para poder identificarlas a posteriori:LINQ
============================================
var query = context.Friends
.OrderByDescending(friend => friend.Age)
.Take(10)
.Select(friend =>
new { FriendName = friend.Name,
friend.Age,
CountryName = friend.Country.Name
})
.TagWith("Get top 10 older friends with country");
Generated SQL
============================================
-- Get top 10 older friends with country
SELECT TOP(@__p_0) [friend].[Name] AS [FriendName], [friend].[Age],
[friend.Country].[Name] AS [CountryName]
FROM [Friends] AS [friend]
LEFT JOIN [Countries] AS [friend.Country]
ON [friend].[CountryId] = [friend.Country].[Id]
ORDER BY [friend].[Age] DESC
Mientras escribía el post, pensaba que quizás sería interesante poder utilizar esta misma idea en Entity Framework 6, porque, al fin y al cabo, todos tenemos por ahí muchas aplicaciones en producción que continúan delegando en este marco de trabajo su acceso a datos. Tras una búsqueda en Google y no encontrar gran cosa, pensé que tampoco sería tan difícil de implementar algo que diera el apaño...TL;DR: Echad un vistazo a EF6.TagWith en NuGet o en el repo de GitHub.
Por si te lo perdiste...
- El veloz murciélago hindú…
José María Aguilar - Establecer textos por defecto y localizados en validaciones de ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- Making a tiny .NET Core 3.0 entirely self-contained single executable
Scott Hanselman - Using pointers in Image Processing
Napuzba - Parsing HTML data with C#
Bruno Sonnino - Net Core (Linux) Error: System.IO .IOException: The configured user limit on the number of inotify instances has been reached
Eduard Tomás - async y await en C#: cómo manejar asincronismo en .Net de manera fácil
Jorge Turrado - Cryptography in .NET
Gérald Barré - The Evolving Infrastructure of .NET Core
Matt Mitchell - Create interactive documentation with the new Try .NET template
Akshita Agarwal - Delegates as callback functions in csharp
Karthik Chintala - C# - The good parts
Sam Williams - Using High-Performance Techniques to Base64 Encode a GUID
Steve Gordon - Communicating between Python and .NET Core with Boost Interprocess
Jared Rhodes

Muchas veces estas sentencias SQL generadas de forma automática y ejecutadas al servidor son fáciles de leer y entender, pero hay veces que EF traduce el LINQ a consultas SQL enormes, complejas, con escasa legibilidad y difícilmente reconocibles.
Seguro que alguna vez habéis tenido por delante una de estas complejas sentencias SQL generada por Entity Framework y os hubiera gustado saber en qué punto del código fue lanzada. Esto es muy frecuente, por ejemplo, cuando estamos monitorizando las consultas en ejecución con SQL Profiler, o al examinar las queries que consumen mayor número de recursos desde los paneles de Azure SQL.
En versiones "clásicas" de Entity Framework había que ingeniárselas para conseguirlo, pero, como podréis comprobar a continuación, en EF Core la cosa se ha simplificado bastante :)
Por si te lo perdiste...
- Lo que ocurre cuando desarrolladores diseñan interfaces de usuario (II)
José María Aguilar - Localizar errores de validación del binding en ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- Announcing .NET Core 3.0 Preview 6
Richard Lander - Delegates And Events In C#
Shadman Kudchikar - Complete Sudoku Game for Windows using VB.NET 2013
Hung, Han - Empty try with finally
Jiří Činčura - Migrating a Sample WPF App to .NET Core 3 Part 1 & Part 2
Mike Rousos - Tangled in .NET: Will 5.0 really unify Microsoft's development stack?
Tim Anderson - Customize object displays in the Visual Studio debugger YOUR way
Leslie Richardson - Conditional Ref, Ref ReadOnly, Ref Reassignment in C# 7.X
Brij Bhushan Mishra - Calling Cognitive Services OCR Service from a .NET Application
David Giard - Try the new System.Text.Json APIs
Immo Landwerth - How to Debug LINQ queries in C#
Michael Shpilt - La potencia de la Reflexión (Parte 1)
Jorge Turrado

Index
, junto con alguna cortesía del compilador, permitía la especificación de índices en arrays de forma muy sencilla. Veíamos cómo podíamos acceder a elementos concretos utilizando su posición en la colección, tanto contando desde el principio como desde el final:var primes = new[] { 2, 3, 5, 7, 11, 13, 17, 19 };
Index fromStart = 2; // = Index.FromStart(2) - conversión implícita
Index fromEnd = ^2; // = Index.FromEnd(2)
Console.WriteLine(primes[fromStart]); // 5
Console.WriteLine(primes[fromEnd]); // 17
Sin embargo, puede que a Index
por sí mismo tampoco le veáis demasiada utilidad... y así es. De hecho, su finalidad es más bien el dar soporte a rangos, una nueva característica de C#8 que nos permitirá referirnos a "porciones" de arrays o colecciones similares usando una sintaxis compacta e integrada en el lenguaje.Por si te lo perdiste...
- 32 Síntomas que indican que estás afectado por el desarrollo
José María Aguilar - Cargar automáticamente objetos del modelo en acciones ASP.NET Core MVC
José María Aguilar
.NET / .NET Core
- C#9 – Type classes y extensiones
Eduard Tomás - Supporting the community with WF and WCF OSS projects
Scott Hunter - Throwing ArgumentException and InvalidOperationException
Peter Mbanugo - dnSpy: A Decompiler for .NET and Windows applications
Nick Randolph - Serializing a PascalCase Newtonsoft.Json JObject to camelCase
Andrew Lock - An Interesting Case Of .NET Performance and Caching
Khalid Abuhakmeh - Extension Methods Guidelines in C# .NET
Michael Shpilt - C# : Task Parallel Library (TPL) with async await and TaskCompletionSource for async I/O operations
Siddharth Patel - What's better than ILDasm? ILSpy and dnSpy are tools to Decompile .NET Code
Scott Hanselman - Ignoring a Billion-Dollar Mistake is simply not an Option
Ian Bebbington - PDF File Writer C# Class Library (Version 1.24.0)
Uzi Granot - How Can We Efficiently Sort Socks with C#?
Matthew Jones - Clever little C# and ASP.NET Core features that make me happy
Scott Hanselman

Span<T>
.Como muchas otras características del lenguaje, se trata de algunos azucarillos sintácticos creados en torno a dos nuevos tipos añadidos a las bibliotecas básicas del framework: las estructuras
System.Index
y System.Range
. Por esta razón, para utilizar estos elementos no sólo es necesario disponer de nuevos compiladores, sino también de nuevas versiones del framework.Recordad que a día de hoy ya se puede probar C# 8 en Visual Studio 2019 o directamente desde la interfaz de línea de comandos de .NET Core.
Por si te lo perdiste...
- Validación de peticiones en ASP.NET, o cómo evitar el error “Request.Form peligroso”
José María Aguilar - Quizás no estés comparando con null de forma totalmente correcta
José María Aguilar
.NET / .NET Core
- ¿Es lo mismo string o String en un programa C#?
José Manuel Alarcón Aguín - Spying on .NET Garbage Collector with .NET Core EventPipes
Christophe Nasarre - Porting desktop apps to .NET Core
Olia Gavrysh - 8 Techniques to Avoid GC Pressure and Improve Performance in C# .NET
Michael Shpilt - Debugging System.AggregateException
Thomas Ardal - How to Build .NET Strings at Run Time
Peter Vogel - Candidate Features For C# 9
Bassam Alugili - Extension Methods Are Easy with C#
Dirk Strauss - Let's talk about mapping objects in C#
Josef Ottosson - Shipping Pseudocode to Production
Dobromir Nikolov - Unexceptional non-blocking task-based flow control in .NET
Szymon Kulec - You can stop mocking ILogger
Joseph Woodward

Esta capacidad abre posibilidades bastante interesantes,que no eran tan inmediatas (o en algunos casos, ni siquiera posibles de forma directa) en versiones "clásicas" de Entity Framework, o EF Core anterior a 2.1. Gracias a ella podremos, por ejemplo, tener en nuestra entidad una propiedad de tipo enum mapeada a una cadena de caracteres en el almacén de datos, o introducir cualquier lógica de transformación, como podría ser la desencriptación y encriptación de valores, a la hora de leer y persistir información.
Por si te lo perdiste...
- Parámetros opcionales: úsense con precaución
José María Aguilar - ¿Aplicar [Authorize] a todos los controladores MVC de una carpeta?
José María Aguilar
.NET / .NET Core
- Is it better to "!= 0” or ”== mask” when working with enums (C#, RyuJIT)
Jiří Činčura - WinForms - Single-File Applications With .NET Core 3
DevExpress Blogs - Default implementations coming to interfaces with C# 8
Gunnar Peipman - Como instalar un servicio Net Core en Linux
Jorge Turrado - Profiling .NET Core Memory Traffic using JetBrains dotMemory
Steve Gordon - The Uri composition mystery
João Antunes - HttpClient: How to remove charset from Content-Type header
Gunnar Peipman - Making Sense of .NET 5
Bill Reiss - Moving from Node.js to .NET Core
Jim Wang - Be careful of lazy dependencies
Nigel Sampson - Null No More
Simon Timms - Cross-Platform Selenium with DotNet Core
Andy R. Blank - Lying to the compiler
Jon Skeet - Analysing the Large Object Heap in JetBrains dotMemory
Steve Gordon

using
, utilizada tanto en forma de directiva como de instrucción, es una de las más sobrecargadas del lenguaje C#. Es útil para bastantes cosas, como la importación de espacios de nombres, definición de alias de namespaces o tipos, simplificar el acceso a miembros de tipos estáticos, o para especificar bloques o ámbitos de uso de recursos (objetos IDisposable
) que deben ser liberados automáticamente.Centrándonos en este último caso de uso, seguro que en muchas ocasiones habéis escrito código como el siguiente, donde vamos anidando objetos
IDisposable
para asegurar que al finalizar la ejecución de cada bloque los recursos sean liberados de forma automática:void DoSomething()
{
using(var conn = new SqlConnection(...))
{
connection.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = "...";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// ...
}
}
}
}
}
Al final, lo que encontramos es código con un nivel de indentación muy alto, y que resulta muy extenso, básicamente porque una gran parte de las líneas las dedicamos sólo a abrir y cerrar llaves. A la postre, esto sólo hace que nuestro código crezca a lo ancho, lo cual no es bueno desde el punto de vista de la simplicidad y facilidad de lectura.Por si te lo perdiste...
- Consejos imprescindibles por si algo falla
José María Aguilar - BenchmarkDotNet: Arañando microsegundos en proyectos .NET Core o .NET Framework
José María Aguilar
.NET / .NET Core
- .NET Developer Updates from Build 2019
Sam Basu - Performance Improvements in .NET Core 3.0
Stephen Toub - .NET Core May 2019 Updates - 1.0.16, 1.1.14, 2.1.11 and 2.2.5
Lee Coward - Switch Expressions and Pattern-Based Usings – A Look at New Language Features in C# 8
Matthias Koch - Top 3 Features in C# 8 that will change the way you write code
Chris Pietschmann - .NET Core Global Tools - (What are Global Tools, How to Create and Use them)
Damir Arh - Default implementations in interfaces
Mads Torgersen - Cache Implementations in C# .NET
Michael Shpilt - C# : 6 Cool Language Features That You Rarely Use
Siddharth Patel - Modernize Your C# Code
Florian Rappl - Introducing the Try .NET Global Tool - interactive in-browser documentation and workshop creator
Scott Hanselman - Create Interactive .NET Documentation with Try .NET
Maria Naggaga - Creating Strings with No Allocation Overhead Using String.Create
Steve Gordon

En versiones anteriores a EF Core 2.1 y todos sus antecesores "clásicos", un problema que era difícilmente salvable era la necesidad de que en las entidades existiera un constructor público sin parámetros.
Esto tenía sentido, pues debíamos proporcionar al framework una vía para crear las instancias al materializarlas desde el almacén de datos. De hecho, al materializar, el marco de trabajo usaba dicho constructor para crear la instancia, y luego iba poblando las propiedades una a una utilizando sus setters (o estableciendo el valor de sus backing fields, como vimos en un post anterior)
Por si te lo perdiste...
- Cómo adaptarse a la RGPD con ASP.NET Core
José María Aguilar - ¿Esa enumeración está vacía?
José María Aguilar
.NET / .NET Core
- .NET Core is the Future of .NET
Scott Hunter - Introducing .NET 5
Richard Lander - Announcing .NET Core 3.0 Preview 5
Richard Lander - Declarative Coding Approach to Caching in .NET Core with PostSharp
Tugberk Ugurlu - Announcing .NET Core 3.0 Preview 5
Richard Lander - Introducing diagnostics improvements in .NET Core 3.0
Sourabh Shirhatti - Your .NET 5 Questions Answered (Kinda Sorta), Part 1: WCF
David Ramel - NLog: Rules and filters
Ivan Yakimov - Default timeouts in .Net code. What are they if you do not specify?
Chris F Carroll - Automatically Detect Expiring HTTPS SSL Certificates
Steve Smith - Looking back at Some of the Changes in C# 6
George Stocker - Cómo crear un servicio Net Core multiplataforma
Jorge Turrado
ASP.NET / ASP.NET Core
- ASP.NET Core updates in .NET Core 3.0 Preview 5
Brady Gaster - Simple custom authentication with ASP.NET Core
Gunnar Peipman - The backend for frontend and the HttpClient
João Antunes - Consuming a GraphQL API with ASP.NET Core
Marinko Spasojevic - Safely migrating passwords in ASP.NET Core Identity with a custom PasswordHasher
Andrew Lock - Simple Authentication In Razor Pages Without A Database
Mike Brind - Comparing Native Blazor Components
Ed Charbeneau - ASP.NET Core Blazor game development using .Net core 3.0 preview,Web API and Visual Studio 2019
Syed Shanu - Handling Access Tokens for private APIs in ASP.NET Core
Damien Bowden - Assembly version tag helper for ASP.NET Core
Gunnar Peipman

Y hasta aquí la píldora cultural del día, ahora vamos a lo importante :D
Publicado por José M. Aguilar a las 8:15 a. m.
Etiquetas: aniversario, autobombo, sponsored, variablenotfound