{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://json.schemastore.org/global.json",
  "additionalProperties": true,
  "properties": {
    "sdk": {
      "type": "object",
      "description": "Specifies information about the .NET SDK to select.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#sdk",
      "properties": {
        "version": {
          "type": "string",
          "pattern": "^(?<major>0|[1-9]\\d*)\\.(?<minor>0|[1-9]\\d*)\\.(?<patch>0|[1-9]\\d*)(?:-(?<prerelease>(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+(?<buildmetadata>[0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
          "description": "The version of the .NET SDK to use. A full version number is required; wildcards and version ranges aren't supported.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#version"
        },
        "allowPrerelease": {
          "type": "boolean",
          "description": "Whether the SDK resolver should consider prerelease versions when selecting the SDK version to use.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#allowprerelease"
        },
        "rollForward": {
          "type": "string",
          "enum": [
            "patch",
            "feature",
            "minor",
            "major",
            "latestPatch",
            "latestFeature",
            "latestMinor",
            "latestMajor",
            "disable"
          ],
          "description": "The roll-forward policy to use when selecting an SDK version. A version must also be specified unless this is set to 'latestMajor'. When omitted, the effective policy is 'patch' if a version is specified and 'latestMajor' otherwise.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#rollforward"
        },
        "paths": {
          "type": "array",
          "description": "The locations to consider when searching for a compatible .NET SDK. Paths can be absolute, relative to global.json, or the special value '$host$'. Available since .NET 10 SDK.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#paths",
          "items": {
            "type": "string"
          }
        },
        "errorMessage": {
          "type": "string",
          "description": "A custom error message to display when the SDK resolver can't find a compatible .NET SDK. Available since .NET 10 SDK.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#errormessage"
        }
      },
      "dependencies": {
        "rollForward": {
          "anyOf": [
            {
              "properties": {
                "version": {}
              },
              "required": ["version"]
            },
            {
              "properties": {
                "rollForward": {
                  "enum": ["latestMajor"]
                }
              }
            }
          ]
        }
      }
    },
    "msbuild-sdks": {
      "type": "object",
      "description": "Controls project SDK versions in one place rather than in each individual project. Each property name is a project SDK name and its value is the version to use.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#msbuild-sdks",
      "additionalProperties": {
        "type": "string"
      }
    },
    "test": {
      "type": "object",
      "description": "Specifies information about tests.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#test",
      "properties": {
        "runner": {
          "type": "string",
          "enum": ["Microsoft.Testing.Platform", "VSTest"],
          "default": "VSTest",
          "description": "The test runner that the 'dotnet test' command uses to discover and run tests. Available since .NET 10 SDK.\nhttps://learn.microsoft.com/dotnet/core/tools/global-json#runner"
        }
      }
    }
  },
  "title": "JSON schema for the .NET global configuration file",
  "type": "object"
}
