Información general de global.json
Este artículo se aplica a: ✔️ SDK de .NET Core 3.1 y versiones posteriores
El archivo global.json permite definir qué versión del SDK de .NET se usa al ejecutar comandos de la CLI de .NET. Seleccionar la versión del SDK de .NET es independiente de especificar el entorno de ejecución que el proyecto tiene como destino. La versión del SDK de .NET indica qué versión de la CLI de .NET se usa. En este artículo se explica cómo seleccionar la versión del SDK mediante global.json.
Si siempre quiere usar la versión más reciente del SDK instalada en la máquina, no necesita ningún archivo global.json. Sin embargo, en escenarios de CI (integración continua), es habitual que se quiera especificar un intervalo aceptable para la versión del SDK que se usa. El archivo global.json tiene una característica rollForward
que proporciona formas flexibles de especificar un intervalo de versiones aceptable. Por ejemplo, en el siguiente archivo global.json se selecciona 8.0.300 o cualquier revisión o banda de características posterior para la versión 8.0 instalada en la máquina:
{
"sdk": {
"version": "8.0.300",
"rollForward": "latestFeature"
}
}
El SDK de .NET busca un archivo global.json en el directorio de trabajo actual (que no es necesariamente el mismo que el directorio del proyecto) o en uno de sus directorios principales.
Para obtener información sobre cómo especificar la versión del entorno de ejecución en lugar de la versión del SDK, consulte Marcos de destino.
Esquema de global.JSON
sdk
Tipo: object
Especifica información sobre el SDK de .NET que se va a seleccionar.
version
- Tipo:
string
La versión del SDK de .NET que se va a usar.
Este campo:
- No admite caracteres comodín; es decir, debe especificar el número de versión completo.
- No admite intervalos de versiones.
allowPrerelease
- Tipo:
boolean
- Disponible a partir del SDK de .NET Core 3.0.
Indica si la resolución del SDK debe tener en cuenta las versiones preliminares a la hora de seleccionar la versión del SDK que se va a usar.
Si no se establece este valor de forma explícita, el valor predeterminado depende de si se está ejecutando desde Visual Studio:
- Si no se está en Visual Studio, el valor predeterminado es
true
. - Si se está en Visual Studio, se usa el estado de versión preliminar solicitado. Es decir, si se usa una versión preliminar de Visual Studio o se establece la opción Usar versiones preliminares del SDK de .NET (en Herramientas>Opciones>Entorno>Características en versión preliminar), el valor predeterminado es
true
. De lo contrario, el valor predeterminado esfalse
.
rollForward
- Tipo:
string
- Disponible a partir del SDK de .NET Core 3.0.
Directiva de puesta al día que se va a usar al seleccionar una versión del SDK, ya sea como reserva si falta una versión específica del SDK o como directiva para usar una versión posterior. Se debe especificar una versión con un valor rollForward
, a menos que se esté estableciendo en latestMajor
.
El comportamiento predeterminado de puesta al día lo determinan las reglas de coincidencia.
Para comprender las directivas disponibles y su comportamiento, tenga en cuenta las siguientes definiciones de una versión del SDK en el formato x.y.znn
:
x
es la versión principal.y
es la versión secundaria.z
es la banda de características.nn
es la versión de la revisión.
En la siguiente tabla se muestran los posibles valores de la clave rollForward
:
Valor | Comportamiento |
---|---|
patch |
Usa la versión especificada. Si no se encuentra, se pone al día hasta el nivel de revisión más reciente. Si no se encuentra, se produce un error. Este valor es el comportamiento heredado de las versiones anteriores del SDK. |
feature |
Usa el nivel de revisión más reciente para las versiones principal y secundaria y la banda de características especificadas. Si no se encuentra, se pone al día hasta la siguiente banda de características superior dentro de la misma versión principal/secundaria y usa el nivel de revisión más reciente para esa banda de características. Si no se encuentra, se produce un error. |
minor |
Usa el nivel de revisión más reciente para las versiones principal y secundaria y la banda de características especificadas. Si no se encuentra, se pone al día hasta la siguiente banda de características superior dentro de la misma versión principal/secundaria y usa el nivel de revisión más reciente para esa banda de características. Si no se encuentra, se pone al día hasta la siguiente versión secundaria y banda de características superiores dentro de la misma versión principal y usa el nivel de revisión más reciente para esa banda de características. Si no se encuentra, se produce un error. |
major |
Usa el nivel de revisión más reciente para las versiones principal y secundaria y la banda de características especificadas. Si no se encuentra, se pone al día hasta la siguiente banda de características superior dentro de la misma versión principal/secundaria y usa el nivel de revisión más reciente para esa banda de características. Si no se encuentra, se pone al día hasta la siguiente versión secundaria y banda de características superiores dentro de la misma versión principal y usa el nivel de revisión más reciente para esa banda de características. Si no se encuentra, se pone al día hasta la siguiente versión principal, secundaria y banda de características superiores y usa el nivel de revisión más reciente para esa banda de características. Si no se encuentra, se produce un error. |
latestPatch |
Usa el nivel de revisión instalado más reciente que coincide con la versión principal, secundaria y banda de características solicitadas con un nivel de revisión mayor o igual que el valor especificado. Si no se encuentra, se produce un error. |
latestFeature |
Usa la banda de características instalada superior y el nivel de revisión que coincide con la versión principal y secundaria solicitadas con una banda de características y un nivel de revisión que es mayor o igual que el valor especificado. Si no se encuentra, se produce un error. |
latestMinor |
Usa la versión secundaria y la banda de características instaladas superiores y el nivel de revisión que coincide con la versión principal solicitada con una versión secundaria, banda de características y nivel de revisión que es mayor o igual que el valor especificado. Si no se encuentra, se produce un error. |
latestMajor |
Usa el SDK de .NET más reciente que se haya instalado con una versión que es mayor o igual que el valor especificado. Si no se encuentra, se produce un error. |
disable |
No se pone al día. Se necesita una coincidencia exacta. |
msbuild-sdks
Tipo: object
Permite controlar la versión del SDK del proyecto en un lugar, en vez de hacerlo en cada proyecto individual. Para más información, vea Resolución de los SDK de proyecto.
Comentarios en global.json
Los comentarios en global.json se admiten mediante comentarios de estilo de JavaScript o C#. Por ejemplo:
{
// This is a comment.
"sdk": {
"version": "8.0.300" /* This is comment 2*/
/* This is a
multiline comment.*/
}
}
Ejemplos
En el ejemplo siguiente se muestra cómo no permitir el uso de versiones preliminares:
{
"sdk": {
"allowPrerelease": false
}
}
En este ejemplo se muestra cómo usar la versión superior instalada que es mayor o igual que la versión especificada. El JSON mostrado no permite ninguna versión del SDK anterior a la 7.0.200 y permite la 7.0.200 o cualquier versión posterior, incluyendo la 8.0.xxx.
{
"sdk": {
"version": "7.0.200",
"rollForward": "latestMajor"
}
}
En el ejemplo siguiente se muestra cómo usar la versión exacta especificada:
{
"sdk": {
"version": "8.0.302",
"rollForward": "disable"
}
}
En este ejemplo se muestra cómo usar la versión de revisión y banda de características más reciente instalada de una versión principal y secundaria concreta. El JSON mostrado no permite ninguna versión del SDK anterior a la 8.0.302 y permite la 8.0.302 o cualquier versión posterior a la 8.0.xxx, como la 8.0.303 o la 8.0.402.
{
"sdk": {
"version": "8.0.302",
"rollForward": "latestFeature"
}
}
En este ejemplo se muestra cómo usar la versión de revisión superior instalada de una versión específica. El JSON mostrado no permite ninguna versión del SDK anterior a la 8.0.102 y permite la 8.0.102 o cualquier versión posterior a la 8.0.1xx, como la 8.0.103 o la 8.0.199.
{
"sdk": {
"version": "8.0.102",
"rollForward": "latestPatch"
}
}
global.json y la CLI de .NET
Para establecer una versión del SDK en el archivo global.json, resulta útil saber qué versiones del SDK están instaladas en el equipo. Para obtener información sobre cómo hacerlo, consulte Cómo comprobar que .NET ya está instalado.
Para instalar otras versiones del SDK de .NET en el equipo, visite la página Descargas de .NET.
Puede crear un archivo global.json en el directorio actual ejecutando el comando dotnet new, similar al ejemplo siguiente:
dotnet new globaljson --sdk-version 8.0.302 --roll-forward latestFeature
Reglas de coincidencia
Nota:
Las reglas de coincidencia se rigen por el punto de entrada dotnet.exe
, que es común en todos los entornos de ejecución de .NET instalados. Se usan las reglas de coincidencia de la última versión instalada del entorno de ejecución de .NET cuando se tienen varios entornos de ejecución instalados en paralelo o se usa un archivo global.json.
A la hora de determinar qué versión del SDK se usará, se aplican las reglas siguientes:
Si no se encuentra ningún archivo global.json o en el global.json no se especifica ninguna versión del SDK ni un valor
allowPrerelease
, se usa la versión del SDK instalada más reciente (lo que equivale a establecerrollForward
enlatestMajor
). Según cómo se invoquedotnet
, se tendrán en cuenta o no las versiones preliminares del SDK:- Si no se está en Visual Studio, se tienen en cuenta las versiones preliminares.
- Si se está en Visual Studio, se usa el estado de versión preliminar solicitado. Es decir, si se usa una versión preliminar de Visual Studio o se establece la opción Usar versiones preliminares del SDK de .NET (en Herramientas>Opciones>Entorno>Características en versión preliminar), se tienen en cuenta las versiones preliminares; de lo contrario, solo se consideran las versiones publicadas.
Si se encuentra un archivo global.json que no especifica una versión del SDK pero sí un valor
allowPrerelease
, se usa la versión del SDK instalada superior (lo que equivale a establecerrollForward
enlatestMajor
). El que la versión más reciente del SDK pueda ser publicada o preliminar, depende del valor deallowPrerelease
.true
indica que se tienen en cuenta las versiones preliminares;false
indica que solo se tienen en cuenta las versiones publicadas.Si se encuentra un archivo global.json y especifica una versión del SDK:
- Si no hay ningún valor
rollForward
establecido, se usalatestPatch
como directiva derollForward
predeterminada. De lo contrario, vea cada valor y su comportamiento en la sección rollForward. - En la sección allowPrerelease se explica si se tienen en cuenta las versiones preliminares y cuál es el comportamiento predeterminado cuando
allowPrerelease
no está establecido.
- Si no hay ningún valor
Solución de problemas de advertencias de compilación
Las advertencias siguientes indican que el proyecto se ha compilado con una versión preliminar del SDK de .NET:
Usa una versión preliminar de .NET. Consulte: https://aka.ms/dotnet-support-policy
Las versiones del SDK de .NET tienen un historial y el compromiso de ser de alta calidad. Pero si no quiere usar una versión preliminar, vea las distintas estrategias que puede aplicar en la sección allowPrerelease. En el caso de los equipos que nunca han tenido instalado un SDK o un runtime de .NET Core 3.0 o superior, debe crear un archivo global.json y especificar la versión exacta que quiere usar.
La advertencia siguiente indica que el proyecto tiene como destino EF Core 1.0 ó 1.1, que no es compatible con el SDK de .NET Core 2.1 y versiones posteriores:
El proyecto de inicio "{proyectoDeInicio}" está destinado a la versión "{versiónPlataformaDeDestino}" de ".NETCoreApp". Esta versión de las herramientas de línea de comandos de Entity Framework Core .NET solo admite la versión 2.0 o superior. Para obtener información sobre el uso de versiones anteriores de las herramientas, vea https://go.microsoft.com/fwlink/?linkid=871254.
A partir del SDK de .NET Core 2.1 (versión 2.1.300), el comando
dotnet ef
se incluye en el SDK. Para compilar el proyecto, instale el SDK de .NET Core 2.0 (versión 2.1.201) o versiones anteriores en el equipo y defina la versión del SDK deseada mediante el archivo global.json. Para obtener más información sobre el comandodotnet ef
, vea EF Core .NET Command-line Tools (Herramientas de línea de comandos de EF Core .NET).Si usa global.json para mantenerse en una versión específica del SDK de .NET, tenga en cuenta que Visual Studio solo instala una sola copia del SDK de .NET. Por lo tanto, si actualiza la versión de Visual Studio, quita la versión anterior del SDK de .NET que había usado para instalar la nueva versión. Quita la versión anterior incluso si es una versión principal diferente de .NET.
Para evitar que Visual Studio quite las versiones del SDK de .NET, instale el SDK de .NET independiente desde la página de descarga. Sin embargo, si lo hace ya no obtendrá actualizaciones automáticas de esa versión del SDK de .NET a través de Visual Studio y correría el riesgo de sufrir problemas de seguridad.