{"id":1263,"date":"2026-03-12T08:57:56","date_gmt":"2026-03-12T11:57:56","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1263"},"modified":"2026-03-12T08:57:56","modified_gmt":"2026-03-12T11:57:56","slug":"migracion-dotnet8-dotnet10-guia-practica-produccion","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/","title":{"rendered":"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n"},"content":{"rendered":"\n<p class=\"intro-destacado\">Migrar un proyecto de .NET 8 a .NET 10 es el tipo de tarea que parece riesgosa pero en la pr\u00e1ctica es incremental y reversible. Lo hice en varios proyectos de producci\u00f3n sin downtime. El proceso siempre es el mismo: actualizar el TFM, correr los tests, adoptar las nuevas features de a poco.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 1: Actualizar el Target Framework<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\"># Verificar SDK instalado\ndotnet --list-sdks\n\n# Instalar .NET 10 SDK si no est\u00e1\n# Linux\/WSL:\nwget https:\/\/dot.net\/v1\/dotnet-install.sh -O dotnet-install.sh\nbash dotnet-install.sh --channel 10.0\n\n# En cada .csproj de la soluci\u00f3n:\n# &lt;TargetFramework&gt;net10.0&lt;\/TargetFramework&gt;\n\n# Para actualizar todos los .csproj de una soluci\u00f3n en Linux:\nfind . -name \"*.csproj\" -exec sed -i 's\/net8.0\/net10.0\/g; s\/net9.0\/net10.0\/g' {} \\;\n\n# Restaurar y compilar\ndotnet restore\ndotnet build<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 2: Actualizar paquetes NuGet<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\"># Ver paquetes desactualizados\ndotnet list package --outdated\n\n# Actualizar todos los paquetes de Microsoft.* a versiones compatibles con .NET 10\ndotnet add package Microsoft.AspNetCore.OpenApi\ndotnet add package Microsoft.Extensions.Http.Resilience\n\n# Paquetes que pueden desinstalarse en .NET 10:\n# - Swashbuckle.AspNetCore (reemplazado por OpenAPI nativo)\n# - Microsoft.AspNetCore.Mvc.NewtonsoftJson (System.Text.Json mejorado)\n\n# Remover Swashbuckle si usabas OpenAPI:\ndotnet remove package Swashbuckle.AspNetCore<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 3: Adoptar las nuevas features de C# 14<\/h2>\n\n\n\n<p>No hay que cambiar nada para que el proyecto compile. Las nuevas features son opt-in. La estrategia es adoptarlas gradualmente donde aporten m\u00e1s valor.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ Prioridad 1: field \u2014 m\u00e1ximo impacto con m\u00ednimo riesgo\n\/\/ Buscar propiedades con backing fields privados y migrarlas\n\n\/\/ Antes:\nprivate string _nombre = string.Empty;\npublic string Nombre\n{\n    get =&gt; _nombre;\n    set =&gt; _nombre = value?.Trim() ?? throw new ArgumentNullException();\n}\n\n\/\/ Despu\u00e9s:\npublic string Nombre\n{\n    get =&gt; field;\n    set =&gt; field = value?.Trim() ?? throw new ArgumentNullException();\n}\n\n\/\/ Prioridad 2: Primary Constructors en servicios con DI\n\/\/ Especialmente \u00fatil en proyectos con muchos servicios inyectados\n\n\/\/ Prioridad 3: params ReadOnlySpan en m\u00e9todos vari\u00e1dicos de uso frecuente\n\/\/ Buscar: params int[], params string[], params object[]\n\/\/ Reemplazar por: params ReadOnlySpan&lt;T&gt; donde sea posible\n\n\/\/ Prioridad 4: Lock para thread safety\n\/\/ Buscar: private readonly object _lockObj = new object();\n\/\/ Reemplazar por: private readonly Lock _lockObj = new();<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Paso 4: Migrar a OpenAPI nativo (si usabas Swashbuckle)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ Program.cs \u2014 reemplazar Swashbuckle por OpenAPI nativo\n\n\/\/ &#x274c; Antes con Swashbuckle:\n\/\/ builder.Services.AddSwaggerGen(c => { c.SwaggerDoc(\"v1\", ...); });\n\/\/ app.UseSwagger();\n\/\/ app.UseSwaggerUI();\n\n\/\/ &#x2705; .NET 9\/10 nativo:\nbuilder.Services.AddOpenApi(options =>\n{\n    options.AddDocumentTransformer((document, context, ct) =>\n    {\n        document.Info = new()\n        {\n            Title = \"Mi API\",\n            Version = \"v1\",\n            Description = \"API de gesti\u00f3n interna\"\n        };\n        return Task.CompletedTask;\n    });\n});\n\n\/\/ En el pipeline:\nif (app.Environment.IsDevelopment())\n{\n    app.MapOpenApi();\n    \/\/ Opcional: seguir usando Swagger UI solo para dev\n    app.UseSwaggerUI(options =>\n        options.SwaggerEndpoint(\"\/openapi\/v1.json\", \"Mi API v1\"));\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Checklist de migraci\u00f3n completo<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Paso<\/th><th>Acci\u00f3n<\/th><th>Impacto<\/th><\/tr><\/thead><tbody>\n<tr><td>1<\/td><td>Cambiar TFM a <code>net10.0<\/code> en todos los .csproj<\/td><td>Obligatorio<\/td><\/tr>\n<tr><td>2<\/td><td><code>dotnet restore &amp;&amp; dotnet build<\/code><\/td><td>Obligatorio<\/td><\/tr>\n<tr><td>3<\/td><td>Ejecutar suite de tests completa<\/td><td>Obligatorio<\/td><\/tr>\n<tr><td>4<\/td><td>Actualizar paquetes Microsoft.* a versi\u00f3n 10.x<\/td><td>Recomendado<\/td><\/tr>\n<tr><td>5<\/td><td>Adoptar <code>field<\/code> en propiedades con backing field<\/td><td>Gradual<\/td><\/tr>\n<tr><td>6<\/td><td>Primary Constructors en servicios con DI<\/td><td>Gradual<\/td><\/tr>\n<tr><td>7<\/td><td>Reemplazar <code>object _lock<\/code> por <code>Lock _lock<\/code><\/td><td>Gradual<\/td><\/tr>\n<tr><td>8<\/td><td>Migrar OpenAPI de Swashbuckle a nativo<\/td><td>Opcional<\/td><\/tr>\n<tr><td>9<\/td><td>Adoptar <code>params ReadOnlySpan&lt;T&gt;<\/code> en hot paths<\/td><td>Opcional<\/td><\/tr>\n<tr><td>10<\/td><td>Evaluar Native AOT para Workers\/APIs simples<\/td><td>Opcional avanzado<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Errores comunes y c\u00f3mo resolverlos<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ ERROR 1: Paquete no compatible con net10.0\n\/\/ \"Package X is not compatible with net10.0\"\n\/\/ Soluci\u00f3n: actualizar a la versi\u00f3n m\u00e1s reciente del paquete\n\/\/ Si no hay versi\u00f3n compatible, usar &lt;TargetFrameworks&gt;net8.0;net10.0&lt;\/TargetFrameworks&gt;\n\n\/\/ ERROR 2: Reflection en Native AOT\n\/\/ \"System.InvalidOperationException: Type ... is not reflection-enabled\"\n\/\/ Soluci\u00f3n: agregar source generator o usar [DynamicDependency]\n[DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof(MiClase))]\nstatic void MetodoConReflection() { ... }\n\n\/\/ ERROR 3: field en C# 14 \u2014 feature no disponible\n\/\/ \"error CS8652: The feature 'field keyword' is currently in Preview\"\n\/\/ Soluci\u00f3n: habilitar preview features en .csproj\n\/\/ &lt;LangVersion&gt;preview&lt;\/LangVersion&gt;\n\/\/ (o esperar a que salga de preview en la versi\u00f3n final de .NET 10)\n\n\/\/ ERROR 4: Cambios breaking en serializaci\u00f3n JSON\n\/\/ System.Text.Json en .NET 10 es m\u00e1s estricto con algunos tipos\n\/\/ Soluci\u00f3n: revisar JsonSerializerOptions y ajustar si es necesario<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Mi experiencia: cu\u00e1nto tard\u00f3 cada proyecto<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>API Minimal con 15 endpoints:<\/strong> 30 minutos (cambiar TFM, actualizar paquetes, correr tests)<\/li>\n<li><strong>Worker Service con threading complejo:<\/strong> 2 horas (migraci\u00f3n de locks + tests de concurrencia)<\/li>\n<li><strong>Aplicaci\u00f3n ASP.NET MVC grande (80 controllers):<\/strong> medio d\u00eda (TFM + paquetes + resolver warnings)<\/li>\n<li><strong>Adopci\u00f3n gradual de C# 14 features:<\/strong> 2-3 semanas en paralelo con desarrollo normal<\/li>\n<\/ul>\n\n\n\n<p>La migraci\u00f3n del TFM en s\u00ed es r\u00e1pida. Lo que toma tiempo es la adopci\u00f3n de las nuevas features, y eso es completamente optativo. Pod\u00e9s migrar a .NET 10 hoy y adoptar <code>field<\/code> o Primary Constructors a tu ritmo, archivo por archivo, cuando toc\u00e1s esa parte del c\u00f3digo.<\/p>\n\n<hr class=\"wp-block-separator\"\/>\n<p><em><a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1262\">\u2190 dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s<\/a> | Fin de la <strong>Serie .NET 8 \u2192 .NET 10<\/strong><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Paso a paso para migrar de .NET 8 a .NET 10: cambiar TFM, actualizar paquetes, adoptar field\/PrimaryConstructors\/Lock gradualmente. Checklist, errores comunes y tiempos reales.<\/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":[202],"tags":[211,18,294,289,65,306,290],"class_list":["post-1263","post","type-post","status-publish","format-standard","hentry","category-dotnet","tag-csharp","tag-dotnet","tag-dotnet10","tag-migration","tag-performance","tag-tooling","tag-upgrade"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n &#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\/migracion-dotnet8-dotnet10-guia-practica-produccion\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"Paso a paso para migrar de .NET 8 a .NET 10: cambiar TFM, actualizar paquetes, adoptar field\/PrimaryConstructors\/Lock gradualmente. Checklist, errores comunes y tiempos reales.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-12T11:57:56+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<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n\",\"datePublished\":\"2026-03-12T11:57:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/\"},\"wordCount\":326,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"csharp\",\"dotnet\",\"dotnet10\",\"migration\",\"performance\",\"tooling\",\"upgrade\"],\"articleSection\":[\"DotNet\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/\",\"name\":\"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-12T11:57:56+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/migracion-dotnet8-dotnet10-guia-practica-produccion\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n\"}]},{\"@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":"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n &#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\/migracion-dotnet8-dotnet10-guia-practica-produccion\/","og_locale":"es_ES","og_type":"article","og_title":"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n &#183; devops Mauro Bernal","og_description":"Paso a paso para migrar de .NET 8 a .NET 10: cambiar TFM, actualizar paquetes, adoptar field\/PrimaryConstructors\/Lock gradualmente. Checklist, errores comunes y tiempos reales.","og_url":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-12T11:57:56+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n","datePublished":"2026-03-12T11:57:56+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/"},"wordCount":326,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["csharp","dotnet","dotnet10","migration","performance","tooling","upgrade"],"articleSection":["DotNet"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/","url":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/","name":"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-12T11:57:56+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/migracion-dotnet8-dotnet10-guia-practica-produccion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"Gu\u00eda pr\u00e1ctica: c\u00f3mo migr\u00e9 mis proyectos de .NET 8 a .NET 10 sin romper producci\u00f3n"}]},{"@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\/1263","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=1263"}],"version-history":[{"count":1,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1263\/revisions"}],"predecessor-version":[{"id":1272,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1263\/revisions\/1272"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}