1. Antes de empezar: ¿Qué necesitamos?

Para que todo fluya sin sorpresas, asegúrate de tener ya instalado:

.NET SDK 6.0+ instalado en tu máquina.

Visual Studio 2022 (o superior) con acceso al Package Manager Console.

Un Personal Access Token (PAT) de Azure DevOps con permisos de Packaging (Read & write).

En tu organización de Azure DevOps (organizacion <>), un proyecto (proyecto<>) y un feed llamado UtilidadFecha, para ello:

Debes ir Azure DevOps en la seccion de Feed, crea uno, luego ve a la seccion  de connect to feed y copia el URL segun corresponde:
https://pkgs.dev.azure.com/<organizacion>/<proyecto>/_packaging/<nombredelfeed>/nuget/v3/index.json
esa misma url se usa dentro del archivo


2. Configura tu nuget.config

Piensa en este archivo como tu mapa de ruta: le dice a dotnet dónde buscar o enviar paquetes. Crea un nuget.config en la raíz de ambos proyectos (librería y consumidor) con este contenido:

<?xml version="1.0" encoding="utf-8"?>  
<configuration>
  <packageSources>
    <!-- Fuente pública (opcional) -->
    <add key="NuGet.org"     value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <!-- Tu feed privado, ahora key="AzureDevOps" -->
    <add key="AzureDevOps"  
         value="https://pkgs.dev.azure.com/<>/<>/_packaging/UtilidadFecha/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <AzureDevOps>
      <!-- Credenciales para Azure Artifacts -->
      <add key="Username"          value="antonio" />
      <add key="ClearTextPassword" value="PAT" />
    </AzureDevOps>
  </packageSourceCredentials>
</configuration>

Recuerda reemplazar TU_PAT_AZURE_DEVOPS con tu token real, para crear el token debes ir a Azure DevOps, a par de tu nombre, puedes seleccionar -> personal access token, asignale un nombre, una duración, y luego selecciona los permisos, puedes dejarlo como full access para esta prueba.


3. Crea tu librería NuGet

Abre una terminal y navega a la carpeta donde quieras generar la librería:

dotnet new classlib -n UtilidadFecha cd UtilidadFecha

Copia allí el nuget.config que preparaste.

Abre (o crea) el archivo InfoSistema.cs y pega este código:

using System;
using System.Linq;
using System.Net;
using System.Net.Sockets;

namespace UtilidadFecha
{
    public static class InfoSistema
    {
        public static string ObtenerFechaHoraUtc() =>
            DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss");

        public static string ObtenerIpLocal()
        {
            var host = Dns.GetHostName();
            var ipv4 = Dns.GetHostEntry(host)
                          .AddressList
                          .FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);
            return ipv4?.ToString() ?? "IP no encontrada";
        }
    }
}

Añade los metadatos NuGet en tu .csproj para que dotnet pack entienda qué empacar:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>UtilidadFecha</PackageId>
    <Version>1.0.0</Version>
    <Authors>Antonio</Authors>
    <Description>Devuelve la fecha UTC y la IP local</Description>
  </PropertyGroup>
</Project>

4. Empaqueta y publica:
    dotnet build 

para saber que todo este funcionanado correctamente, y si existiera algun error corregirlo oportunamente

Empaqueta en modo Release:

 
dotnet pack -c Release

Sube tu paquete al feed privado, que has creado con anticipacion

dotnet nuget push bin\Release\UtilidadFecha.1.0.0.nupkg --source AzureDevOps --api-key az --skip-duplicate

El --api-key az es un comodín: la autenticación ya está en tu config. 

Entra al portal de Azure DevOps y verifica que tu paquete UtilidadFecha 1.0.0 esté allí.
o tambien, puedes acceder a el desde un navegador, con tu url:
https://pkgs.dev.azure.com/<organizacion>/<proyecto>/_packaging/<nombredelfeed>/nuget/v3/index.json

el cual devuelve una salida tipo JSON con la información de tu feed


5. Consume tu paquete en otro proyecto

Crea un proyecto de consola (o el que prefieras):

dotnet new console -n RequestorFecha cd RequestorFecha 
Install-Package UtilidadFecha -Version 1.0.0 -Source AzureDevOps

Abre Program.cs y úsalo así:

using System;
using UtilidadFecha;

class Program
{
    static void Main()
    {
        Console.WriteLine("Fecha UTC: " + InfoSistema.ObtenerFechaHoraUtc());
        Console.WriteLine("IP Local: "  + InfoSistema.ObtenerIpLocal());
    }
}

Ejecuta con dotnet run y… listo Deberías ver tu fecha e IP local en pantalla.


6. ¿Y si hay cambios?

Cuando quieras lanzar una versión nueva (por ejemplo, 1.1.0):

En la librería, sube el <Version> en el .csproj a 1.1.0.

Repite Empaquetar y Publicar (pasos anteriores).

En el proyecto consumidor, ejecuta:

 
dotnet add package UtilidadFecha --version 1.1.0 --source AzureDevOps # o en PMC: Update-Package UtilidadFecha -Version 1.1.0 -Source AzureDevOps

Vuelve a dotnet run y verás los cambios al vuelo. 


Y eso es todo  🎉

Ahora tienes un flujo completo, paso a paso, explicando cómo crear, publicar, consumir y actualizar tu propio paquete NuGet en Azure DevOps, con un lenguaje más cercano y sin jerga innecesaria.

Documentación necesaria:

Nuget Artifacts Azure DevOps

Refencia del config file