lunes, 22 de mayo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – Microsoft Build 2017, .NET Core 2.0 preview 1, For the King
Bertrand Le Roy - .NET Framework May 2017 Preview of Quality Rollup
Rich Lander - Qué es la plataforma .NET y cuáles son sus principales partes
CampusMVP - Adding a new Bytecode Instruction to the CLR
Matt Warren - BUILD 2017 Conference Rollup for .NET Developers
Scott Hanselman - Group Your Constants and Enums
Steve Smith - To box or not to Box? That is the question!
Sergey Teplyakov - Upgrading to .NET Core 2.0 Preview
Rick Strahl - Access to modified closure in Resharper/C#
Alex Lazarev - .NET Standard 2.0 is out and it’s impressive!!!!
Talking Dotnet - Hunting vulnerable NuGets in .NET Core
John Korsnes - .NET Core is Probably Fine
Aaron Stannard - How to keep up to date as a C# developer
Jakub Chodounsky - Covariance, Contravariance and Invariance in C#
Rashedul Hossain Khan - The meaning of 'null'
Christian Neumanns - Image recognition with C# and Emgu libraries
Emiliano Musso
Publicado por José M. Aguilar a las 8:55 a. m.
Nadie ha comentado la entrada, ¿quieres ser el primero?
Etiquetas: enlaces
martes, 16 de mayo de 2017
A la hora de iniciar un nuevo proyecto ASP.NET Core, una de las primeras decisiones que debemos tomar es si el target de éste será .NET Core o .NET Framework.
Muchas veces esto dependerá de los requisitos y el entorno del proyecto; por ejemplo, si nos interesa la capacidad para ejecutarlo o desarrollarlo sobre entornos Linux o Mac, nos tendremos que decantar por .NET Core, pues el framework completo sólo está disponible para Windows. También podemos encontrarnos con que necesitamos (re)utilizar componentes o bibliotecas que aún no han sido portadas a .NET Core, por lo que en este caso el target será .NET Framework (bueno, esto cambiará bastante con la llegada de Net Standard 2.0, pero de momento es lo que hay).
En cualquier caso, la decisión la tomamos justo en el momento de crear el proyecto en Visual Studio, al seleccionar la plantilla que usaremos como base:
Sin embargo, conforme el proyecto avanza, puede que esta decisión que tomamos tan al principio no sea del todo válida: quizás en su momento elegimos .NET Core, pero ahora debemos cambiar a .NET Framework. O al contrario, porque ahora necesitamos que nuestra aplicación sea multiplataforma. O tal vez necesitemos las dos cosas al mismo tiempo por si acaso…
Nota: aunque aún pululan por ahí aplicaciones creadas con versiones preliminares del SDK, basadas en el difunto project.json, aquí utilizaremos la versión 1.0 del SDK, que ya utiliza el nuevo .csproj. Si todavía no has migrado, ya estás tardando ;)
Muchas veces esto dependerá de los requisitos y el entorno del proyecto; por ejemplo, si nos interesa la capacidad para ejecutarlo o desarrollarlo sobre entornos Linux o Mac, nos tendremos que decantar por .NET Core, pues el framework completo sólo está disponible para Windows. También podemos encontrarnos con que necesitamos (re)utilizar componentes o bibliotecas que aún no han sido portadas a .NET Core, por lo que en este caso el target será .NET Framework (bueno, esto cambiará bastante con la llegada de Net Standard 2.0, pero de momento es lo que hay).
En cualquier caso, la decisión la tomamos justo en el momento de crear el proyecto en Visual Studio, al seleccionar la plantilla que usaremos como base:
Sin embargo, conforme el proyecto avanza, puede que esta decisión que tomamos tan al principio no sea del todo válida: quizás en su momento elegimos .NET Core, pero ahora debemos cambiar a .NET Framework. O al contrario, porque ahora necesitamos que nuestra aplicación sea multiplataforma. O tal vez necesitemos las dos cosas al mismo tiempo por si acaso…
Nota: aunque aún pululan por ahí aplicaciones creadas con versiones preliminares del SDK, basadas en el difunto project.json, aquí utilizaremos la versión 1.0 del SDK, que ya utiliza el nuevo .csproj. Si todavía no has migrado, ya estás tardando ;)
lunes, 15 de mayo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – Microsoft Build 2017, .NET Core 2.0 status, Happy birthday .NET with Eilon Lipton, On .NET with Alfonso García-Caro on Fable, Stanford CoreNLP
Bertrand Le Roy - Managing dotnet Core 2.0 and dotnet Core 1.x versioned SDKs on the same machine
Scott Hanselman - Announcing .NET Core 2.0 Preview 1
Rick Lander - The .NET Core 2.0 Preview 1, version numbers and global.json
Andrew Lock - .NET Framework May 2017 Monthly Rollup
Rick Lander - .NET Core May 2017 Update
Lee Coward - Garbage collection and variable lifetime tracking
Sergey Teplyakov - Arrays and the CLR - a Very Special Relationship
Matt Warren - How we Added Auto-Retries to our C# API Client
Roger Jin - Garbage collection in C#
Jakub Chodounský - Creating nuget packages in .NET Core
Michal Dymel - ¿Qué son los filtros de excepciones en el lenguaje C#?
José Manuel Alarcón
miércoles, 10 de mayo de 2017
Desde luego, conforme me voy haciendo más viejo, más rápido pasan los años, aunque probablemente esta sensación se deba también a que la fiesta de celebración del décimo aniversario se alargó varios meses y parece que fue ayer. Pero bueno, el caso es que aquí estamos, celebrando una vez más el cumpleaños de este blog :)
Once años dan para mucho, la verdad. Superamos ya las novecientas cincuenta publicaciones, más de 2.300 comentarios y 2,7 millones de páginas vistas según Blogger, cifras que van mucho más allá de lo que habría firmado sin dudarlo aquél mayo de 2006 cuando empezó este viaje.
Un viaje que no tiene destino ni fecha de finalización: el único objetivo es disfrutar del camino, que os puedo asegurar que lo estoy haciendo, y echar una manita a los compañeros de profesión y afición que anden buscando información o soluciones a problemas con las que yo me haya topado antes. ¿Hay algo más gratificante que esto?
Once años dan para mucho, la verdad. Superamos ya las novecientas cincuenta publicaciones, más de 2.300 comentarios y 2,7 millones de páginas vistas según Blogger, cifras que van mucho más allá de lo que habría firmado sin dudarlo aquél mayo de 2006 cuando empezó este viaje.
Un viaje que no tiene destino ni fecha de finalización: el único objetivo es disfrutar del camino, que os puedo asegurar que lo estoy haciendo, y echar una manita a los compañeros de profesión y afición que anden buscando información o soluciones a problemas con las que yo me haya topado antes. ¿Hay algo más gratificante que esto?
martes, 9 de mayo de 2017
Seguimos revisando las novedades que nos llegan de la mano de C# 7, la nueva versión del lenguaje aparecida junto a Visual Studio 2017.
En un post anterior ya profundizamos un poco en las funciones locales, y hoy veremos en qué consisten las nuevas inline out variables, una característica muy útil que nos ahorrará escribir código en escenarios en los que siempre hemos tenido la sensación de que C# podía hacer algo más por nosotros.
En un post anterior ya profundizamos un poco en las funciones locales, y hoy veremos en qué consisten las nuevas inline out variables, una característica muy útil que nos ahorrará escribir código en escenarios en los que siempre hemos tenido la sensación de que C# podía hacer algo más por nosotros.
lunes, 8 de mayo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – .NET Architecture, .NET Core 2.0 status, Happy Birthday .NET with Matt Gertz, On .NET with Don Schenck on Red Hat, Fable
Bertrand Le Roy - C# 7.0 and Beyond with Mads Torgersen
Jakub Chodounsky - .NET Futures: Asynchronous Streams
Jonathan Allen - JSON.NET not just for serialization
Simon Timms - The curious case of async, await, and IDisposable
Bill Wagner - Using StringBuilder Length Property
gggustafson - Five Surprises after using .NET Core for six months
George Stockers - Announcing the .NET Framework 4.7 General Availability
Rich Lander
miércoles, 3 de mayo de 2017
Los que llevamos tiempo trabajando con paquetes NuGet, sabemos que la desinstalación de paquetes requería tradicionalmente entrar en la consola del gestor de paquetes, o bien usar el interfaz gráfico de este gestor de paquetes en Visual Studio, lo que era bastante lento y farragoso.
Y claro, como los humanos somos animales de costumbre, lo normal es que cuando damos el salto a ASP.NET Core continuemos haciéndolo de la misma forma, sin pararnos un segundo a replantearnos si hay mejores formas… lo que me recuerda a esta famosa imagen que anda por Internet desde hace bastante tiempo:
(Fuente: Ni idea)
Y claro, como los humanos somos animales de costumbre, lo normal es que cuando damos el salto a ASP.NET Core continuemos haciéndolo de la misma forma, sin pararnos un segundo a replantearnos si hay mejores formas… lo que me recuerda a esta famosa imagen que anda por Internet desde hace bastante tiempo:
(Fuente: Ni idea)
martes, 2 de mayo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – Happy Birthday .NET with Chris Sells, free ASP.NET Core book, We are the Dwarves
Bertrand Le Roy - Contributing to .NET for Dummies
Rion Williams - TDDing into a Fibonacci Sequence in C# & Implementing a Fibonacci Sequence with Value Tuples in C# 7
Jeremy Clark - Spans and ref part 2 : spans
Marc Gravell - Common Multithreading Mistakes in C# - IV: Everything Else
Ben Bowen - Adding a Tool to a .NET Core Build
Samuel Cragg - C# Futures: Read-Only Local Variables & Relaxed Overrides
Jonathan Allen - Making string validation faster by not using a regular expression. A story
Maarten Balliauw - Surprise! Creating an instance of an open generic type
Jon Skeet - Arreglar el error de que falta un ensamblado en el GAC en una aplicación ClickOnce en una aplicación .NET
José Manuel Alarcón - Provide opt-out mechanism for new functionality using AppContext in .NET Core
Hisham Bin Ateya - 3D FaceViewer
Yang Kok Wah - Void-Free Style in C# 7.0
Lukáš Lánský - Using AutoMapper in Domain Objects with DotNet Core
Gary Woodfine
martes, 25 de abril de 2017
Pues ya con la séptima versión de C# en la calle, aparecida de la mano del flamante Visual Studio 2017, va siendo hora de echar un vistacillo rápido a las principales novedades que encontraremos en esta nueva iteración de nuestro lenguaje favorito.
Y hoy vamos a comenzar con las funciones locales, una nueva capacidad que nos permitirá crear funciones locales a un ámbito, y que no serán visibles desde fuera de éste. Por ejemplo, podemos crear funciones en el interior de métodos, constructores, getters o setters, etc., pero éstas sólo serán visibles desde el interior del miembro en el que han sido declaradas.
Puede ser útil en determinados escenarios, puesto que evitan la introducción de "ruido" en las clases cuando determinado código sólo se va a consumir en el interior de un método, y al mismo tiempo pueden contribuir a mejorar la legibilidad y robustez del código.
Y hoy vamos a comenzar con las funciones locales, una nueva capacidad que nos permitirá crear funciones locales a un ámbito, y que no serán visibles desde fuera de éste. Por ejemplo, podemos crear funciones en el interior de métodos, constructores, getters o setters, etc., pero éstas sólo serán visibles desde el interior del miembro en el que han sido declaradas.
Puede ser útil en determinados escenarios, puesto que evitan la introducción de "ruido" en las clases cuando determinado código sólo se va a consumir en el interior de un método, y al mismo tiempo pueden contribuir a mejorar la legibilidad y robustez del código.
lunes, 24 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – Happy birthday .NET with Robin Cole, TinyORM, 911 Operator
Bertrand Le Roy - Covariant and Contravariant Casting is 3x Slower than Dynamic
Daniel Cabtree - Spans and ref part 1 : ref
Marc Gravell - A tricky bit of code
Ayende Rahien - A C# developers guide to F#
Connel Hooley - Exploring Tuples as a Library Author
Marc Gravell - .NET Code Quality 3rd Party Tools – Using NDepend with .Net Core
Daniel Jimenez Garcia - What is an Unhandled Exception, and How to Catch All C# Exceptions
Matt Watson - Value Tuples in C# 7: Please Tell Me I'm Doing This Wrong
Jeremy Bytes - Emojis and String.Length
Spencer Schneidenbach - C# Tuples: New C# 7 language feature
Matthew D. Groves - C# Futures: Nullable Reference Types
Jonathan Allen - How to Generate C# Random Numbers, Pseudo vs Secure Random Numbers
Matt Watson
martes, 18 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – .NET Framework 4.7, reference documentation, On .NET on modular ASP.NET, Happy birthday .NET with Immo Landwerth, JustAssembly
Bertrand Le Roy - Casting to IEnumerable<T> is Two Orders of Magnitude Slower
Daniel Cabtree - MailKit Officially Replaces .NET’s SmtpClient
Jonathan Allen - Creating and editing solution files with the .NET CLI
Andrew Lock - .NET Framework April 2017 Monthly Rollup
Rich Lander - .NET Futures: Multiple Inheritance
Jonathan Allen - Extending .NET CLI with custom tools - dotnet init initializes your NuGet package
Maarten Balliauw - Exceptionless - better logging for .NET & JavaScript
Michal Dymel - How to Create .NET Core Windows Services with Visual Studio 2017
Matt Watson - Performant text processing in C#
Christopher Wright - Method overload resolution in C# 6.0: an interesting bug story
Miłosz Piechocki
lunes, 10 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- Announcing the .NET Framework 4.7
Rich Lander - C# 7: Is Operator Patterns - You won't need 'as' as often & Micro-Benchmarking the Three Ways to Cast Safely
Daniel Cabtree - The week in .NET – On .NET on SonarLint and SonarQube, Happy birthday .NET with Dan Fernandez, nopCommerce, Steve Gordon
Bertrand Le Roy - Understand monads with LINQ
Miłosz Piechocki - Announcing a unified .NET reference experience on docs.microsoft.com
Jeff Sandquist - Black Art – LINQ expressions reuse
Asher Barak - Getting All the Results in LINQ with Methods
Peter Vogel - C# Exception Handling Best Practices
Matt Watson - C# 7.0: Tuple literals
Gunnar Peipman - No GCs for your allocations?
Maoni Stephens - A Quick and Dirty Extension Method to Get the Full Exception Details, Including Inner Exceptions
Barco Bertschi
martes, 4 de abril de 2017
Como sabemos, tradicionalmente los controladores MVC son clases cuyo nombre, según la convención, debe finalizar por “Controller”, como en
Sin embargo, desde las primeras versiones del framework la convención era modificable y podíamos adaptarla a nuestras necesidades aprovechando la extensibilidad del framework. De hecho, ya vimos hace muuucho mucho tiempo cómo hacerlo con la versión "clásica" de ASP.NET MVC, pero con la llegada de MVC Core las cosas han cambiado bastante.
En este post vamos a ver cómo modificar la convención de nombrado de controladores a algo más patrio: haremos que éstos puedan llamarse “ControladorDeXYZ”, como en
Pero antes de ponernos a ello, permitidme aclarar que cambiar las convenciones de nombrado de controladores no es muy conveniente porque, aparte de romper el principio de la mínima sorpresa, hay herramientas que podrían dejar de funcionar correctamente, pero sin duda hacerlo ofrece una magnífica ocasión para profundizar un poco en los entresijos del framework ;)
InvoiceController
o CustomerController
, y esta convención ha continuado en ASP.NET Core MVC, la edición más reciente del framework.Sin embargo, desde las primeras versiones del framework la convención era modificable y podíamos adaptarla a nuestras necesidades aprovechando la extensibilidad del framework. De hecho, ya vimos hace muuucho mucho tiempo cómo hacerlo con la versión "clásica" de ASP.NET MVC, pero con la llegada de MVC Core las cosas han cambiado bastante.
En este post vamos a ver cómo modificar la convención de nombrado de controladores a algo más patrio: haremos que éstos puedan llamarse “ControladorDeXYZ”, como en
ControladorDeFacturas
o ControladorDeClientes
. Es decir, si tenemos una clase como la siguiente, pretendemos que una petición hacia "/facturas/index" retorne el texto "ControladorDeFacturas.Index":public class ControladorDeFacturas : Controller { public IActionResult Index() { return Content("ControladorDeFacturas.Index"); } }Por supuesto, podríamos hacer que esta clase fuera un controlador simplemente aplicándole el atributo
[Controller]
, pero el objetivo de este post es aprender algo sobre el funcionamiento interno del framework, así que no vamos a quedarnos con esta solución tan sencilla ;)Pero antes de ponernos a ello, permitidme aclarar que cambiar las convenciones de nombrado de controladores no es muy conveniente porque, aparte de romper el principio de la mínima sorpresa, hay herramientas que podrían dejar de funcionar correctamente, pero sin duda hacerlo ofrece una magnífica ocasión para profundizar un poco en los entresijos del framework ;)
lunes, 3 de abril de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – On .NET with Sidharth Gupta on Tizen, Happy birthday .NET with Bertrand Le Roy, JSON.NET 10, Gunnar Peipman
Bertrand Le Roy - Linq performance improvements in .NET Core
Thomas Levesque - Deconstructors for non-tuple types in C# 7.0
Andrew Lock - Externalizing the HttpClient internals for fun & profit
Ayende Rahien - Open sourcing the MSTest Test Framework
Brian Harry - Modeling Battleship in C# - Introduction and Strategies & Components and Setup
Matthew P. Jones - Validate your AutoMapper mappings
Christiaan van Bergen
miércoles, 29 de marzo de 2017
Imagen original de Pixabay.
La historia consiste en abusar del amplio conjunto de caracteres soportado por UTF, sustituyendo el punto y coma de finalización de una línea de código (";") por el símbolo de interrogación griego (";", Unicode 037E), indistinguibles a simple vista, como en la siguiente línea:
public void HelloWorld() { Console.WriteLine("Hello world!"); }
lunes, 27 de marzo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- Using Domain Events within a .NET Core Microservice
Cesar de la Torre [MSFT] - Report from the battlefield #10 - fuck-up with AutoMapper
Michał Komorowski - The week in .NET – Happy birthday .NET with Mads Torgersen, Coypu
Bertrand Le Roy - C# 7.0: Out variables
Gunnar Peipman - DotNet Core Version Confusion
Julie Lerman - Working with dependencies in dotnet core
Anuraj P. - C# 7: Ref Returns, Ref Locals, and how to use them
Daniel Cabtree - MassTransit on RabbitMQ in ASP.NET Core
Simon Timms - A Hitchhikers Guide to the CoreCLR Source Code
Matt Warren - C# 7.0 - Tuples To The Extreme!
Rion Williams - C# value type boxing under the hood
Yi Zhang - C# 7: Dynamic types and Reflection cannot access Tuple fields by name
Daniel Cabtree - .NET Core 1.1 – How to publish a self-contained application
Luis Henrique Demetrio - Cómo localizar aplicaciones con C# y .NET
Jorge Durán
martes, 21 de marzo de 2017
Sabemos que mientras se renderiza una vista Razor, por defecto el framework MVC va almacenando el resultado en memoria, y sólo al finalizar es cuando comienza a retornarlo al lado cliente.
Por ejemplo, en la ejecución del siguiente código Razor, el usuario que solicitó la página no vería absolutamente nada durante 10 segundos, y de pronto le llegaría el resultado completo:
Por ejemplo, en la ejecución del siguiente código Razor, el usuario que solicitó la página no vería absolutamente nada durante 10 segundos, y de pronto le llegaría el resultado completo:
@using System.Threading.Tasks @{ Layout = null; } <html> <head> <title>Hello world!</title> </head> <body> <h1>Let's go</> <ul> @for (int i = 0; i < 10; i++) { await Task.Delay(1000); <li>@i</li> } </ul> </body> </html>Nota: Observad que para hacer el retardo, en lugar del típico Thread.Sleep() he utilizado
Task.Delay()
sólo para recordaros que en ASP.NET Core las vistas se renderizan/ejecutan en un contexto asíncrono y, por tanto, podemos utilizar en su interior llamadas con await
como hacemos en otros puntos del código.
lunes, 20 de marzo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – On .NET with Scott Hunter, On .NET with Matt Watson, MessagePack
Bertrand Le Roy - C# 7: Local Functions are Funcs too
Daniel Crabtree - Async Tip: why you should avoid void
Bnaya Eshet - Why to build your own CSV parser (or maybe not)
Tomas Takac - What is the NETStandard.Library metapackage?
Andrew Lock - Threading - Under the Hood
Marco-Hans Van Der Willik - Domain Events with Convention-Based Registration and Deferred Execution Support
Arthur Minduca - NET Framework - Immutable Collections
Hadi Brais - C# Local Functions
David Hayden - C# 7: Dissecting Local Functions to understand how they capture local variables
Daniel Crabtree - An alternative to ConfigureAwait(false) everywhere
Ben Williams - Turning off Telemetry Data in .NET Core
Michael Crump - Getting Started with Async / Await
Jon Goldberger - Dragging and Dropping Images and Files into the Web Browser Control
Rick Strahl
martes, 14 de marzo de 2017
El sistema de inyección de dependencias de ASP.NET Core es un potente mecanismo que viene de serie en el framework y, que de hecho, es uno de los principales pilares en los que se basa su funcionamiento.
Probablemente sabréis (y si no, podéis echar un vistazo a este post) que existen diversas fórmulas para añadir servicios o componentes al contenedor de dependencias, y una de ellas es la denominada "Scoped". Estos componentes quedan registrados asociados a un ciclo de vida específico (
O en otras palabras, dentro de la misma petición, la instancia del componente será compartida por todos los objetos que dependan de él. Además, al finalizar el proceso de la petición, el framework invocará su método
Pero este post no va de ver cómo registrar estos componentes o de cómo utilizarlos en nuestras aplicaciones, sino de responder una simple curiosidad: ¿quién se encarga de crear este scope cuando comienza una petición y de liberarlo cuando finaliza? Ya, sé que no tiene mucha utilidad práctica en el día a día, pero es una buena excusa para echar un vistazo y entender cómo funcionan las cosas por dentro ;)
Probablemente sabréis (y si no, podéis echar un vistazo a este post) que existen diversas fórmulas para añadir servicios o componentes al contenedor de dependencias, y una de ellas es la denominada "Scoped". Estos componentes quedan registrados asociados a un ciclo de vida específico (
ServiceLifetime.Scoped
), que indica que cada vez que haya que se solicite un objeto de este tipo se retornará la misma instancia dentro el ámbito actual, que normalmente coincide con el proceso de una petición específica. O en otras palabras, dentro de la misma petición, la instancia del componente será compartida por todos los objetos que dependan de él. Además, al finalizar el proceso de la petición, el framework invocará su método
Dispose()
(si existe, claro), permitiendo liberar los recursos que haya utilizado. Por ejemplo, suele ser una buena práctica emplear esta técnica para reutilizar un contexto de datos entre los servicios que participan en el proceso de una petición que accede a una base de datos, y asegurar su liberación final para no dejar conexiones abiertas.Pero este post no va de ver cómo registrar estos componentes o de cómo utilizarlos en nuestras aplicaciones, sino de responder una simple curiosidad: ¿quién se encarga de crear este scope cuando comienza una petición y de liberarlo cuando finaliza? Ya, sé que no tiene mucha utilidad práctica en el día a día, pero es una buena excusa para echar un vistazo y entender cómo funcionan las cosas por dentro ;)
<Disclaimer>Todo lo que comentaremos a continuación son detalles de la implementación actual del framework y son válidos en la versión 1.1 de ASP.NET Core, pero podrían cambiar en futuras versiones.</Disclaimer>
lunes, 13 de marzo de 2017
Aquí tenéis una nueva colección de enlaces interesantes, con especial atención al lanzamiento de Visual Studio 2017 :)
Por cierto, a partir de ahora voy a utilizar otro criterio de categorización, uniendo .NET y .NET Core en una única categoría, y haciendo lo mismo con ASP.NET y ASP.NET Core, porque cada vez iba teniendo menos sentido mantener esta separación.
Como siempre, espero que estos links os resulten interesantes. :-)
Publicado en Variable not found
Por cierto, a partir de ahora voy a utilizar otro criterio de categorización, uniendo .NET y .NET Core en una única categoría, y haciendo lo mismo con ASP.NET y ASP.NET Core, porque cada vez iba teniendo menos sentido mantener esta separación.
Como siempre, espero que estos links os resulten interesantes. :-)
.NET/.NET Core
- The week in .NET – Visual Studio 2017, .NET Core SDK, F# 4.1, On .NET with Phillip Carter, Happy Birthday from John Shewchuk, FNA, Pyre
Bertrand Le Roy - New Features in C# 7.0
Mads Torgersen - Announcing .NET Core Tools 1.0
Rich Lander - Announcing F# 4.1 and the Visual F# Tools for Visual Studio 2017
Visual F# Team - Day 11 - Exploring .NET Core with Visual Studio 2017 and the updated CLI Tools
Michael Crump - C# BAD PRACTICES: Learn how to make a good code by bad example – Part 4
Radosław Sadowski - Debugging the Web Browser Control with FireBug
Rick Strahl - Do I need to use ConfigureAwait(false) all the way?
Daniel Wertheim - It's about time you start using these C# 6 features
Carlos Schults - Some ways to tame magical strings in .NET and C#
Daniel Wertheim
ASP.NET/ASP.NET Core
- Content-Security-Policy in ASP.NET MVC
Thomas Ardal - Testing an ASP.NET Core MVC Protobuf API using HTTPClient and xUnit
Damien Bowden - ASP.NET Core Response Cache
Gunnar Peipman - What is the Microsoft.AspNetCore metapackage?
Andrew Lock - Environment Variables in ASP.NET Core
Derek Comartin - Exploring ASP.NET Core View Component
Brij Bhushan Mishra - Customising ASP.NET MVC Core Behaviour with an IApplicationModelConvention
Steve Gordon - Supporting both LTS and Current releases for ASP.NET Core
Andrew Lock - Convention-Based Application Startup in Multiple Environments
Hisham Bin Ateya - ASP.NET Core: How log filtering works
Gunnar Peipman - Making an event calendar for trucking or shipping with jQuery.Fullcalendar
Member 11883797
Azure / Cloud
- Sentiment Analysis using Microsoft’s Cognitive Services
Robin Osborne - Using the Cognitive Recommendations API in Bots and Websites
Martin Kearn - How to map a naked domain to an Azure App Service
Benjamin Perkins - DocumentDB In The Microsoft Azure
Kishore Chowdary - Announcing general availability for MySQL in-app
Mksunita - Convert PDF files to PNG Images using Azure Functions
Michael Washington - New Azure Storage JavaScript client library for browsers - Preview
Sercan Guler
Conceptos/Patrones/Buenas prácticas
- Hack that GUID
Mehdi Khalili - Mutability vs. Immutability: Valid objects
David Raab - Is Your Code Hard to Understand?
Erik Dietrich
Data
- Changes to EF Core With the RTM of VS2017 and Tools
Julie Lerman - BulkInsert with the Entity Framework
Måns Tånneryd
Html/Css/Javascript
- Learn about CSS Architecture: Atomic CSS
Tiffany Brown - Experiencias en el desarrollo de aplicaciones SPA corporativas
Ricardo Borillo - JavaScript Libraries In A TypeScript Application, Revisited
Nic Raboy - A Note on Angular 2 Bootstrap Multiple Apps
Dr. Song Li - Introduction to Web Audio API
Greg Hovanesyan - TypeScript 2.2: Dotted Properties and String Index Signatures
Marius Schulz - Announcing NuGet 4.0 RTM
Anand Gaurav - Unit Testing Self-Invoking JavaScript Functions
Bendix Saeltz - HTML5 Forms: Input Types (Part 1) Alexis Goldstein, Estelle Weyl & Louis Lazaris
- 13 Best JavaScript Data Grid Libraries
Dev Code Geek - TypeScript 2.2 Release Gives JavaScript Developers More of What They Expect
David Iffland - The Observer Pattern in Javascript
Alvie Amar - HTML canvas cheat sheet
Skilled.co - Getting JavaScript Properties for Object Maps by Index or Name
Rick Strahl - JSON's Crockford envisions a post-JavaScript world
Paul Krill - Do you know JavaScript? Are you sure? – Part Two
Sibeesh Venu
Visual Studio/Complementos/Herramientas
- Announcing Visual Studio 2017 General Availability… and more
Julia Liuson - Visual Studio 2017: Productivity, Performance, and Partners
John Montgomery - Optimize your productivity with .NET in Visual Studio 2017
Kasey Uhlenhuth - Redgate Data Tools in Visual Studio 2017
Jeff Gao - Run To Click Debugging in Visual Studio 2017
Kaycee Anderson - Live Unit Testing in Visual Studio 2017 Enterprise
Joe Morris & Manish Jayaswal - Reattach To Process in Visual Studio 2017
Kaycee Anderson - Announcing New ASP.NET Core and Web Development Features in Visual Studio 2017
Jeffrey T. Fritz - Conéctate a tu base de datos desde Visual Studio Code
Gisela Torres - Productivity Power Tools for Visual Studio 2017
Justin Clareburt - New Git Features in Visual Studio 2017
Kayla Ngan
Cross-platform
- Better Apps Faster with Visual Studio 2017 and Xamarin
Miguel de Icaza
Otros
- Programadores Políglotas y Proyectos Políglotas
Juan María Hernández - The Developer’s Edge: How To Become A Senior Developer
Andrei Neagoie - The mythical 10x programmer
Salvatore Sanfilippo (Antirez)
Publicado en Variable not found
martes, 7 de marzo de 2017
Desde hace algún tiempo estoy sufriendo un error que aparece justo en el momento de publicar un Webjob a Azure desde Visual Studio 2015.
Supongo que tendrá su motivo y se deberá a que estoy haciendo algo mal, pero bueno, el caso es que el error es un poco molesto porque impide la publicación del proyecto y, aunque no es difícil de solucionar, siempre me obliga a perder unos minutos en buscar una solución y aplicarla a mi proyecto.
El error que podemos ver en la ventana de resultados es el siguiente:
El problema está en el archivo de publicación (.pubxml) que estáis usando para publicar el WebJob, que por algún motivo ha perdido la cadena de conexión por defecto del proyecto. Podéis encontrarlo en la carpeta
¡Y eso es todo! En fin, este post trata sobre esos misterios que suceden de vez en cuando y nos hacen dedicar minutos de nuestro preciado tiempo a labores de fontanería. Espero que lo descrito aquí os sea de utilidad en algún momento... o no, porque significaría que no se os ha dado nunca este caso, y eso no es mala cosa ;)
Publicado en Variable not found.
Supongo que tendrá su motivo y se deberá a que estoy haciendo algo mal, pero bueno, el caso es que el error es un poco molesto porque impide la publicación del proyecto y, aunque no es difícil de solucionar, siempre me obliga a perder unos minutos en buscar una solución y aplicarla a mi proyecto.
El error que podemos ver en la ventana de resultados es el siguiente:
Error : El argumento 'DefaultConnection-Web.config Connection String' no puede ser NULL ni estar vacío.O su versión en inglés:
Error : The 'DefaultConnection-Web.config Connection String' argument cannot be null or empty.Así que, a modo de nota mental, y si acaso poder echar una mano a alguno que os encontréis ante el mismo escenario, comento dos soluciones que me han funcionado bien. Simplemente elegid la que más os convenza.
Solución 1
Es la más sencilla, y consiste únicamente en eliminar la carpeta/obj
del proyecto en cuestión. Tras ello, volvemos a publicar y funcionará todo bien.Solución 2
La segunda solución es algo más compleja, aunque tampoco para echarse las manos a la cabeza.El problema está en el archivo de publicación (.pubxml) que estáis usando para publicar el WebJob, que por algún motivo ha perdido la cadena de conexión por defecto del proyecto. Podéis encontrarlo en la carpeta
/Properties
y tiene una sección como la siguiente:<PublishDatabaseSettings> <Objects> <ObjectGroup Name="DefaultConnection" Order="1" Enabled="False" xmlns=""> <Destination Path="" /> <Object Type="DbCodeFirst"> <Source Path="DBMigration" DbContext="MyProject.MyDataContext, MyProject" MigrationConfiguration="MyProject.Migrations.Configuration, MyProject" Origin="Convention" /> </Object> </ObjectGroup> </Objects> </PublishDatabaseSettings>Lo único que hay que hacer para poder publicar sin problema es transformar la cuarta línea (el tag
<Destination>
) de la siguiente forma:<PublishDatabaseSettings> <Objects> <ObjectGroup Name="DefaultConnection" Order="1" Enabled="False" xmlns=""> <Destination Path="{deployment connection string}" /> <Object Type="DbCodeFirst"> <Source Path="DBMigration" DbContext="MyProject.MyDataContext, MyProject" MigrationConfiguration="MyProject.Migrations.Configuration, MyProject" Origin="Convention" /> </Object> </ObjectGroup> </Objects> </PublishDatabaseSettings>Es decir, establecemos el atributo
Path
del tag <Destination>
al valor "{deployment connection string}"
y lo tendremos solucionado.¡Y eso es todo! En fin, este post trata sobre esos misterios que suceden de vez en cuando y nos hacen dedicar minutos de nuestro preciado tiempo a labores de fontanería. Espero que lo descrito aquí os sea de utilidad en algún momento... o no, porque significaría que no se os ha dado nunca este caso, y eso no es mala cosa ;)
Publicado en Variable not found.
lunes, 6 de marzo de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET
- Top 10 C# projects errors found in 2016
Harry Lee - Could not load file or assembly or one of its dependencies.
Szymon Warda - WordPress Running on .NET
Benjamin Fistein - C#7 - Taking a second look at Tuples
Mark Downie - The week in .NET – On .NET with Eric Mellino, Happy Birthday from Scott Hunter, OzCode
Bertrand Le Roy
lunes, 27 de febrero de 2017
Ahí van los enlaces recopilados durante la semana pasada. Espero que os resulten interesantes. :-)
.NET
- The week in .NET – On .NET with Beth Massi, NeinLinq
Bertrand Le Roy - A common execution path optimization
Sergey Teplyakov - Easy text parsing in C# with Sprache
Thomas Levesque - Finding Nearest Colors using Euclidean Distance
Richard James Moss - What's new in FakeItEasy 3.0.0?
Thomas Levesque - xUnit 2.2 released
xUnit Team