lunes, 20 de enero de 2020
Por si te lo perdiste...
- Antipatrones de asincronía en C#
José María Aguilar - El archivo _ViewImports en ASP.NET Core MVC
José María Aguilar
.NET Core / .NET
-
Digest Authentication en .NET Core 3.x
Jorge Serrano
-
Type.GetType Functionality Has Not Changed in .NET Core
Jeremy Clark
-
The Reunification of .NET 5
Matthew MacDonald
-
Implementing State in .NET Core gRPC Messages with oneof
Peter Vogel
-
C# 8.0: Understanding Using Declarations
Steve Gordon
-
C# 9 Proposals: Module Initializers
Jonathan Allen
-
Collecting and analyzing memory dumps
Sourabh Shirhatti
-
C# Futures: Simplified Parameter Null Validation
Jonathan Allen
-
SelfServe: A Self-hosting Self-installing Windows Service
Honey the codewitch
-
UTF-8 BOM adventures in C#
Daniel Wertheim
-
Not planning now to migrate your .NET 4.8 legacy, is certainly a mistake
Patrick Smacchia
Publicado por José M. Aguilar a las 8:05 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
martes, 14 de enero de 2020
Sin embargo, es menos conocido el hecho de que estas bibliotecas pueden incluir también recursos estáticos como imágenes, hojas de estilo o scripts, lo que resulta bastante interesante a la hora de crear componentes totalmente autosuficientes y muy reutilizables.
En este post vamos a ver cómo crear una RCL redistribuible que definirá el tag helper
<mario>
, cuya inclusión en una página hará que ésta muestre el conocido personaje correteando por la pantalla, como se muestra en la siguiente captura:
lunes, 13 de enero de 2020
Por si te lo perdiste...
- ¿Cómo se llama el operador "-->" de C#?
José María Aguilar - ¿Se pueden asociar varias interfaces a la misma instancia en el contenedor de servicios de ASP.NET Core?
José María Aguilar
.NET Core / .NET
- Trabajando con documentos JSON en .NET Core 3.x, Parte I y Parte II
Jorge Serrano - Utilizando la librería BenchmarkDotNet
Jorge Serrano - Controversial extension methods: CastTo<T> and As<T>
Raymond Chen - C# 8 is old news. Onward, to C# 9!
Calvin A. Allen - Abusing Extension Methods and Null Continuation
Marc Clifton - Tracing .NET Core applications
Tom Deseyn - Commenting out Code in C# (Oldie but Goldie Tip) & Quick #if … #endif in Visual Studio
Roland Weigelt - Check for Breaking Changes with ApiCompat
Stuart Lang - Happy New ... C# 9 Features!
Rion Williams - MediatR 8.0 Released
Jimmy Bogard - What dotnet new Could Be
Muhammad Rehan Saeed - Chaos Engineering your .NET applications using Simmy
Joseph Woodward - Building a self-contained game in C# under 8 kilobytes
Michal Strehovský - Multiplatform Desktop HTML Editor with .NET Core 3 and Electron.NET
Erik Engineer - C# Channels - Async Data Pipelines
Denis Kyashif - .NET Core, .NET 5; the exodus of .NET Framework?
Marc Gravell - Building a Windows service with Worker Services and .NET Core 3.1, part 1: Introduction
Anthony Giretti - The case of the unbalanced brackets
Mark Seemann - C# boxing with string concatenation and interpolation
Fons Sonnemans - Using Type.GetType with .NET Core / Dynamically Loading .NET Standard Assemblies in .NET Core
Jeremy Clark - How to Design Messages for gRPC Services in .NET Core
Peter Vogel - Static Initializers in C#: A Cautionary Tale
Edin Kapić - .NET Core: Writing Really Obvious Code with Enumerated Values in gRPC Web Services & Reusing and Recycling Data Structures in gRPC Services in .NET Core
Peter Vogel
martes, 7 de enero de 2020

Estrenamos este nuevo año y década (aunque esto último es bastante más discutible) siguiendo una de las grandes tradiciones de este blog: dedicar el primer post a repasar cuál fue el contenido publicado durante los doce meses anteriores que más os llamó la atención.
Pero antes, abusando de este pequeño slice de atención que me estáis prestando en este momento, quería aprovechar para desearos un 2020 repleto de salud y alegría, tanto en el plano personal como en el profesional.
Y ahora, al turrón...
sábado, 28 de diciembre de 2019
Un reciente estudio de la consultora Garner indica que durante el desarrollo de una aplicación dedicamos más del 80% de nuestro tiempo a implementar controles de posibles fallos.
Además, este otro informe de StackOverflow obtenido tras analizar el código fuente de miles de proyectos open source, el control y tratamiento de excepciones y problemas supone más del 60% de nuestra base de código y, por tanto, aporta gran parte de la complejidad interna de las aplicaciones.
Pero, adicionalmente, estos estudios ponen al descubierto otros tres aspectos bastante interesantes:
¿No estaría bien poder ignorar esos problemas y centrar nuestro código en aportar valor a nuestros clientes?
Además, este otro informe de StackOverflow obtenido tras analizar el código fuente de miles de proyectos open source, el control y tratamiento de excepciones y problemas supone más del 60% de nuestra base de código y, por tanto, aporta gran parte de la complejidad interna de las aplicaciones.
Pero, adicionalmente, estos estudios ponen al descubierto otros tres aspectos bastante interesantes:
- Primero, que la mayoría de errores que intentamos controlar no se van a producir nunca. Son posibles a nivel de flujo de código, pero en la operativa de la aplicación no ocurrirán, por lo que podríamos decir que son problemas creados artificialmente durante el proceso de desarrollo.
-
Segundo, las líneas de control de errores no están exentas de problemas, por lo que muy a menudo encontraremos en ellas nuevo código de control (¿quién no ha visto
try/catch
anidados a varios niveles?), por lo que la bola de nieve no para nunca de crecer: código de tratamiento de errores que a su vez contiene código de tratamiento de errores, y así hasta el infinito.
-
Y por último, también nos encontramos con que en muchas ocasiones el código de control no hace nada. Por ejemplo, se cuentan por millones las líneas de código detectadas en Github cuyo tratamiento de excepciones consiste simplemente en la aplicación a rajatabla del Swallow Design Pattern, por ejemplo, implementando bloques
catch()
vacíos.
¿No estaría bien poder ignorar esos problemas y centrar nuestro código en aportar valor a nuestros clientes?
lunes, 23 de diciembre de 2019

Pero al hilo de estas fiestas, por si alguno no estáis al tanto, me ha parecido interesante aprovechar la ocasión para contaros un curioso cuento de navidad: la que se ha liado hace unos días en el repositorio de Visual Studio Code en Github, algo que algunos ya han denominado el "SantaGate".
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- Los diez mandamientos del egoless programming
José María Aguilar - Crear proyectos usando versiones específicas del SDK de .NET Core
José María Aguilar
.NET Core / .NET
- El futuro de .NET en 2020: guía para desarrolladores (justificadamente) despistados
José Manuel Alarcón - Repasando Null-Coalescing Operator y Null-Coalescing Assignment Operator y convirtiendo tipos nullable a tipos no nullable
Jorge Serrano - Novedades de C#8: Interfaces. ¿Qué podemos esperar?
Jorge Turrado - Uso de yield en C#, ese pequeño desconocido
Jorge Serrano - Creating Common Intermediate Language projects with .NET SDK
Filip Woj - C# 7 ref returns and locals
Shao Voon Wong - User Secrets in Docker-based .NET Core Worker Applications
Jimmy Bogard - C# 8 Interfaces: Static Members
Jeremy Clark - Fuse.NET: A lightweight zero-dependency C# port of the Fuse.js fuzzy-search library
Conna Wiles - A Quantum Random Number Generator for .NET: The quantum measurement problem and many-worlds approach
Andrew Lock - Vertically Sliced Command Line Tools in C# and .NET Core 3.1
Garo Yeriazarian - C# 8 Interfaces: Static Main
Jeremy Clark - Hitchhiker’s Guide to the C# scripting
Ali Bahraminezhad
martes, 17 de diciembre de 2019

Este post es parte del segundo calendario de adviento de C# en español.
Días atrás veíamos lo sencillo que resultaba crear un servicio gRPC que hacía uso de streaming unidireccional de mensajes, en sentido servidor-cliente. Como recordaréis, en este post implementábamos un servicio generador de números al que los clientes podrían conectarse para recibir una secuencia de enteros a intervalos periódicos.

Hoy vamos a complicar algo el escenario, pues veremos una opción aún más potente: la creación de streaming bidireccional, es decir, cómo cliente y servidor pueden enviar mensajes al lado opuesto de forma asíncrona, una vez establecida la comunicación entre ambos.
Para ello, implementaremos un sencillo juego, con las siguientes funcionalidades:
- El lado cliente, una aplicación de consola, abrirá una conexión con el servicio. En ese momento, el servidor elegirá un número al azar (1-100) y lanzará un mensaje de bienvenida, que deberá ser mostrado en el lado cliente.
- Desde el lado cliente solicitaremos al usuario un número entero, que enviaremos al servidor por el stream ascendente.
- El servidor recibirá el número y lo comparará con el que tiene almacenado, enviando por el canal descendente el resultado de la comparación.
- El proceso finalizará cuando el número sea encontrado.
lunes, 16 de diciembre de 2019
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
Por si te lo perdiste...
- 101 citas célebres más del mundo de la informática (¡505 ya!)
José María Aguilar - Antipatrones de asincronía en C#
José María Aguilar
.NET Core / .NET
- Runtime Host Configuration Options and AppContext data in .NET Core
Filip Woj - Thread-safe observable collection in .NET
Gérald Barré - GC Perf Infrastructure – Part 1
Maoni Stephens - C# 9
Bassam Alugili - Discriminated Unions in C# — An Unexceptional Love Story
Zhengbo Li - Setting assembly and nuget package metadata in .NET Core
Cezary Piątek - Useful ClaimsPrincipal extension methods I use in my projects
Jerrie Pelser - .NET Core, Docker, and Cultures - Solving a culture issue porting a .NET Core app from Windows to Linux
Andrew Lock - Fun with URL Encodings
Phil Haack - C# Channels - Timeout and Cancellation
Denis Kyashif - ConfigureAwait FAQ
Stephen Toub - Regex Performance With and Without RegexOptions.Compiled Using .NET Framework 4.8 and .NET Core 3.1 (December 2019)
Ken Dale - An Introduction to System.Threading.Channels
Stephen Toub - Demystifying the new .NET Core 3 Worker Service
Randy Patterson - Serialización/Deserialización Json omitiendo "JsonProperty" Name (o no)!
Juan Luis Guerrero
miércoles, 11 de diciembre de 2019

Este post es parte del segundo calendario de adviento de C# en español.
Hace bien poco hablábamos de la introducción en .NET/C# de la interfaz
IAsyncEnumerable
, y de las interesantes posibilidades que abría vistas a la producción y consumo de streams de mensajes.También hace unos días dimos un repaso al soporte para la implementación de clientes y servidores gRPC lanzado con ASP.NET Core 3. En dicho post hacíamos una pequeña introducción al desarrollo de este tipo de servicios, basados en HTTP/2 y el estándar protobuf.
Como ya comentábamos entonces, a diferencia de los tradicionales servicios tipo REST (HTTP/JSON), gRPC soporta el intercambio de datos en modo streaming, tanto unidireccional como bidireccionalmente. Es decir, en el escenario más complejo podríamos abrir un canal gRPC a través del cual un cliente podría ir enviando paquetes de información de forma asíncrona, y al mismo tiempo utilizarlo para recibir un flujo de datos continuo desde el servidor.
Hoy vamos a ver cómo se combinan estas características viendo un ejemplo de implementación de un servicio gRPC que utiliza streaming unidireccional, en sentido servidor-cliente.
Para ello crearemos un servicio generador de números en streaming que funcionará de la siguiente forma:
- Los clientes invocarán un procedimiento del servidor suministrándole un número entero inicial y un delay expresado en segundos.
- Como respuesta, el servidor creará un stream por el que irá enviando, según la periodicidad indicada, números consecutivos partiendo del especificado en la llamada inicial.
- El proceso finalizará, cerrando en stream, cuando el servidor haya generado 10 números, o bien cuando el cliente sea detenido.
martes, 10 de diciembre de 2019
Por si te lo perdiste...
- Interpolación de cadenas en C# 6
José María Aguilar - ¿Se pueden asociar varias interfaces a la misma instancia en el contenedor de servicios de ASP.NET Core?
José María Aguilar
.NET Core / .NET
- Announcing .NET Core 3.1
Richard Lander - .NET Core 2.2 will reach End of Life on December 23, 2019
Lee Coward - Updates to .NET Core Windows Forms designer in Visual Studio 16.5 Preview 1
Olia Gavrysh - C# - la palabra clave volatile
Juan Carlos Ruiz Pacheco - “Equals” and “==” are not… equal
João Antunes - Check for spammy email addresses when registering users
Jerrie Pelser - Novedades de C# 8: Índices y Rangos
Jorge Turrado - Exploring borrowed annotations in C#
Jared Parsons - How to simulate AutoMapper that works during the build time
Cezary Piątek - IAsyncEnumerable<T> Is Your Friend, Even In .NET Core 2.x
Brant Burnett - Declaring InternalsVisibleTo in the csproj
Gérald Barré - Remote Debugging a .NET Core Linux app in WSL2 from Visual Studio on Windows
Scott Hanselman - Novedades de C# 8: Índices y Rangos
Jorge Turrado - Controla la calidad de tu código con NDepend
Albert Capdevila
martes, 3 de diciembre de 2019

Pero comencemos desde el principio...
lunes, 2 de diciembre de 2019
Por si te lo perdiste...
- Inicialización de diccionarios en C# 6
José María Aguilar - Publicando nuestra web sobre Azure Web Apps
Jorge Turrado
.NET Core / .NET
- TimeSpan configuration values in .NET Core
Mark Seemann - Bootstrap a .NET Core development environment for Linux
Jim Burger - Properly Comparing Strings with Globalization and Performance in .NET
David McCarter - How to Build Analyzers and Code Fixes by Roslyn using VS2019
Ashutosh Gpt - Embracing nullable reference types
Mads Torgersen - Task Parallel Library 101 Using C#
Jin Vincent Necesario - ElectronCGI - A solution to cross-platform GUIs for .Net Core
Rui Figueiredo
martes, 26 de noviembre de 2019
Como recordaréis, esta directiva era bastante útil para simplificar el código de las vistas y mejorar su legibilidad, pues permitía crear funciones reutilizables que mezclaban HTML y código de servidor, como en el siguiente ejemplo:
@* File: Test.cshtml *
@Multiplication(2)
@Multiplication(3)
@helper Multiplication(int x)
{
<h2>Multiplication table of @x</h2>
<ul>
@for (var i = 1; i <= 10; i++)
{
<li>@x * @i = @(x * i)</li>
}
</ul>
}
Hasta la versión 2.2, teníamos que conformarnos con apaños como los descritos en aquél post si queríamos emular lo que llevábamos tantos años utilizando con MVC 5 y anteriores. Y también entonces comentamos que había ciertas posibilidades de que en algún momento volviera a la vida, y éstas se han materializado, por fin, en ASP.NET Core 3.0.Aunque quizás más bien habría que hablar de reencarnación...
lunes, 25 de noviembre de 2019
Por si te lo perdiste...
- Rendimiento de nameof en C# 6
José María Aguilar - Si las shadow properties no existen como propiedades en la entidad, ¿cómo podemos inicializarlas en el seed de Entity Framework Core?
José María Aguilar
.NET Core / .NET
- Meet WebWindow, a cross-platform webview library for .NET Core
Steve Sanderson - Easy unit testing of null argument validation (C# 8 edition)
Thomas Levesque - Augmenting the .NET Core 3.0 Generic Host
Ian Bebbington - Fire and forget a Task in .NET
Gérald Barré - Using foreach with index in C#
Thomas Levesque - HttpClient Connection Pooling in .NET Core
Steve Gordon - Using async disposable and async enumerable in frameworks older than .NET Core 3.0
Filip Woj - Using proper culture with C# string interpolation
Martin Zikmund - TaskMonitor: Free Yourself From async void and MOAR
Jean-Marie Alfonsi - Recommended Asynchronous Pattern in .NET
Damir Arh - Novedades de C# 8: Pattern Matching
Jorge Turrado
martes, 19 de noviembre de 2019

Pues bien, esto ha cambiado a partir de la versión 3.0, en mi opinión, hacia una dirección bastante más correcta. Veamos en qué consisten estos cambios.
lunes, 18 de noviembre de 2019
Por si te lo perdiste...
- Software patch, literalmente
José María Aguilar - Shadow properties en Entity Framework Core
José María Aguilar
.NET Core / .NET
-
Announcing .NET Core 3.1 Preview 3
Richard Lander
-
Interfaces In C# 8.0
Mangesh Gaherwar
-
C# 8 Interfaces: Public, Private, and Protected Members
Jeremy Clark
-
Light-weight run-time composition for the .NET Core 3.0 Generic Host
Ian Bebbington
-
.NET Framework Repair Tool
Namrata Karnam
-
Use C# 8 In Any .NET Project Today
James Montemagno
-
How to Do Naive Bayes with Numeric Data Using C#
James McCaffrey
-
How YOU can make your .NET programs perceived as more responsive with Asynchronous Code in .NET Core, C# and VS Code
Chris Noring
-
CSharp: Convert a GUID to a Compressed GUID
Metadata Consulting
-
Instantiating an object without using its constructor in C#
Filip Woj
-
High-Performance Logging in .NET Core
Steve Gordon
-
What's New With C# 8.0 – Using Declaration
Suresh M
martes, 12 de noviembre de 2019
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í.
lunes, 11 de noviembre de 2019
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
martes, 5 de noviembre de 2019

En este post echaremos un vistazo a gRPC y su uso en la nueva versión del framework.
lunes, 4 de noviembre de 2019
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
martes, 29 de octubre de 2019

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 ;)
lunes, 28 de octubre de 2019
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
martes, 22 de octubre de 2019

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.
lunes, 21 de octubre de 2019
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
martes, 15 de octubre de 2019

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";
lunes, 14 de octubre de 2019
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
martes, 8 de octubre de 2019

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.