Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- C# Debug vs. Release Builds and Debugging in Visual Studio – from Novice to Expert in One Blog Article
Ben Hall - First steps with nullable reference types
Jon Skeet - Adding Resilience and Transient Fault handling to your .NET Core HttpClient with Polly
Scott Hanselman - Don’t Use Enumerables as Numbers
Peter Vogel - LINQ Part 4: A Deep Dive Into a Queryable Extension Method
Eric Lynch - Saber qué versiones de .NET Core y de SDK .NET Core tenemos instaladas
Jorge Serrano - Inferred tuple names in C# 7.1
gunnar Peipman - Setting up .NET Core Configuration Providers
Randy Patterson
Publicado por José M. Aguilar a las 8:55 a. m.
Etiquetas: enlaces
Pues bien, al hilo de esto, en este post veremos muy rápidamente cómo podemos implementar estas redirecciones en ASP.NET Core MVC que, como veréis, nos lo pone bastante fácil.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Help us plan the future of .NET!
Aditi Dugar - Performance Improvements in .NET Core 2.1
Stephen Toub - 7 things you didn’t know about .NET code
Liviu Costea - Sharing is Caring: Using Memory Mapped Files in .NET
Tom Fisher - C# Array: Definition, Examples, Best Practices, and Pitfalls
Justin Boyer
Y es que el problema con las costumbres es que son difíciles de quitar; por ejemplo, probablemente muchos estamos acostumbrados a obtener el nombre de los miembros de un enum de la siguiente forma:
public enum Color { Red, Green, Blue }
static void Main(string[] args)
{
Console.WriteLine(Color.Red.ToString());
// Output: Red
}
A priori es correcto: llevamos años haciéndolo así y no nos ha ido mal del todo. Bueno, o sí, pero probablemente no por este motivo ;)Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Announcing .NET Core 2.1 Preview 2
Rich Lander - C# 7.X and Beyond – A sneak peek at the future of C#
Andrea Angella - Cross-runtime .NET disassembly with BenchmarkDotNet
Andrey Akinshin - Performance traps of ref locals and ref returns in C#
Sergey Teplyakov - Switching between .NET Core SDK Versions
Mark Heath - Mimic Web Forms LinkButton Behavior in ASP.NET Core
Scott Addie - How we doubled Mono’s Float Speed
Miguel de Icaza - Searching docs using a .NET Core global tool
Shayne Boyer - Getting the .NET Core Runtime Version in a Running Application
Rick Strahl - Deconstructing KeyValuePair
Ian Griffiths
@section
que más adelante se incluyen en el Layout para formar parte de la información enviada al lado cliente.Sin embargo, ya sabemos que no es posible utilizar secciones en vistas parciales o cualquier otro tipo de componentes, lo cual complica algunos escenarios.
Por ejemplo, es relativamente frecuente que en el lado servidor generemos código HTML utilizando algún mecanismo de reutilización de marcado, como vistas parciales, templated helpers, tag helpers, etc., y que éste requiera recursos extra como scripts o CSS que obligatoriamente deberíamos incluir en las vistas principales donde se utilicen.
Más en el terreno práctico, imaginad que creamos una vista parcial que requiere que las páginas donde vayamos a usarla incluyan una referencia a un archivo de scripts y un bloque de inicialización como el siguiente:
@* Partial view: _MyComponent.cshtml *@
<div class="my-component">
<!-- UI goes here -->
</div>
<!-- And now, add dependencies and initialization code -->
<script src="path/to/my-component.js" ></script>
<link rel="stylesheet" href="path/to/my-component.css" ></script>
<script>
// Initialization code goes here
$(".my-component").setup();
</script>
Aquí es donde comienzan los problemas. Si lo enfocamos como hemos mostrado anteriormente y resulta que en una misma página podemos tener más de una instancia de dicha vista parcial, estaremos incluyendo en la página las referencias y código de inicialización más de una vez, lo cual podría traernos bastantes dolores de cabeza:<html>
<body>
...
<!-- My Component, instance #1 -->
@Html.Partial("_MyComponent.cshtml")
...
<!-- My Component, instance #2 -->
@Html.Partial("_MyComponent.cshtml")
...
</body>
</html>
Además de problemas de rendimiento y mal funcionamiento de la aplicación, también podría ocurrir que al insertar la parcial en la página, los scripts quizás aparecerían antes de referenciar los componentes o frameworks utilizados, pues normalmente esto suele hacerse al cerrarse el <body>
. Por ejemplo, en el código anterior nuestro componente utiliza JQuery, por lo que necesitamos que este framework se cargue antes de que nuestro código aparezca en la página, cosa que no siempre podremos asegurar. Así, el código enviado a la página podría ser el siguiente:
<html>
<body>
...
<!-- My Component, instance #1 -->
<div class="my-component">
<!-- UI goes here -->
</div>
<script src="path/to/my-component.js" ></script>
<link rel="stylesheet" href="path/to/my-component.css" ></script>
<script>
// Initialization code goes here
$(".my-component").setup();
</script>
...
<!-- My Component, instance #2 -->
<div class="my-component">
<!-- UI goes here -->
</div>
<script src="path/to/my-component.js" ></script>
<link rel="stylesheet" href="path/to/my-component.css" ></script>
<script>
// Initialization code goes here
$(".my-component").setup();
</script>
...
<script src="/scripts/jquery.min.js"></script>
</body>
</html>
Obviamente, esto provocaría un error en la página.En este post vamos a ver un posible enfoque para solucionar este escenario. La idea es bastante sencilla, pues simplemente vamos a hacer posible que cada vista parcial o componente pueda registrar código HTML que luego sea renderizado en un lugar específico de la página. El objetivo sería algo similar a lo que conseguimos con la definición de secciones
@section
y @RenderSection()
, pero aplicable a cualquier tipo de vista parcial.Publicado por José M. Aguilar a las 8:55 a. m.
Etiquetas: aspnetcore, componentes, dynamicsections, trucos
.NET / .NET Core
- Unit testing Finalizers in C#
Matthew Abbott - Exploring Dependency Injection in C# – part 1
Nikola Živković - How To Optimize .Net Development Using .Net Core 2.1 And C# 7.2
Loïc Baumann - Creating a .NET Core global CLI tool for squashing images with the TinyPNG API
Andrew Lock - What’s This and Can I Delete It? Examining A Default ASP.NET MVC Project
Matthew P Jones - Taking a look at the ECMA-335 Standard for .NET
Matt Warren - C# 8.0 Features: A Final Glimpse Of The Future
Carlos Schults

La verdad es que ha sido una espera larga, porque hasta hace bien poco la plataforma Blogger sólo ofrecía HTTPS a blogs que utilizaban el clásico subdominio “algo.blogspot.com”, pero no aquellos que usábamos dominios personalizados.
Esta necesidad era bastante frecuente y existían muchos foros, issues y consultas solicitando a Google (propietario de Blogger) que implementara esta funcionalidad, pero tras ver que esto llevaba varios años encallado y no avanzaba, hace no demasiado tiempo comencé a hacer algunas pruebas con Cloudflare, un servicio del que, por cierto, quedé gratamente impresionado. La idea era configurar este proveedor de servicios como proxy de variablenotfound.com haciendo que todas las peticiones pasasen por él, de forma que podría configurar ahí el certificado digital necesario para que las comunicaciones circulen con HTTPS. Todo esto se podía conseguir en Cloudflare de forma sencilla, en apenas unos minutos y de forma totalmente gratuita (incluido el certificado digital).
Sin embargo, al final no fue necesario porque poco después pude comprobar que Google por fin había cumplido su palabra, y ya desde el mismo panel de control los usuarios podemos activar el soporte HTTPS de forma bastante sencilla.

Al activar esta opción, Blogger genera automáticamente un certificado de Let’s encrypt y configura los servidores para que sea utilizado en los accesos al blog :)

Ya para poner un poco al día el blog creo sólo me falta hacerle una renovación completa de look, que a este se le notan ya bastante los años. Lo intenté el año pasado porque me hubiera gustado haber estrenado un nuevo traje para celebrar el décimo aniversario del blog, pero no fui capaz de conseguirlo. Creo que para dar a esto un buen lavado de cara hace falta mucho tiempo (os aseguro que tocar las plantillas de Blogger no es una tarea sencilla), así como grandes dosis de criterio y buen gusto, asuntos todos de los que no voy muy sobrado.
Bueno, todo se andará; vamos poquito a poco, pero siempre avanzando ;)
Publicado en Variable not found.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- C# 7 Series, Part 10: Span and universal memory management
Mark Zhou - Decompilando async/await
Luis Marcos Rivera - Functors & The Maybe functor
Mark Seeman - Reducing the string Length of a Guid
Christiaan van Bergen - Command line “tab” completion for .NET Core CLI in PowerShell or bash
Scott Hanselman - Quick Tip: Pass arguments to your app when using the .NET CLI
Jerrie Pelser - Using In Parameter Modifier : C# 7.2
Brij Bhushan Mishra
ASP.NET / ASP.NET Core
-
The Little ASP.NET Core Book
Nate Barbettini - ASP.NET Core - Two Factor Authentication Using Google Authenticator
Ankit Sharma - Understanding the ASP.NET Core middleware pipeline
Thomas Levesque - ASP.NET Core 2.1.0-preview1: GDPR enhancements
Barry Dorrans - ASP.NET Core Resource Authorization with AuthorizationHandler
Khalid Abuhakmeh - Enforce HTTPS correctly in ASP.NET Core APIs
Nate Barbettini
Azure / Cloud
- Soft delete for Azure Storage Blobs now in public preview
Michael Hauss - CosmosDB Serialization Overview
Sacha Bruttin
Data
- NHibernate supports .NET Core 2.0
Vladimir Khorikov
HTML / CSS / Javascript
- Sticky as a Local Fixed?
Chris Coyier - Funcionalidad “Overrides” en Chrome 65: guardando cambios en tu CSS desde el navegador
José Manuel Alarcón - Let’s play with Chrome’s Face Detection API
João Miguel Cunha - Unit testing your JavaScript code
Jim Blizzard - Announcing TypeScript 2.8
Daniel Rosenwasser - The DOM is crazy fast, yo
Swizec Teller - Inserting HTML Using CreateDocumentFragment Instead of using jQuery
Chris Love - Understanding Logical Properties And Values
Rachel Andrew - React Code Style Guide
Daniel Jauch - 30 things I learned from Javascript 30
Connor Leech - VueJS: Testeando nuestras aplicaciones
José Antonio Dongil
Visual Studio / Complementos / Herramientas
- Uso de TracePoint en Visual Studio 2017 a la hora de depurar nuestras aplicaciones
Jorge Serrano - Clear DNS Cache In Chrome
Jason Meridth - Cómo eliminar el último commit de Git en el repositorio de origen (p.ej Github)
José Manuel Alarcón
Otros
- Xamarin.Forms en el navegador y WebAssembly
Javier Suárez
.NET / .NET Core
- IEnumerator, IEnumerable y otras hierbas
Luis Marcos Rivera - Stack Overflow Developer Survey 2018 Overview for .NET Developers
Jason Roberts - A Few Great Ways to Consume RESTful APIs in C#
Vladimir Pecanac - Using Deconstructors in C# 7.0
Brij Bhushan Mishra - Collecting Collections: The Lookup Collection
Peter Vogel - ILDasm with .Net Core
Mark Michaelis - Json.NET 11.0 Release 1 - .NET Standard 2.0, JsonConverters, JSON Path and more
James Newton-King - Automatic Unit Testing in .NET Core plus Code Coverage in Visual Studio Code
Scott Hanselman

Presto y obediente, el browser interpretará esta orden navegando hacia la URL indicada en el encabezado
location
del resultado, es decir, generando una nueva petición de tipo GET
y mostrando al usuario la página obtenida.Un ejemplo del workflow de peticiones y respuestas de este tipo podría ser la siguiente:
// Petición:
GET /home/articles/welcome-to-my-blog.html HTTP/1.1
Host: www.myserver.com
// Respuesta:
HTTP/1.1 301 Moved Permanently
Location: http://www.myserver.com/blog/welcome-to-my-blog.html
// Nueva petición:
GET /blog/welcome-to-my-blog.html HTTP/1.1
Host: www.myserver.com
...
La diferencia entre el código 301 y 302 es que el primero de ellos indica al agente de usuario (sea un browser o aplicación cliente) que la redirección es permanente, esto es, que puede almacenar localmente la nueva ubicación y utilizarla en el futuro con seguridad en lugar de la que se usó originalmente. El código 302, en cambio, indica que la nueva ubicación es temporal y sólo debe ser utilizada en esta ocasión para dirigir la petición al lugar correcto.Sin embargo, hay ocasiones en que la solución queda algo corta. Por ejemplo, si cambiamos de URL el endpoint de un servicio programado exclusivamente para ser invocado mediante peticiones de tipo
POST
o PUT
, lo que nos interesaría sería que las peticiones a la dirección original retornaran una redirección indicando la nueva ubicación pero también informando al browser de que utilice sobre ella el mismo verbo de la petición original.Por ello, y algunas otras razones que veremos después, el estándar HTTP amplió, hace ya bastante tiempo, el conjunto de códigos de redirección con tres nuevos miembros: HTTP 303, 307 y 308. Los dos primeros formaron parte de HTTP 1.1, mientras que el código 308 fue añadido en la RFC 7538 algo más adelante.
Veamos para qué sirve cada uno de ellos.
Pues tras un par de semanitas de parón debido a mi excursión al MVP Summit, volvemos a la carga con un buen puñado de enlaces que, como siempre, espero que os resulten interesantes :-)
.NET / .NET Core
- Protecting Your Passwords with the .NET Secret Manager
Corey Weathers - How generics were added to .NET
Matt Warren - Does System.Net.WebSockets include a keepalive mechanism which automatically takes care of Ping/Pong control frames?
José Paulo Pendão - Fun with global tools in .NET Core 2.1 Preview
Alexander Tsvetkov - Functional Programming in C#: Map, Filter, and Reduce Your Way to Clean Code
Carlos Schults - Lightweight .NET Core benchmarking with BenchmarkDotNet and dotnet-script
Filip Woj - Cross-platform GUIs with open source .NET using Eto.Forms
Scott Hanselman - Exploring Global Tools in .NET Core
Anuraj Parameswaran
Pues creo que habré visitado Redmond ya en ocho o nueve ocasiones, pero la verdad es que la semana del MVP Global Summit sigue siendo una de esas épocas del año que espero con más entusiasmo. Y por fin, ya toca dentro de unos días ;)
Una vez más, allí tendré ocasión de disfrutar de la compañía de amigos que sólo veo una vez al año, de respirar un ambiente geek++ inigualable, y, por supuesto, del lujazo de aprender y profundizar sobre las tecnologías lo que tenemos por delante de mano de los propios padres de las criaturas. Bueno, y siempre mola quitarse un poco del día a día y hacerse un viajillo al otro lado del mundo :)
¡Nos vemos por aquí a la vuelta!
Publicado en Variable not found.

Desde el punto de vista práctico, es una solución fantástica y muy cómoda de utilizar, y de hecho seguro que en más de una ocasión os habréis visto abusando de ella, es decir, habréis introducido en claims más información de la cuenta sólo por lo cómodo que resulta utilizarlo.
Pero claro, esto tiene su coste. Cada dato extra que añadimos a esos tokens supone transferencia adicional a la hora de recibir peticiones y retornar resultados, lo que puede repercutir en costes de operación si nuestro sistema tiene mucho tráfico, y en cualquier caso, aumentar los tiempos de respuesta de la aplicación.
Para solucionar estos problemas, ASP.NET Core incorpora el concepto de claims transformation, que son componentes ejecutados durante la fase de autenticación que toman el
ClaimsPrincipal
generado a partir de la información recibida en el token y permiten extenderlo o modificarlo para añadirle claims o atributos adicionales.De esta forma, podríamos introducir en los tokens que viajan por la red un único claim con el nombre o identificador único del usuario, y mediante una transformación posterior añadirle atributos adicionales, como su nombre completo, roles de seguridad y otros que nos hagan falta a nivel de aplicación.
Publicado por José M. Aguilar a las 8:55 a. m.
Etiquetas: aspnetcore, aspnetcoremvc, autenticación, jwt, trucos
.NET / .NET Core
- Accessing Configuration in .NET Core Test Projects
Rick Strahl - Are you registering IHttpContextAccessor correctly?
Adam Storr - .NET Foundation February Update
.NET Foundation - How to use Null Conditional operators
Brij Bhushan Mishra - Quick Tips for Better C# Security
Justin Boyer - Use the awesomeness of Pattern Matching with C# 7.0
Brij Bhushan Mishra - Logging with output in Unit Tests in .Net Core 2.0
Alastair Crabtree
En las versiones "clásicas" de ASP.NET MVC era algo que se podía resolver con relativa facilidad gracias a proyectos como RazorGenerator o RazorEngine, pero, como en ASP.NET Core las cosas han cambiado bastante, he pensado que quizás sería interesante comentar por aquí cómo podríamos conseguirlo en este nuevo framework.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- New Free eBook: C# 7.2: What’s New Quick Start
Jason Roberts - Introducing AsyncUtilities
Bar Arnon - Addressing a Simple Yet Common C# Async/Await Misconception
Ben Hall - Four LINQ methods that are similar but have important differences
Andy Schwam - URL Matching in C#
Camilo Reyes - Validating JSON with JSON Schema
Peter Vogel - One user scenario to rule them all
Sergey Teplyakov - Aspect Oriented Programming (AOP) in .NET Core and C# using AutoFac and DynamicProxy
Carlos Blanco
Resulta que en mitad de una sesión de trabajo normal, de repente todo lo que tenía en pantalla comenzó a mostrarse en escala de grises. Para entendernos, lo que tenía por delante era más o menos lo siguiente, que no puedo negar que tenía su encanto:


.NET / .NET Core
-
Microsoft eBook gratuito en Español: “Microservicios .NET – Arquitectura para aplicaciones .NET contenerizadas”
César de la Torre - C# Varianza en delegados
Eduard Tomás - Announcing .NET Framework 4.7.2 Early Access build 3052!
Preeti Krishna - TransactionScope: A simple way to handle transactions in .NET
Brij Bhushan Mishra

Aunque de forma intuitiva muchas veces tenemos la respuesta (sobre todo cuando ésta es un rotundo “no” ;D), sin duda es interesante disponer de información objetiva que indique cómo de lejos estamos de conseguirlo y cuáles son los principales impedimentos.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- .NET Core 2.1 Roadmap
Rick Lander - Stacktrace improvements in .NET Core 2.1
Ben Adams - .NET Core Global Tools and Gotchas
Nate McMaster - Easy way to create a C# lambda expression from a string (with Roslyn)
Filip Woj - Sorting myself out, extreme edition
Marc Gravell - Zero Garbage Collector for .NET Core 2.1 and ASP.NET Core 2.1
Konrad Kokosa - Distributing Content and Showing a ReadMe file in a .NET Core Nuget Package
Rick Strahl - Resources for Learning about .NET Internals
Matt Warren - Accessing Tuples at Runtime using Reflection
Daniel Cabtree - Sunsetting StructureMap
Jeremy D. Miller
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- C#: Favorite Features through the Years
David Pine - Using the HttpClientInterception to Test Methods That Use a HttpClient
Bryan Hogan - Maximize the Performance of Your .NET Application With This Optimization Guide
Jared Nance - Building a Let’s Encrypt ACME V2 client
Ayende Rahien - Duck Typing And Async/Await
Bar Arnon - Be careful in using the C# null conditional operators in tests
Andrea Angella - ConcurrentDictionary Is Not Always Thread-Safe
Bar Arnon - Cómo mostrar los tests de forma legible en el Explorador de Tests de Visual Studio con xUnit (III) & Cómo ejecutar en xUnit un conjunto de tests sobre un mismo método de Test
Jorge Serrano - Task.CompletedTask and Task.Result Tips
K. Scott Allen - Uso de Caller Information en .NET
Jorge Serrano
Aunque a muchos nos pueda parecer raro, aún hay bastantes empresas y desarrolladores trabajando en Visual Basic .NET. En ocasiones sólo es para mantener código antiguo, pero otras veces (más de lo que puede parecer) incluso para crear nuevos sistemas aprovechando la experiencia de los desarrolladores y bases de código existente.
Si estáis en esta situación y vais a comenzar a trabajar con ASP.NET Core, mi recomendación siempre es que aprovechéis el momento de cambios para dar el salto a C#. Spoiler: no os arrepentiréis ;)Bien, respecto a la pregunta motivo del post, en teoría debería poderse, y de hecho ya difundimos por aquí hace tiempo la noticia oficial de que sería soportado, pero la verdad es que desde entonces no he vuelto a oir hablar mucho del tema, ni he visto ejemplos, ni movimiento en la comunidad ni nada parecido, lo cual me hizo dudar de la situación actual de este tema.
En este post vamos a hacer un tour rápido para ver, en la práctica, cómo está el soporte para VB.NET en la versión actual de ASP.NET Core (2.0).
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- C# 7 Series, Part 8: “in” Parameters
Mark Zhou - Writing IL code on Visual Studio
Gunnar Peipman - Fast Pixel Operations in .NET (With and Without unsafe)
Morzel - Introducing Jasper — Asynchronous Messaging for .Net
Jeremy Miller - Throttling with BlockingCollection
Derek Fowler - Cómo mostrar los tests de forma legible con xUnit, Parte I y Parte II & Cómo mostrar un nombre personalizado en un Test ejecutado con xUnit
Jorge Serrano - .NET Core January 2018 Update & .NET Framework January 2018 Security and Quality Rollup
Rich Lander - A very simple resource compiler for .NET *.resx files on non-Windows OS
Steffen Ploetz - Functions as Data: Functional Programming in C#
Ed Charberneau - 4 Common Datetime Mistakes in C# — And How to Avoid Them
Carlos Schults
Y ahora, como manda la tradición, dedicaremos este primer post del año a repasar cuáles son los contenidos que más han llamado la atención a los seguidores de Variable Not Found durante este 2017 que acabamos de cerrar.
Aparte de muchas alegrías y algún que otro disgusto, lo que tengo claro es que esta trayectoria me ha dado una visión bastante amplia de cómo funciona el mundo del desarrollo de software y las personas que trabajamos en él.

Por lo que he ido aprendiendo estos años, seguir estas reglas os llevará a conservar indefinidamente vuestros empleos o clientes, aumentaréis vuestro valor en el mercado, mejoraréis salarios y vuestro grado de felicidad y satisfacción personal crecerá hasta límites insospechados.
He de decir que, antes de compartirlos con todos vosotros, varias personas ya los han seguido y sus vidas profesionales han mejorado considerablemente. Por ejemplo, Juan M. R. trabajaba como programador junior en una conocida cárnica hace 6 meses y hoy dirige el equipo técnico en una startup en San Francisco. También, Nacho G. L. pudo firmar hace poco el contrato fijo con el que soñaba, incluso con un aumento de sueldo. Rafael P. G. era un programador del montón y ahora es un reputado project manager por el que se pelean las mejores empresas del mundo.
“Sin los grandes consejos de José María,Podéis ser los próximos en dar el salto, sólo depende de vosotros.
mi vida como desarrollador seguiría siendo un infierno”
– Ricardo M. C., 2017
Publicado por José M. Aguilar a las 12:10 a. m.
Etiquetas: buenas prácticas, inocentadas, recomendaciones
Para celebrar las fiestas, ahí va última colección de enlaces del año. Como de costumbre, espero que os resulten interesantes. :-)
.NET / .NET Core
- Hybridizer: High-Performance C# on GPUs
Florent Duguet & Régis Portalez - C# - All About Span: Exploring a New .NET Mainstay
Stephen Toub - Open Source .NET – 3 years later
Matt Warren - A look at the internals of ‘Tiered JIT Compilation’ in .NET Core
Matt Warren - Interpolated strings: advanced usages
Gérald Barré - Replace a Running Application with a New Version
Tim Patrick - Boost your productivity with Visual Studio’s DebuggerAttributes
Moaid Hathot - How Does Task in C# Affect Performance?
Jeremy Bytes - Controlling the Number of Outgoing Connections From HttpClient (.NET Core or Full Framework)
Pam Lahoud - Devirtualization in .NET Core
Jonathan Allen - 5 .NET Standard Features You Shouldn’t Miss
Ed Charberneau - How to avoid overlapping timer calls?
Gunnar Peipman - Norma ISO 8601, duration y .NET
Jorge Serrano
Simplemente quería aprovechar este rinconcillo para desearos a todos unas felices fiestas, compartidas con la gente que realmente merece la pena. Aprovecho también para deciros que he dejado encargado a sus Majestades de Oriente un grandioso 2018 para todos, así que no lo desaprovechéis ;D
¡Nos seguimos viendo por aquí!
Publicado con mucho espíritu navideño en: www.variablenotfound.com.
JSON Web Tokens, o JWT para los amigos, es sin duda una de las fórmulas más utilizadas para autenticación en servicios o APIs HTTP gracias a su sencillez de uso y a la seguridad que aportan en determinados escenarios frente a otras opciones como las populares cookies.
En este post vamos a ver cómo implementar funcionalidades básicas de generación de tokens JWT en ASP.NET Core MVC, y cómo asegurar nuestros APIs utilizándolos para autenticar a los usuarios.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- C# 7.1 – Specification: Inferred Tuple Element Names & Default Literals Expressions & Async Main Method
Jorge Serrano - Using C# dynamic Keyword To Replace Data Transfer Objects
Carl Layton - 5 More C# Extension Methods for the Stocking! (plus a bonus method for enums)
Jonathan Danylko - C# 7 Series, Part 7: Ref Returns
Mark Zhou - Deck The Halls With Strategy Pattern Implementations In C#: Basic To Advanced
James Hickey - C# 7.2 - In Parameter And Performance
Banketeshvar Narayan - Are lock and Monitor the same in C#?
Gunnar Peipman
O también se os habrá dado el caso de que necesitéis hacer cambios en un script y os da miedillo subirlo directamente a producción sin haberlo probado antes suficientemente en el entorno real. Esto es un tema especialmente peliagudo si estáis desarrollando una plataforma SaaS en la que cientos de clientes usen en sus páginas web una referencia a vuestro script y cualquier cambio en el mismo puede traer consecuencias graves para el servicio.
Por ejemplo, imaginad que prestamos un servicio similar a Google Analytics, y todos nuestros clientes tienen una referencia en sus páginas a nuestro archivo "analytics.js" para trackear sus visitas. ¿Cómo podríamos introducir cambios en dicho archivo de script para hacer pruebas en sitios donde nos interese, sin que afectara al resto de clientes ni a los visitantes de sus páginas?
A priori no parece haber una respuesta sencilla, pero sí que la hay. Sólo necesitamos Fiddler y tres minutos de nuestro tiempo para conseguirlo :)
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Accelerated 3D VR, sure, but impress me with a nice ASCII progress bar or spinner
Scott Hanselman - Elasticsearch, Kibana and Docker using .NET Standard 2
Juan G. Carmona - .NET Value Type (struct) as a DDD Value Object
Vladimir Khorikov - ORMs for .NET Core
Jonathan Allen - ASP.NET HttpContext in async/await patterns using the Task Parallel Library – Part 3
Alessandro Bigi - Deep dive to async Main
Gunnar Peipman - Who Says C# Interfaces Can’t Have Implementations?
Brant Burnett - .NET String Interning to Improve String Comparison Performance (C# examples)
Ben Hall - Optimizing memory usage
Frans Bouma - C# 7.0 – Specification – Samples
Jorge Serrano
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Writing smarter cross-platform .NET Core apps with the API Analyzer and Windows Compatibility Pack
Scott Hanselman - Where are the differences in execution speed of various method types come from (.NET)?
Jiří Činčura - In Parameters in C# 7.2 – Read-only References
Abhijit Jana - Knowing When to Reflect With Caller Info Attributes
Rion Williams - Listing Strongly Typed Enum Options in C#
Steve Smith - Dissecting the async methods in C#
Sergey Teplyakov - A short tale on two patterns that live in .NET
Eddy Vluggen - Working around the lack of dynamic DbProviderFactory loading in .NET Core
Rick Strahl - C# 8.0 Features: A Glimpse of the Future
Erik Dietrich

Podríamos decir que NDepend es un clásico en el mundo de las herramientas que nos ayudan a mejorar la calidad de nuestro software. Creado por Patrick Smacchia en 2004, pasó a ser comercial en 2007, y desde entonces ha ido mejorando con el objetivo de permitirnos analizar nuestros proyectos desde una perspectiva que difícilmente podríamos conseguir con otras herramientas.
Ya le echamos un vistazo por aquí hace muchos años, y tenía interés por ver cómo había evolucionado el producto y cómo se había adaptado a los cambios en plataformas y tecnologías que se han producido desde entonces, para lo que Patrick me ha brindado amablemente una licencia del producto.
Pero no contento con eso, y sabiendo que tenemos afición a regalar productos para desarrolladores de vez en cuando, también ha cedido una licencia de desarrollador, valorada en 399 Euros para sortear entre los lectores del blog :)
Nota: es importante aclarar que lo que vais a leer a continuación no ha sido filtrado ni condicionado en ningún momento por el equipo de NDepend.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- C# 7.0 – Specification: Out variables, Deconstruction, Tuples, Out variables Expression Bodied Members, Throw Expressions, Ref returns and Ref locals
Jorge Serrano (wow!) - C# 7.1, 7.2 and 8 - New and Upcoming Features
Damir Arh - Back to Basics – What is the difference between Ref and Out Keyword in C#?
Abhijit Jana - 5 C# Evolutions You May Not Know
Ahd Ben Kheder - .NET Framework setup verification tool, cleanup tool and detection sample code now support .NET Framework 4.7.1
Aaron Stebner - C# 7 Series, Part 6: Read-only structs
Mark Zhou - Creating strongly typed xUnit theory test data with TheoryData
Andrew Lock - Trying out new .NET Core Alpine Docker Images
Scott Hanselman - Analyzing performance of asynchronous .NET code with dotTrace
Alexey Totin - How to write Unit Tests for a .NET Core Application
Dhananjay Kumar - Swashbuckle Swagger UI– Prompt for Access Token (.net Core)
Chris D.
Pero dado que siempre hablábamos de Visual Studio, es lógico preguntarse si posible conseguir exactamente lo mismo desde la línea de comandos o, llevándolo al extremo, en entornos no Windows como Linux o Mac, así que en este post veremos cómo conseguirlo.
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Microservices and Docker containers: Architecture, Patterns and Development guidance (Updated for .NET Core 2.0)
César de la Torre - Announcing the Windows Compatibility Pack for .NET Core
Immo Landwerth - Introducing Nullable Reference Types in C#
Mads Torgersen - Welcome to C# 7.2 and Span
Mads Torgersen - .NET Framework November 2017 Security and Quality Rollup & .NET Core November 2017 Update
Rick Lander - Manage Project and Package References with .net CLI
Gary Woodfine - Announcing .NET 4.7.1 Tools for the Cloud
Jeffrey Fritz - A problem with extension methods
Patrick Smacchia - xUnit Roslyn analyzers
David Pine - Implementing a Text Templating Language and Engine for .NET
Alexandre Mutel - Creating a custom xUnit theory test DataAttribute to load data from JSON files
Andrew Lock - Did you know – You can check all the installed Common Language Runtime (CLR) Versions in your machine?
Abhijit Jana

.NET / .NET Core
- A DoS Attack against the C# Compiler
Matt Warren - Back to Basics – What is the difference between const and readonly in C#?
Abhijit Jana - How to Use Performance Counters with .NET Core: Current Solution, Alternatives, and the Future
Matt Watson - Creating parameterised tests in xUnit with [InlineData], [ClassData], and [MemberData]
Andrew Lock - Creating a Nuget Package - Step by Step
Matthew Proctor - Assert.AreEqual in MSTest – done right
Dror Helper - AutoMapper 6.2.0 Released
Jimmy Bogard

Tras seleccionar el tipo de elemento a crear, aparecerá un segundo cuadro de diálogo solicitándonos información sobre el mismo. Por ejemplo, en la siguiente captura de pantalla se muestra el diálogo de creación de vistas MVC, donde debemos introducir el nombre de la vista, la plantilla a utilizar, la clase del Modelo para vistas tipadas, etc:

Después de cumplimentar estos datos, se generará automáticamente el código fuente del elemento indicado. Hasta aquí bien, pero, ¿qué ocurre si ese código generado no se ajusta exactamente a nuestras necesidades? O preguntándolo de otra forma, ¿es posible modificar las plantillas de generación de código utilizadas en estos casos para adaptarlas a nuestras preferencias?
Pues sí, y vamos a ver cómo :)
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Welcome to C# 7.1
Mads Torgersen - Dissecting the tuples in C# 7
Sergey Teplyakov - Get All C# Classes Implementing an Interface
Gary Woodfine - Fixing the error “Program has more than one entry point defined” for console apps containing xUnit tests
Andrew Lock - Catching up with C# 7.1 and C# 7.2
Jonathan Allen - C# Script Runner for .NET Core 2.0!
Filip Woj - Modernize existing .NET apps with Windows Containers and Azure
César de la Torre
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- .NET Core 2.0 and ASP.NET 2.0 Core are Here
Rick Strahl - C# 8 – The Shape of the Things to Come
Nikola Živković - Mocking with FeatureToggle
Jason Roberts - Using operator overloads for concatenating file system paths in CSharp
Maarten Balliauw - .NET Core 2.1 Release: What To Expect in 2018
Ricardo Peres
Resulta que varias veces he publicado un proyecto ASP.NET Core y, tras finalizar y probar un poco la aplicación, he visto que me había dejado por detrás alguna chorradilla en una vista que tenía que corregir rápidamente. En lugar de volver a publicar el proyecto completo, cuando me ocurre esto suelo a retocar la vista y actualizar sólo ese archivo en el servidor, por ejemplo desde el menú contextual del archivo en Visual Studio:

Pero en este caso, una vez finalizó la subida del archivo al servidor, pulsé F5 en el navegador para comprobar que ya estaba todo correcto y… ¡vaya, todo seguía igual que antes! No pasa nada, pensé que no había publicado bien, por lo que volví a repetir el proceso y pocos segundos después pude comprobar que los cambios seguían sin ser aplicados en el servidor. ¿Qué podía estar ocurriendo?
Ah, claro, ¡el caché! La vista era retornada por una acción MVC decorada con el filtro
ResponseCache
, por lo que podría ser normal que continuara llegando al navegador la versión anterior. Eliminé caché, incluso probé desde otro navegador y ¡todo seguía igual que antes!Ya lo único que se me ocurría es que la publicación hubiera fallado por algún siniestro bug de Visual Studio que no dejara rastro en las trazas, así que decidí ignorar al intermediario. Fui directamente al servidor para editar manualmente el archivo de la vista y… maldición, ¡no la encuentro! :-/
¿Qué está ocurriendo aquí?
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET / .NET Core
- Announcing the .NET Framework 4.7.1
Preeti Krishna - DotNetAnywhere: An Alternative .NET Runtime
Matt Warren - The Ultimate .NET Experiment – open source project
Konrad Kokosa - Dissecting the pattern matching in C# 7
Sergey Teplyakov - Historia del lenguaje C#: pasado, presente y evolución
Erik Dietrich (traducido por CampusMVP) - Forgotten .NET Gem — StringDictionary
James M. Curran - .NET Standard Selector
Immo Landwerth - RyuJIT Just-in-Time Compiler Optimization Enhancements
Joseph Tremoulet - C# 7.2 New Features With Visual Studio 2017
Banketeshvar Narayan - .Net Core Dependency Injection
Jared Nance - An Elasticsearch Tutorial for .NET Developers
Ivan Cesar - Running tests with dotnet xunit using Cake
Andrew Lock - Create a .NET Core 2 application on Linux with Visual Studio Code
Benjamin Perkins - Lambdas and Local Functions
Andy Gocke - Free .NET Core eBook, including ASP.NET Core and EF Core
Andrew Lock
https://www.variablenotfound.com/2018/05/implementando-mas-facilmente-background.html
Y aunque es posible, ASP.NET Core proporciona otras fórmulas más apropiadas para conseguirlo: los hosted services. Mediante este mecanismo, podemos crear servicios que serán gestionados por el host, y que serán iniciados y finalizados automáticamente junto con la aplicación.