tools.json para descubrir versiones de nuget.exe

En la actualidad, existen diversas formas de obtener la última versión de nuget.exe en la máquina de forma que se puedan crear secuencias de comandos. Por ejemplo, puedes descargar y extraer el paquete NuGet.CommandLine de nuget.org. Esto resulta un poco complejo, ya que debes tener nuget.exe (para nuget.exe install) o descomprimir el .nupkg mediante una herramienta de descompresión básica y buscar el archivo binario dentro.

Si ya tienes nuget.exe, también puedes utilizar nuget.exe update -self; no obstante, en este caso es necesario disponer de una copia de nuget.exe ya instalada. Este enfoque también permite actualizar a la última versión. Lo que no permite es utilizar una versión específica.

El punto de conexión de tools.json está disponible para resolver el problema de arranque y para que puedas controlar la versión de nuget.exe que descargues. Lo puedes utilizar en entornos de CI/CD o en secuencias de comandos personalizadas para descubrir y descargar cualquier versión publicada de nuget.exe.

El punto de conexión de tools.json se puede capturar mediante una solicitud HTTP no autenticada (por ejemplo, Invoke-WebRequest en PowerShell o wget). Se puede analizar por medio de un deserializador JSON, y las direcciones URL de descarga de nuget.exe posteriores también se pueden capturar mediante solicitudes HTTP no autenticadas.

Es posible capturar el punto de conexión a través del método GET :

GET https://dist.nuget.org/tools.json

El esquema JSON del punto de conexión está disponible aquí:

GET https://dist.nuget.org/tools.schema.json

Respuesta

La respuesta es un documento JSON que contiene todas las versiones disponibles de nuget.exe.

El objeto JSON raíz tiene la siguiente propiedad:

Nombre Type Obligatorio
nuget.exe matriz de objetos

Cada objeto de la matriz nuget.exe tiene las siguientes propiedades:

Nombre Type Obligatorio Notas
version string Una cadena SemVer 2.0.0
url string Una dirección URL absoluta para descargar esta versión de nuget.exe
fase string Cadena de enumeración
cargada string Marca de tiempo ISO 8601 aproximada que indique desde cuándo está disponible la versión

Los elementos de la matriz se ordenarán en orden descendente de SemVer 2.0.0. Esta garantía está pensada para reducir la carga de un cliente interesado en el número de versión más alto. Sin embargo, en este caso, la lista no se ordenará en orden cronológico. Por ejemplo, si se ofrece una versión principal inferior en una fecha posterior a una versión principal superior, esta versión inferior no aparecerá en la parte superior de la lista. Si deseas la última versión publicada por marca de tiempo, solo tienes ordenar la matriz por la cadena uploaded. Este acción funciona porque la marca de tiempo uploaded está en formato ISO 8601, el cual se puede ordenar cronológicamente mediante una ordenación lexicográfica (es decir, una ordenación de cadena simple).

La propiedad stage indica cómo se examina esta versión de la herramienta.

Fase Significado
EarlyAccessPreview Todavía no está visible en la página web de descarga y deben validarla los asociados
Publicado Disponible en el sitio de descarga, pero aún no se recomienda para el consumo de amplia distribución
ReleasedAndBlessed Disponible en el sitio de descarga y recomendada para su consumo

Un enfoque simple para disponer de la última versión recomendada es tomar la primera versión de la lista que presenta un valor stage de ReleasedAndBlessed. Este enfoque funciona porque las versiones se ordenan en orden de SemVer 2.0.0.

El paquete NuGet.CommandLine de nuget.org normalmente solo se actualiza con versiones ReleasedAndBlessed.

Solicitud de ejemplo

GET https://dist.nuget.org/tools.json

Respuesta de muestra

{
    "nuget.exe": [
        {
            "version": "4.8.0-preview3",
            "url": "https://dist.nuget.org/win-x86-commandline/v4.8.0-preview3/nuget.exe",
            "stage": "EarlyAccessPreview",
            "uploaded": "2018-07-06T23:00:00.0000000Z"
        },
        {
            "version": "4.7.1",
            "url": "https://dist.nuget.org/win-x86-commandline/v4.7.1/nuget.exe",
            "stage": "ReleasedAndBlessed",
            "uploaded": "2018-08-10T23:00:00.0000000Z"
        },
        {
            "version": "4.6.1",
            "url": "https://dist.nuget.org/win-x86-commandline/v4.6.1/nuget.exe",
            "stage": "Released",
            "uploaded": "2018-03-22T23:00:00.0000000Z"
        },
        {
            "version": "3.5.0",
            "url": "https://dist.nuget.org/win-x86-commandline/v3.5.0/nuget.exe",
            "stage": "ReleasedAndBlessed",
            "uploaded": "2016-12-19T15:30:00.0000000-08:00"
        },
        {
            "version": "2.8.6",
            "url": "https://dist.nuget.org/win-x86-commandline/v2.8.6/nuget.exe",
            "stage": "ReleasedAndBlessed",
            "uploaded": "2015-09-01T12:30:00.0000000-07:00"
        }
    ]
}