{"id":1297,"date":"2026-03-16T19:33:43","date_gmt":"2026-03-16T22:33:43","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/"},"modified":"2026-03-16T19:33:43","modified_gmt":"2026-03-16T22:33:43","slug":"cli-dotnet-guia-completa-capacidades","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/","title":{"rendered":"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales"},"content":{"rendered":"\n<p>Hay algo que aprend\u00ed trabajando con desarrolladores que vienen de otros ecosistemas: subestiman la CLI de .NET. La ven como un atajo para no abrir Visual Studio, pero en realidad es la columna vertebral de todo el toolchain de .NET moderno. Los pipelines de CI\/CD, los contenedores, los scripts de automatizaci\u00f3n \u2014 todo pasa por ac\u00e1. En este art\u00edculo repaso las siete capacidades principales con ejemplos reales, desde crear una soluci\u00f3n hasta monitorear un proceso en producci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un poco de contexto<\/h2>\n\n\n\n<p>Antes de que la CLI existiera en su forma actual, el ecosistema .NET depend\u00eda fuertemente de Visual Studio y de MSBuild estructurado para Windows. Eso generaba fragmentaci\u00f3n: el desarrollador trabajaba en Windows con el IDE, el servidor de CI corr\u00eda en Linux, y los scripts de deploy eran una mezcla de PowerShell y batch que nadie quer\u00eda tocar. La CLI resolvi\u00f3 eso siendo un <em>frontend<\/em> unificado que orquesta MSBuild, NuGet y VSTest de manera consistente en cualquier plataforma.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Bootstrapping: dotnet new y dotnet sln<\/h2>\n\n\n\n<p>El punto de entrada de cualquier proyecto. <code>dotnet new<\/code> no es solo un generador de archivos \u2014 es un motor de plantillas que elimina el boilerplate inicial y estandariza la estructura de proyectos entre el equipo. <code>dotnet sln<\/code> maneja la interconexi\u00f3n de proyectos dentro de una soluci\u00f3n, algo que antes requer\u00eda editar XML a mano o depender del IDE.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Crear una soluci\u00f3n en blanco\ndotnet new sln -n MiSistemaEnterprise\n\n# Crear API y proyecto de pruebas\ndotnet new webapi -n MiSistemaEnterprise.Api\ndotnet new xunit -n MiSistemaEnterprise.Tests\n\n# Vincular ambos a la soluci\u00f3n\ndotnet sln add .\/MiSistemaEnterprise.Api\/MiSistemaEnterprise.Api.csproj\ndotnet sln add .\/MiSistemaEnterprise.Tests\/MiSistemaEnterprise.Tests.csproj\n\n# Referenciar la API desde el proyecto de pruebas\ndotnet add .\/MiSistemaEnterprise.Tests\/MiSistemaEnterprise.Tests.csproj \\\n  reference .\/MiSistemaEnterprise.Api\/MiSistemaEnterprise.Api.csproj<\/code><\/pre>\n\n\n\n<p>Esto es exactamente lo que corro cuando arranco un proyecto nuevo. Cinco comandos y tengo una soluci\u00f3n con API, pruebas y referencias configuradas, sin abrir ning\u00fan IDE.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Gesti\u00f3n de Dependencias: dotnet add package<\/h2>\n\n\n\n<p>La interfaz de NuGet desde la terminal. Modifica el <code>.csproj<\/code>, descarga los binarios a la cach\u00e9 global y resuelve el \u00e1rbol completo de dependencias transitivas. En pipelines de CI\/CD esto es fundamental \u2014 no hay interfaz gr\u00e1fica disponible, y este comando funciona igual en cualquier agente.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd MiSistemaEnterprise.Api\n\n# Instalar Polly para resiliencia con versi\u00f3n espec\u00edfica\ndotnet add package Polly --version 8.3.0\n\n# Ver todas las dependencias instaladas\ndotnet list package\n\n# Eliminar un paquete\ndotnet remove package Polly<\/code><\/pre>\n\n\n\n<p>El <code>--version<\/code> expl\u00edcito es importante en proyectos serios: evita que una actualizaci\u00f3n autom\u00e1tica rompa algo en producci\u00f3n sin que nadie lo vea venir.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Compilaci\u00f3n: dotnet build<\/h2>\n\n\n\n<p><code>dotnet build<\/code> es la abstracci\u00f3n sobre MSBuild. Ejecuta autom\u00e1ticamente el restore de dependencias faltantes y compila el c\u00f3digo a IL (Intermediate Language), generando los <code>.dll<\/code> listos para el runtime. El flag <code>--nologo<\/code> puede parecer cosm\u00e9tico, pero en logs de CI hace una diferencia real en la legibilidad.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Compilar toda la soluci\u00f3n en modo Release\ndotnet build ..\/MiSistemaEnterprise.sln --configuration Release --nologo\n\n# Limpiar artefactos anteriores (bin\/ y obj\/)\ndotnet clean<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. Desarrollo Activo: dotnet watch<\/h2>\n\n\n\n<p>Esta es la que m\u00e1s impacto tiene en el d\u00eda a d\u00eda. Antes de <code>dotnet watch<\/code>, el ciclo era: guardar \u2192 detener el proceso \u2192 recompilar \u2192 reiniciar \u2192 probar. Repetido decenas de veces por hora. Con <code>dotnet watch<\/code> y Hot Reload, los cambios se reinyectan directamente en el proceso en ejecuci\u00f3n sin perder el estado de la aplicaci\u00f3n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ejecutar la API en modo de observaci\u00f3n\n# Cualquier cambio guardado en un .cs se aplica instant\u00e1neamente\ndotnet watch run --project .\/MiSistemaEnterprise.Api.csproj<\/code><\/pre>\n\n\n\n<p>El ahorro de tiempo es real. En una jornada de desarrollo intenso, esos segundos por ciclo se acumulan en horas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Pruebas Automatizadas: dotnet test<\/h2>\n\n\n\n<p>El runner de pruebas nativo de la CLI. Compatible con xUnit, NUnit y MSTest sin configuraci\u00f3n adicional. Lo importante para CI\/CD es la combinaci\u00f3n de exportaci\u00f3n en formato TRX (compatible con Azure DevOps, Jenkins) y la recolecci\u00f3n de cobertura con Coverlet, que genera reportes que pod\u00e9s publicar directamente en el pipeline.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ejecutar pruebas con reporte TRX y cobertura de c\u00f3digo\ndotnet test .\/MiSistemaEnterprise.Tests.csproj \\\n  --logger \"trx;LogFileName=resultados.trx\" \\\n  --collect:\"XPlat Code Coverage\"<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">6. Publicaci\u00f3n y Despliegue: dotnet publish<\/h2>\n\n\n\n<p>El comando que resuelve el cl\u00e1sico \u00abfunciona en mi m\u00e1quina\u00bb. Empaqueta la aplicaci\u00f3n, sus dependencias y opcionalmente el runtime de .NET en un artefacto desplegable. Hay dos modos principales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n  <li><strong>Framework-Dependent:<\/strong> requiere .NET instalado en el servidor. M\u00e1s liviano.<\/li>\n  <li><strong>Self-Contained:<\/strong> incluye el runtime. M\u00e1s pesado, pero sin dependencias externas en el servidor.<\/li>\n<\/ul>\n\n\n\n<p>Con AOT (Ahead-of-Time), pod\u00e9s compilar directamente a c\u00f3digo nativo de la plataforma, eliminando el runtime por completo.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Publicar como ejecutable autocontenido para Linux x64\n# Un \u00fanico binario, con trimming para reducir el tama\u00f1o\ndotnet publish .\/MiSistemaEnterprise.Api.csproj \\\n  --configuration Release \\\n  --runtime linux-x64 \\\n  --self-contained true \\\n  \/p:PublishSingleFile=true \\\n  \/p:PublishTrimmed=true<\/code><\/pre>\n\n\n\n<p>En proyectos con contenedores, este comando va directo al <code>Dockerfile<\/code>: compil\u00e1s con <code>dotnet publish<\/code> en la etapa de build y copi\u00e1s el binario resultante a la imagen final. Imagen m\u00e1s peque\u00f1a, arranque m\u00e1s r\u00e1pido.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Diagn\u00f3stico en Producci\u00f3n: dotnet tools<\/h2>\n\n\n\n<p>La capacidad menos conocida y la m\u00e1s poderosa cuando algo falla en producci\u00f3n. Las herramientas globales de .NET permiten monitorear y perfilar procesos en vivo, incluso en contenedores Linux, sin necesidad de instalar agentes externos ni reinicios.<\/p>\n\n\n\n<p>Las tres que m\u00e1s uso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n  <li><strong>dotnet-counters:<\/strong> m\u00e9tricas en tiempo real (CPU, GC, ThreadPool, peticiones por segundo)<\/li>\n  <li><strong>dotnet-trace:<\/strong> trazas de CPU para identificar cuellos de botella<\/li>\n  <li><strong>dotnet-dump:<\/strong> volcados de memoria para analizar fugas o crashes<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code># Instalar la herramienta globalmente (una sola vez)\ndotnet tool install --global dotnet-counters\n\n# Listar procesos .NET en ejecuci\u00f3n para obtener el PID\ndotnet-counters ps\n\n# Monitorear m\u00e9tricas del runtime en tiempo real para el proceso 1234\ndotnet-counters monitor -p 1234 --counters System.Runtime<\/code><\/pre>\n\n\n\n<p>Tuve un caso donde la memoria de un servicio crec\u00eda progresivamente en producci\u00f3n sin un patr\u00f3n claro. Con <code>dotnet-counters<\/code> identifiqu\u00e9 que las colecciones Gen2 del GC eran anormalmente frecuentes. Con <code>dotnet-dump<\/code> captur\u00e9 el heap y encontr\u00e9 el objeto que se estaba reteniendo. Todo sin reiniciar el servicio ni afectar a los usuarios. Eso no tiene precio.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Resumen<\/h2>\n\n\n\n<p>La CLI de .NET no es un accesorio \u2014 es la herramienta central alrededor de la cual gira todo el ciclo de vida de una aplicaci\u00f3n .NET moderna. Desde el primer <code>dotnet new<\/code> hasta el <code>dotnet-counters monitor<\/code> en producci\u00f3n, cada etapa tiene su comando y su prop\u00f3sito.<\/p>\n\n\n\n<p>Si ven\u00eds de un entorno donde todo pasaba por el IDE, mi recomendaci\u00f3n es dedicarle una tarde a explorar estos comandos en un proyecto de prueba. La inversi\u00f3n se recupera r\u00e1pido, especialmente en el momento en que ten\u00e9s que diagnosticar algo en un servidor Linux sin interfaz gr\u00e1fica.<\/p>\n\n\n\n<p>\u00bfUs\u00e1s alguna herramienta de diagn\u00f3stico de la CLI que no est\u00e9 en esta lista? Dejalo en los comentarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gu\u00eda completa de la CLI de .NET: dotnet new, dotnet sln, dotnet add package, dotnet build, dotnet watch con Hot Reload, dotnet test para CI\/CD, dotnet publish con Self-Contained y AOT, y diagn\u00f3stico en producci\u00f3n con dotnet-counters y dotnet-trace. Con ejemplos 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":[1,202],"tags":[304,368,380,384,385,383,387,388,389,381,351,225,386,382],"class_list":["post-1297","post","type-post","status-publish","format-standard","hentry","category-blog","category-dotnet","tag-aot","tag-ci-cd-2","tag-dotnet-cli","tag-dotnet-publish","tag-dotnet-test","tag-dotnet-watch","tag-dotnet-counters","tag-dotnet-trace","tag-inner-dev-loop","tag-msbuild","tag-native-aot","tag-nuget","tag-self-contained","tag-xunit"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales &#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\/cli-dotnet-guia-completa-capacidades\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"Gu\u00eda completa de la CLI de .NET: dotnet new, dotnet sln, dotnet add package, dotnet build, dotnet watch con Hot Reload, dotnet test para CI\/CD, dotnet publish con Self-Contained y AOT, y diagn\u00f3stico en producci\u00f3n con dotnet-counters y dotnet-trace. Con ejemplos reales.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-16T22:33:43+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\\\/cli-dotnet-guia-completa-capacidades\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales\",\"datePublished\":\"2026-03-16T22:33:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/\"},\"wordCount\":918,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"aot\",\"CI\\\/CD\",\"dotnet CLI\",\"dotnet publish\",\"dotnet test\",\"dotnet watch\",\"dotnet-counters\",\"dotnet-trace\",\"Inner Dev Loop\",\"MSBuild\",\"Native AOT\",\"nuget\",\"Self-Contained\",\"xUnit\"],\"articleSection\":[\"Blog\",\"DotNet\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/\",\"name\":\"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-16T22:33:43+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/cli-dotnet-guia-completa-capacidades\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales\"}]},{\"@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 CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales &#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\/cli-dotnet-guia-completa-capacidades\/","og_locale":"es_ES","og_type":"article","og_title":"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales &#183; devops Mauro Bernal","og_description":"Gu\u00eda completa de la CLI de .NET: dotnet new, dotnet sln, dotnet add package, dotnet build, dotnet watch con Hot Reload, dotnet test para CI\/CD, dotnet publish con Self-Contained y AOT, y diagn\u00f3stico en producci\u00f3n con dotnet-counters y dotnet-trace. Con ejemplos reales.","og_url":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-16T22:33:43+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\/cli-dotnet-guia-completa-capacidades\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales","datePublished":"2026-03-16T22:33:43+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/"},"wordCount":918,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["aot","CI\/CD","dotnet CLI","dotnet publish","dotnet test","dotnet watch","dotnet-counters","dotnet-trace","Inner Dev Loop","MSBuild","Native AOT","nuget","Self-Contained","xUnit"],"articleSection":["Blog","DotNet"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/","url":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/","name":"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-16T22:33:43+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/cli-dotnet-guia-completa-capacidades\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"La CLI de .NET: Gu\u00eda Completa de sus 7 Capacidades Principales"}]},{"@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\/1297","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=1297"}],"version-history":[{"count":0,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1297\/revisions"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}