{"id":1300,"date":"2026-03-18T08:07:54","date_gmt":"2026-03-18T11:07:54","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1300"},"modified":"2026-03-24T12:20:55","modified_gmt":"2026-03-24T15:20:55","slug":"la-historia-de-net-framework-core-y-la-unificacion-en-net-5","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/","title":{"rendered":"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+"},"content":{"rendered":"\n<p>Si alguna vez te confundiste entre <strong>.NET Framework<\/strong>, <strong>.NET Core<\/strong> y simplemente <strong>.NET<\/strong>, no sos el \u00fanico. Microsoft tom\u00f3 decisiones de naming que generaron (y siguen generando) confusi\u00f3n, pero cada versi\u00f3n tiene una historia clara y razones de peso detr\u00e1s. Vamos por partes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f3db;&#xfe0f; .NET Framework: el pionero (2002\u20132019)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 era?<\/h3>\n\n\n\n<p><strong>.NET Framework<\/strong> lleg\u00f3 en 2002 como la respuesta de Microsoft a Java. Era un entorno de ejecuci\u00f3n administrado (managed runtime) con un compilador JIT, una biblioteca de clases enorme (BCL) y el concepto de CLR (Common Language Runtime). Corr\u00eda exclusivamente en Windows, y eso nunca cambi\u00f3.<\/p>\n\n\n\n<p>Versiones clave:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>1.0 (2002):<\/strong> El debut. C# como lenguaje estrella, ASP.NET Web Forms, ADO.NET.<\/li><li><strong>2.0 (2005):<\/strong> Generics, m\u00e9todos an\u00f3nimos, nullable types. Un salto enorme.<\/li><li><strong>3.0 (2006):<\/strong> WPF, WCF, WF (Windows Workflow Foundation), CardSpace.<\/li><li><strong>3.5 (2007):<\/strong> LINQ, Entity Framework (preview), extensi\u00f3n de C# 3.0.<\/li><li><strong>4.0 (2010):<\/strong> TPL (Task Parallel Library), dynamic, MEF, contratos de c\u00f3digo.<\/li><li><strong>4.5 \/ 4.6 \/ 4.7 (2012\u20132017):<\/strong> async\/await, mejoras de performance, soporte HTTP\/2.<\/li><li><strong>4.8 (2019):<\/strong> La \u00faltima versi\u00f3n. A\u00fan recibe parches de seguridad, pero no evoluciona.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 trajo de bueno?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Madurez y estabilidad en ecosistemas empresariales.<\/li><li>Integraci\u00f3n nativa con COM, Windows APIs, IIS.<\/li><li>Una BCL rid\u00edculamente completa para el a\u00f1o que era.<\/li><li>WPF para desktop y ASP.NET Web Forms \/ MVC para web.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 ten\u00eda de malo?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Solo Windows. Punto.<\/li><li>Instalado a nivel sistema operativo: actualizar pod\u00eda romper apps ya instaladas.<\/li><li>C\u00f3digo cerrado, sin contribuciones de la comunidad.<\/li><li>Performance mediocre comparado con alternativas modernas.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo .NET Framework 4.7 \u2014 async\/await<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">using System;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program\n{\n    static async Task Main(string[] args)\n    {\n        using var client = new HttpClient();\n        string result = await client.GetStringAsync(\"https:\/\/api.github.com\");\n        Console.WriteLine(result.Substring(0, 100));\n    }\n}<\/code><\/pre>\n\n\n\n<p>Perfecto en .NET Framework 4.5+, pero solo corre en Windows.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f680; .NET Core: la revoluci\u00f3n open source (2016\u20132020)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 naci\u00f3?<\/h3>\n\n\n\n<p>Para 2013, el mundo hab\u00eda cambiado. Linux dominaba los servidores, Docker empezaba a despegar, Node.js y Go demostraban que pod\u00edas tener performance sin sacrificar productividad. Microsoft, bajo la gesti\u00f3n de Satya Nadella, tom\u00f3 una decisi\u00f3n hist\u00f3rica: <strong>reescribir .NET desde cero, open source y multiplataforma<\/strong>.<\/p>\n\n\n\n<p>En 2016 lleg\u00f3 <strong>.NET Core 1.0<\/strong>. No era compatible con todo lo de Framework, pero era libre, r\u00e1pido y corr\u00edas en Windows, Linux y macOS.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versiones clave:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>1.0 \/ 1.1 (2016):<\/strong> MVP. ASP.NET Core, b\u00e1sico pero multiplataforma.<\/li><li><strong>2.0 \/ 2.1 (2017\u20132018):<\/strong> .NET Standard 2.0 para compartir c\u00f3digo entre Framework y Core. 2.1 fue LTS.<\/li><li><strong>2.2 (2018):<\/strong> Mejoras en routing y health checks en ASP.NET Core.<\/li><li><strong>3.0 (2019):<\/strong> Blazor Server, gRPC, Worker Services, WPF y WinForms en Windows.<\/li><li><strong>3.1 (2019):<\/strong> LTS. La \u00faltima versi\u00f3n de \u00abCore\u00bb. Soporte extendido hasta diciembre 2022.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 trajo?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>&#x2705; Multiplataforma real: Windows, Linux, macOS.<\/li><li>&#x2705; Open source: c\u00f3digo en GitHub, PRs de la comunidad.<\/li><li>&#x2705; Side-by-side: pod\u00e9s tener m\u00faltiples versiones instaladas sin conflictos.<\/li><li>&#x2705; Performance: Kestrel como servidor web integrado, mucho m\u00e1s r\u00e1pido que IIS.<\/li><li>&#x2705; Contenedores: im\u00e1genes Docker oficiales de Microsoft.<\/li><li>&#x2705; Dise\u00f1o modular: instal\u00e1s solo lo que necesit\u00e1s (NuGet packages).<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 sacrific\u00f3?<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>&#x274c; Web Forms (nunca lleg\u00f3 a Core).<\/li><li>&#x274c; WCF completo (solo cliente, no servidor).<\/li><li>&#x274c; Algunas APIs de Windows-only que no ten\u00eda sentido portar.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo: ASP.NET Core minimal API (3.1+)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">\/\/ Startup.cs en .NET Core 3.1\npublic class Startup\n{\n    public void ConfigureServices(IServiceCollection services)\n    {\n        services.AddControllers();\n    }\n\n    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\n    {\n        app.UseRouting();\n        app.UseEndpoints(endpoints =>\n        {\n            endpoints.MapControllers();\n        });\n    }\n}\n\n\/\/ HomeController.cs\n[ApiController]\n[Route(\"[controller]\")]\npublic class HomeController : ControllerBase\n{\n    [HttpGet]\n    public string Get() => \"Hola desde .NET Core 3.1\";\n}<\/code><\/pre>\n\n\n\n<p>Este mismo c\u00f3digo corre id\u00e9ntico en Windows, Ubuntu o un contenedor Docker.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">El factor Docker<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"dockerfile\" class=\"language-dockerfile\">FROM mcr.microsoft.com\/dotnet\/aspnet:3.1\nWORKDIR \/app\nCOPY . .\nENTRYPOINT [\"dotnet\", \"MiApp.dll\"]<\/code><\/pre>\n\n\n\n<p>Imposible en .NET Framework. Natural en .NET Core.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f52e; .NET 5 en adelante: la unificaci\u00f3n (2020\u2013presente)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 no fue .NET Core 4.0?<\/h3>\n\n\n\n<p>Buena pregunta. .NET Core 4.x hubiera generado <strong>confusi\u00f3n directa<\/strong> con .NET Framework 4.x que segu\u00eda vivo. Microsoft eligi\u00f3 saltar a <strong>.NET 5<\/strong> para marcar un punto de quiebre claro: esto ya no es ni Framework ni Core. Es simplemente <em>.NET<\/em>.<\/p>\n\n\n\n<p>La promesa: <strong>una sola plataforma para todo<\/strong>. Web, desktop, mobile (via MAUI), cloud, IoT, ML.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versiones desde .NET 5:<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>.NET 5 (2020):<\/strong> Unificaci\u00f3n. Records, pattern matching mejorado, source generators.<\/li><li><strong>.NET 6 (2021) \u2014 LTS:<\/strong> Minimal APIs, MAUI preview, Hot Reload, DateOnly\/TimeOnly.<\/li><li><strong>.NET 7 (2022):<\/strong> Rate limiting, mejoras en Regex source gen, Native AOT.<\/li><li><strong>.NET 8 (2023) \u2014 LTS:<\/strong> Blazor unificado, Primary constructors en C# 12, Native AOT estable.<\/li><li><strong>.NET 9 (2024):<\/strong> Performance extrema (LINQ, colecciones), mejoras en AI integrations.<\/li><li><strong>.NET 10 (2025 \u2014 LTS):<\/strong> En desarrollo activo al momento de escribir esto.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Lo que cambi\u00f3 con .NET 5+<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Minimal APIs (.NET 6)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">\/\/ Program.cs \u2014 .NET 6+\nvar builder = WebApplication.CreateBuilder(args);\nvar app = builder.Build();\n\napp.MapGet(\"\/\", () => \"Hola desde .NET 6!\");\napp.MapGet(\"\/productos\/{id}\", (int id) => new { Id = id, Nombre = \"Laptop\" });\n\napp.Run();<\/code><\/pre>\n\n\n\n<p>Menos boilerplate, mismo poder. No m\u00e1s <code>Startup.cs<\/code> obligatorio.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Records (C# 9 \/ .NET 5)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">\/\/ Antes: clase con todo el boilerplate\npublic class Producto\n{\n    public int Id { get; init; }\n    public string Nombre { get; init; }\n    \n    public Producto(int id, string nombre) { Id = id; Nombre = nombre; }\n    public override bool Equals(object? obj) => \/* ... mucho c\u00f3digo ... *\/\n}\n\n\/\/ Con records: una sola l\u00ednea\npublic record Producto(int Id, string Nombre);\n\n\/\/ Uso\nvar p1 = new Producto(1, \"Laptop\");\nvar p2 = p1 with { Nombre = \"Monitor\" }; \/\/ copia inmutable con cambio\nConsole.WriteLine(p1 == p2); \/\/ false (compara por valor)<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Native AOT (.NET 7\/8)<\/h4>\n\n\n\n<p>Compilaci\u00f3n a binario nativo sin necesidad del runtime. Arranque ultra-r\u00e1pido, ideal para lambdas y microservicios.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml\">&lt;!-- En el .csproj --&gt;\n&lt;PropertyGroup&gt;\n  &lt;PublishAot&gt;true&lt;\/PublishAot&gt;\n&lt;\/PropertyGroup&gt;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">dotnet publish -r linux-x64 -c Release<\/code><\/pre>\n\n\n\n<p>El resultado: un \u00fanico ejecutable de ~10MB que arranca en milisegundos, sin JIT, sin runtime instalado.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f4ca; Comparativa directa<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Caracter\u00edstica<\/th><th>.NET Framework<\/th><th>.NET Core<\/th><th>.NET 5+<\/th><\/tr><\/thead><tbody><tr><td>Plataformas<\/td><td>Solo Windows<\/td><td>Win \/ Linux \/ macOS<\/td><td>Win \/ Linux \/ macOS<\/td><\/tr><tr><td>Open Source<\/td><td>&#x274c;<\/td><td>&#x2705;<\/td><td>&#x2705;<\/td><\/tr><tr><td>Side-by-side<\/td><td>&#x274c;<\/td><td>&#x2705;<\/td><td>&#x2705;<\/td><\/tr><tr><td>Contenedores<\/td><td>Limitado<\/td><td>&#x2705; Nativo<\/td><td>&#x2705; Nativo<\/td><\/tr><tr><td>Web Forms<\/td><td>&#x2705;<\/td><td>&#x274c;<\/td><td>&#x274c;<\/td><\/tr><tr><td>WPF \/ WinForms<\/td><td>&#x2705;<\/td><td>Solo Windows (3.0+)<\/td><td>Solo Windows<\/td><\/tr><tr><td>WCF Server<\/td><td>&#x2705;<\/td><td>&#x274c;<\/td><td>&#x274c; (CoreWCF community)<\/td><\/tr><tr><td>Blazor<\/td><td>&#x274c;<\/td><td>Server (3.0)<\/td><td>&#x2705; Server + WASM + Hybrid<\/td><\/tr><tr><td>MAUI \/ Xamarin<\/td><td>&#x274c;<\/td><td>&#x274c;<\/td><td>&#x2705; (.NET 6+)<\/td><\/tr><tr><td>Performance<\/td><td>Buena<\/td><td>Excelente<\/td><td>Excepcional<\/td><\/tr><tr><td>Ciclo de vida<\/td><td>Mantenimiento<\/td><td>EOL (3.1 = dic 2022)<\/td><td>Activo (LTS cada 2 a\u00f1os)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f914; \u00bfY .NET Standard?<\/h2>\n\n\n\n<p>En el medio de la transici\u00f3n existi\u00f3 <strong>.NET Standard<\/strong>: una especificaci\u00f3n de APIs que garantizaba que una biblioteca que la targeteara funcionara tanto en Framework como en Core. No era una implementaci\u00f3n, era un contrato.<\/p>\n\n\n\n<p>Con la unificaci\u00f3n en .NET 5+, .NET Standard perdi\u00f3 relevancia. Si tu biblioteca debe soportar <strong>Framework 4.x tambi\u00e9n<\/strong>, us\u00e1 .NET Standard 2.0. Si solo us\u00e1s .NET moderno, targetear directamente net6.0\/net8.0 es lo correcto.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml\">&lt;!-- .csproj de una librer\u00eda compatible con todo --&gt;\n&lt;PropertyGroup&gt;\n  &lt;TargetFrameworks&gt;netstandard2.0;net8.0&lt;\/TargetFrameworks&gt;\n&lt;\/PropertyGroup&gt;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">&#x1f6e0;&#xfe0f; \u00bfQu\u00e9 usar hoy?<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Proyecto nuevo:<\/strong> <code>net9.0<\/code> o <code>net8.0<\/code> (LTS). Sin dudas.<\/li><li><strong>Mantener sistema legacy en Framework:<\/strong> Segu\u00ed en Framework, actualiz\u00e1 gradualmente a .NET 8+.<\/li><li><strong>Migraci\u00f3n:<\/strong> Us\u00e1 el <a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/core\/porting\/upgrade-assistant-overview\">Upgrade Assistant<\/a> de Microsoft.<\/li><li><strong>Librer\u00eda que deba correr en ambos mundos:<\/strong> .NET Standard 2.0 + multi-target.<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>La historia de .NET es la historia de una plataforma que supo reinventarse. De los monolitos Windows-only a microservicios nativos en Linux. De c\u00f3digo cerrado a uno de los proyectos open source m\u00e1s activos de GitHub. De performance \u00absuficiente\u00bb a estar consistentemente entre los frameworks m\u00e1s r\u00e1pidos del mundo seg\u00fan los benchmarks de <a href=\"https:\/\/www.techempower.com\/benchmarks\/\">TechEmpower<\/a>.<\/p>\n\n\n\n<p>La confusi\u00f3n de nombres fue el precio de una transici\u00f3n honesta: Microsoft no muri\u00f3 .NET Framework de un d\u00eda para el otro, lo mantuvo vivo mientras constru\u00eda algo mejor. Y cuando estuvo listo, lo llam\u00f3 simplemente <em>.NET<\/em>.<\/p>\n\n\n\n<p>Bienvenido al futuro del ecosistema.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si alguna vez te confundiste entre .NET Framework, .NET Core y simplemente .NET, no sos el \u00fanico. Microsoft tom\u00f3 decisiones de naming que generaron (y siguen generando) confusi\u00f3n, pero cada&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[38,348,346,347,18,203,207,226],"class_list":["post-1300","post","type-post","status-publish","format-standard","hentry","category-blog","tag-net","tag-net-10","tag-net-8","tag-net-9","tag-dotnet","tag-net5","tag-net6","tag-net8"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+ &#183; devops Mauro Bernal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+ &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"Si alguna vez te confundiste entre .NET Framework, .NET Core y simplemente .NET, no sos el \u00fanico. Microsoft tom\u00f3 decisiones de naming que generaron (y siguen generando) confusi\u00f3n, pero cada...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-18T11:07:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-24T15:20:55+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+\",\"datePublished\":\"2026-03-18T11:07:54+00:00\",\"dateModified\":\"2026-03-24T15:20:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/\"},\"wordCount\":1049,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\".NET\",\".NET 10\",\".NET 8\",\".NET 9\",\"dotnet\",\"net5\",\"net6\",\"net8\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/\",\"name\":\"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+ &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-18T11:07:54+00:00\",\"dateModified\":\"2026-03-24T15:20:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+ &#183; devops Mauro Bernal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/","og_locale":"es_ES","og_type":"article","og_title":"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+ &#183; devops Mauro Bernal","og_description":"Si alguna vez te confundiste entre .NET Framework, .NET Core y simplemente .NET, no sos el \u00fanico. Microsoft tom\u00f3 decisiones de naming que generaron (y siguen generando) confusi\u00f3n, pero cada...","og_url":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-18T11:07:54+00:00","article_modified_time":"2026-03-24T15:20:55+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+","datePublished":"2026-03-18T11:07:54+00:00","dateModified":"2026-03-24T15:20:55+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/"},"wordCount":1049,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":[".NET",".NET 10",".NET 8",".NET 9","dotnet","net5","net6","net8"],"articleSection":["Blog"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/","url":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/","name":"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+ &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-18T11:07:54+00:00","dateModified":"2026-03-24T15:20:55+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/la-historia-de-net-framework-core-y-la-unificacion-en-net-5\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"La historia de .NET: Framework, Core y la unificaci\u00f3n en .NET 5+"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1300","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1300"}],"version-history":[{"count":2,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1300\/revisions"}],"predecessor-version":[{"id":1302,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1300\/revisions\/1302"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1300"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1300"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1300"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}