{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "compilationOptions": {
      "description": "[Deprecated] Options that are passed to the compiler. Use 'buildOptions' instead.",
      "type": "object",
      "properties": {
        "define": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "nowarn": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "warningsAsErrors": {
          "type": "boolean",
          "default": false
        },
        "allowUnsafe": {
          "type": "boolean",
          "default": false
        },
        "emitEntryPoint": {
          "type": "boolean",
          "default": false
        },
        "optimize": {
          "type": "boolean",
          "default": false
        },
        "platform": {
          "type": "string",
          "enum": [
            "anycpu",
            "anycpu32bitpreferred",
            "ARM",
            "x86",
            "x64",
            "Itanium"
          ]
        },
        "languageVersion": {
          "type": "string",
          "enum": [
            "csharp1",
            "csharp2",
            "csharp3",
            "csharp4",
            "csharp5",
            "csharp6",
            "experimental"
          ]
        },
        "keyFile": {
          "type": "string"
        },
        "delaySign": {
          "type": "boolean",
          "default": false
        },
        "publicSign": {
          "type": "boolean",
          "default": false
        },
        "debugType": {
          "type": "string",
          "enum": ["portable", "full", "none"]
        },
        "preserveCompilationContext": {
          "type": "boolean",
          "description": "Set this option to preserve reference assemblies and other context data to allow for runtime compilation"
        },
        "outputName": {
          "type": "string"
        }
      }
    },
    "buildOptions": {
      "description": "Options that are passed to the compiler.",
      "type": "object",
      "properties": {
        "define": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "nowarn": {
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "warningsAsErrors": {
          "type": "boolean",
          "default": false
        },
        "allowUnsafe": {
          "type": "boolean",
          "default": false
        },
        "emitEntryPoint": {
          "type": "boolean",
          "default": false
        },
        "optimize": {
          "type": "boolean",
          "default": false
        },
        "platform": {
          "type": "string",
          "enum": [
            "anycpu",
            "anycpu32bitpreferred",
            "ARM",
            "x86",
            "x64",
            "Itanium"
          ]
        },
        "languageVersion": {
          "type": "string",
          "enum": [
            "csharp1",
            "csharp2",
            "csharp3",
            "csharp4",
            "csharp5",
            "csharp6",
            "experimental"
          ]
        },
        "keyFile": {
          "type": "string"
        },
        "delaySign": {
          "type": "boolean",
          "default": false
        },
        "publicSign": {
          "type": "boolean",
          "default": false
        },
        "debugType": {
          "type": "string",
          "enum": ["portable", "full", "none"]
        },
        "preserveCompilationContext": {
          "type": "boolean",
          "description": "Set this option to preserve reference assemblies and other context data to allow for runtime compilation."
        },
        "outputName": {
          "type": "string"
        },
        "compilerName": {
          "type": "string",
          "default": "csc"
        },
        "compile": {
          "description": "Defines glob patterns and file path to include for compilation.",
          "type": ["string", "array", "object"],
          "items": {
            "type": "string"
          },
          "properties": {
            "include": {
              "type": ["string", "array"],
              "items": {
                "type": "string"
              },
              "description": "List of file globbing patterns to be included."
            },
            "exclude": {
              "type": ["string", "array"],
              "items": {
                "type": "string"
              },
              "description": "List of file globbing patterns to be excluded."
            },
            "includeFiles": {
              "type": ["string", "array"],
              "items": {
                "type": "string"
              },
              "description": "List of file paths to be included."
            },
            "excludeFiles": {
              "type": ["string", "array"],
              "items": {
                "type": "string"
              },
              "description": "List of file paths to be excluded."
            },
            "builtIns": {
              "type": ["string", "array", "object"],
              "items": {
                "type": "string"
              },
              "properties": {
                "include": {
                  "type": ["string", "array"],
                  "items": {
                    "type": "string"
                  },
                  "description": "List of file globbing patterns to be included."
                },
                "exclude": {
                  "type": ["string", "array"],
                  "items": {
                    "type": "string"
                  },
                  "description": "List of file globbing patterns to be included."
                }
              }
            },
            "mappings": {
              "type": "object",
              "description": "Pairs of destination folders and glob patterns specifying additional files to include/exclude."
            }
          }
        },
        "embed": {
          "allOf": [
            {
              "$ref": "#/definitions/buildOptions/properties/compile"
            },
            {
              "description": "Defines glob patterns and file paths of resource files to include for compilation."
            }
          ]
        },
        "copyToOutput": {
          "allOf": [
            {
              "$ref": "#/definitions/buildOptions/properties/compile"
            },
            {
              "description": "Defines glob patterns and file paths to include for copying to build output."
            }
          ]
        },
        "xmlDoc": {
          "type": "boolean"
        },
        "additionalArguments": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "runtimeOptions": {
      "type": "object",
      "properties": {
        "configProperties": {
          "type": "object",
          "properties": {
            "System.GC.Server": {
              "type": "boolean",
              "description": "Enables/disables server garbage collection.",
              "default": false
            },
            "System.GC.Concurrent": {
              "type": "boolean",
              "description": "Enables/disables concurrent garbage collection.",
              "default": true
            },
            "System.GC.HeapCount": {
              "type": "integer",
              "minimum": 0,
              "description": "Limits the number of heaps created by the garbage collector."
            },
            "System.GC.HeapAffinitizeMask": {
              "type": "integer",
              "minimum": 0,
              "description": "Specifies the exact processors that garbage collector threads should use."
            },
            "System.GC.GCHeapAffinitizeRanges": {
              "type": "string",
              "minLength": 1,
              "description": "Specifies the list of processors to use for garbage collector threads."
            },
            "System.GC.NoAffinitize": {
              "type": "boolean",
              "description": "Specifies whether to affinitize garbage collection threads with processors. To affinitize a GC thread means that it can only run on its specific CPU. A heap is created for each GC thread.",
              "default": false
            },
            "System.GC.HeapHardLimit": {
              "type": "string",
              "description": "Specifies the maximum commit size, in bytes, for the GC heap and GC bookkeeping."
            },
            "System.GC.HeapHardLimitPercent": {
              "type": "number",
              "description": "Specifies the GC heap usage as a percentage of the total memory."
            },
            "System.GC.RetainVM": {
              "type": "boolean",
              "description": "Configures whether segments that should be deleted are put on a standby list for future use or are released back to the operating system (OS).",
              "default": false
            },
            "System.GC.LOHThreshold": {
              "type": "integer",
              "description": "Specifies the threshold size, in bytes, that causes objects to go on the large object heap (LOH).",
              "default": 85000
            },
            "System.Threading.ThreadPool.MinThreads": {
              "type": "integer",
              "minimum": 1,
              "description": "Sets the minimum number of threads for the thread pool."
            },
            "System.Threading.ThreadPool.MaxThreads": {
              "type": "integer",
              "minimum": 1,
              "description": "Sets the maximum number of threads for the thread pool."
            }
          }
        }
      }
    },
    "packOptions": {
      "description": "Defines options pertaining to the packaging of the project output into a NuGet package.",
      "type": "object",
      "properties": {
        "summary": {
          "description": "A short description of the package.",
          "type": "string"
        },
        "tags": {
          "description": "A space-delimited list of tags and keywords that describe the package.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "owners": {
          "description": "List of owners of the package.",
          "type": "array",
          "uniqueItems": true,
          "items": {
            "type": "string"
          }
        },
        "releaseNotes": {
          "description": "A description of the changes made in each release of the package.",
          "type": "string"
        },
        "iconUrl": {
          "description": "A URL for the image to use as the icon for the package. This should be a 32x32-pixel .png file that has a transparent background.",
          "type": "string"
        },
        "licenseUrl": {
          "description": "A link to the license for the package.",
          "type": "string"
        },
        "requireLicenseAcceptance": {
          "description": "A Boolean value that specifies whether the client needs to ensure that the package license (described by licenseUrl) is accepted before the package is installed.",
          "type": "boolean",
          "default": false
        },
        "repository": {
          "type": "object",
          "description": "Contains information about the repository where the project is stored.",
          "properties": {
            "type": {
              "type": "string",
              "enum": ["git"],
              "default": "git"
            },
            "url": {
              "type": "string",
              "format": "uri"
            }
          },
          "additionalProperties": {
            "type": "string"
          }
        },
        "files": {
          "allOf": [
            {
              "$ref": "#/definitions/buildOptions/properties/compile"
            },
            {
              "description": "Defines glob patterns and file paths to include in the generated NuGet package."
            }
          ]
        }
      }
    },
    "publishOptions": {
      "allOf": [
        {
          "$ref": "#/definitions/buildOptions/properties/compile"
        },
        {
          "description": "Defines glob patterns and file paths to include in publish output."
        }
      ]
    },
    "configType": {
      "type": "object",
      "properties": {
        "dependencies": {
          "$ref": "#/definitions/dependencies"
        },
        "compilationOptions": {
          "$ref": "#/definitions/compilationOptions"
        },
        "buildOptions": {
          "$ref": "#/definitions/buildOptions"
        },
        "frameworkAssemblies": {
          "$ref": "#/definitions/dependencies"
        },
        "imports": {
          "type": ["string", "array"],
          "description": "Allow packages supporting these frameworks to be installed in this target, regardless of the compatibility rules.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "libraryIncludeFlag": {
      "type": "string",
      "enum": [
        "all",
        "runtime",
        "compile",
        "build",
        "contentFiles",
        "native",
        "analyzers",
        "none"
      ]
    },
    "libraryIncludeFlags": {
      "oneOf": [
        {
          "$ref": "#/definitions/libraryIncludeFlag"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/definitions/libraryIncludeFlag"
          }
        }
      ]
    },
    "dependencies": {
      "type": "object",
      "additionalProperties": {
        "type": ["string", "object"],
        "properties": {
          "version": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "default": "default",
            "enum": ["default", "build", "platform"]
          },
          "target": {
            "type": "string",
            "description": "Restrict this dependency to matching only a Project or a Package.",
            "enum": ["project", "package"]
          },
          "include": {
            "$ref": "#/definitions/libraryIncludeFlags"
          },
          "exclude": {
            "$ref": "#/definitions/libraryIncludeFlags"
          },
          "suppressParent": {
            "$ref": "#/definitions/libraryIncludeFlags"
          }
        }
      },
      "description": "Each dependency is defined by a name and a version. Dependencies are resolved from NuGet feeds defined by your package sources and projects located in the directories specified by the 'global.json' file."
    },
    "script": {
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "description": "A command line script or scripts.\r\rAvailable variables:\r%project:Directory% - The project directory\r%project:Name% - The project name\r%project:Version% - The project version"
    }
  },
  "id": "https://json.schemastore.org/project-1.0.0-rc2.json",
  "properties": {
    "authors": {
      "description": "The author of the application.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "packInclude": {
      "description": "[Deprecated] Pairs of destination folders and glob patterns specifying additional files to include in the output NuGet package. (data type: JSON map). Example: { \"tools/\": \"tools/**/*.*\" }. Use 'files' in 'packOptions' instead.",
      "type": "object"
    },
    "publishExclude": {
      "description": "[Deprecated] Glob pattern to specify files to exclude from publish output. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'publishOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["obj/**/*.*", "bin/**/*.*", "**/.*/**"]
    },
    "compile": {
      "description": "[Deprecated] Glob pattern to specify files to compile. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'compile' in 'buildOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "**/*.cs"
    },
    "compileExclude": {
      "description": "[Deprecated] Glob pattern to specify files to exclude from compilation. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'compile' in 'buildOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "compileFiles": {
      "description": "[Deprecated] Files to include in compilation (overrides 'compileExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]. Use 'compile' in 'buildOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "content": {
      "description": "[Deprecated] Glob pattern to specify files to include as content. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "**/*"
    },
    "contentExclude": {
      "description": "[Deprecated] Glob pattern to specify files to exclude from the content list. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "contentFiles": {
      "description": "[Deprecated] Files to include as content (overrides 'contentExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "preprocess": {
      "description": "Glob pattern to specify files to use for preprocessing. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "compiler/preprocess/**/*.cs"
    },
    "preprocessExclude": {
      "description": "Glob pattern to specify files to exclude from use for preprocessing. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "preprocessFiles": {
      "description": "Files to include to use for preprocessing (overrides 'preprocessExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "resource": {
      "description": "[Deprecated] Glob pattern to specify files to include as resources. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'embed' in 'buildOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["compiler/resources/**/*", "**/*.resx"]
    },
    "resourceExclude": {
      "description": "[Deprecated] Glob pattern to specify files to exclude from the resources list. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'embed' in 'buildOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "resourceFiles": {
      "description": "[Deprecated] Files to include as resources (overrides 'resourceExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]. Use 'embed' in 'buildOptions' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "shared": {
      "description": "Glob pattern to specify files to share with dependent projects. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": "compiler/shared/**/*.cs"
    },
    "sharedExclude": {
      "description": "Glob pattern to specify files to exclude from sharing with dependent projects. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "sharedFiles": {
      "description": "Files to include for sharing with dependent projects (overrides 'sharedExclude'). (data type: string or array). Example: [ \"Folder1/File1.ext\", \"Folder2/File2.ext\" ]",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "exclude": {
      "description": "[Deprecated] Glob pattern to indicate files to exclude from other glob patterns, in addition to the default patterns specified in 'excludeBuiltIn'. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'exclude' within 'compile' or 'embed' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      }
    },
    "excludeBuiltIn": {
      "description": "[Deprecated] Default glob pattern to indicate files to exclude from other glob patterns. (data type: string or array with glob pattern(s)). Example: [ \"Folder1/*.ext\", \"Folder2/*.ext\" ]. Use 'exclude' within 'compile' or 'embed' instead.",
      "type": ["string", "array"],
      "items": {
        "type": "string"
      },
      "default": ["bin/**", "obj/**", "**/*.xproj"]
    },
    "testRunner": {
      "description": "The name of the test runner to use with this project",
      "type": "string"
    },
    "commands": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "compilationOptions": {
      "$ref": "#/definitions/compilationOptions"
    },
    "buildOptions": {
      "$ref": "#/definitions/buildOptions"
    },
    "packOptions": {
      "$ref": "#/definitions/packOptions"
    },
    "runtimeOptions": {
      "$ref": "#/definitions/runtimeOptions"
    },
    "publishOptions": {
      "$ref": "#/definitions/publishOptions"
    },
    "configurations": {
      "type": "object",
      "description": "Configurations are named groups of compilation settings. There are two defaults built into the runtime: 'Debug' and 'Release'.",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "compilationOptions": {
            "$ref": "#/definitions/compilationOptions"
          },
          "buildOptions": {
            "$ref": "#/definitions/buildOptions"
          }
        }
      }
    },
    "dependencies": {
      "$ref": "#/definitions/dependencies"
    },
    "copyright": {
      "description": "Copyright details for the package.",
      "type": "string"
    },
    "iconUrl": {
      "description": "[Deprecated] A URL for the image to use as the icon for the package. This should be a 32x32-pixel .png file that has a transparent background. Use this in 'packOptions' instead.",
      "type": "string"
    },
    "licenseUrl": {
      "description": "[Deprecated] A link to the license for the package. Use this in 'packOptions' instead.",
      "type": "string"
    },
    "requireLicenseAcceptance": {
      "description": "[Deprecated] A Boolean value that specifies whether the client needs to ensure that the package license (described by licenseUrl) is accepted before the package is installed. Use this in 'packOptions' instead.",
      "type": "boolean",
      "default": false
    },
    "owners": {
      "description": "[Deprecated] List of owners of the package. Use this in 'packOptions' instead.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "projectUrl": {
      "description": "A URL for the home page of the package.",
      "type": "string"
    },
    "summary": {
      "description": "[Deprecated] A short description of the package. Use this in 'packOptions' instead.",
      "type": "string"
    },
    "tags": {
      "description": "[Deprecated] A space-delimited list of tags and keywords that describe the package. Use this in 'packOptions' instead.",
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string"
      }
    },
    "title": {
      "description": "The human-friendly title of the package",
      "type": "string"
    },
    "releaseNotes": {
      "description": "[Deprecated] A description of the changes made in each release of the package. Use this in 'packOptions' instead.",
      "type": "string"
    },
    "language": {
      "description": "The locale ID for the package, such as en-us.",
      "type": "string"
    },
    "description": {
      "description": "The description of the project/package.",
      "type": "string"
    },
    "frameworks": {
      "description": "Target frameworks that will be built, and dependencies that are specific to the build of this project for that framework.",
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/configType"
      }
    },
    "namedResource": {
      "type": "object",
      "description": "Overrides the generated resource names with custom ones.",
      "additionalProperties": {
        "type": "string"
      }
    },
    "repository": {
      "type": "object",
      "description": "[Deprecated] Contains information about the repository where the project is stored. Use this in 'packOptions' instead.",
      "properties": {
        "type": {
          "type": "string",
          "enum": ["git"],
          "default": "git"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      },
      "additionalProperties": {
        "type": "string"
      }
    },
    "scripts": {
      "type": "object",
      "description": "Scripts to execute during the various stages.",
      "properties": {
        "precompile": {
          "$ref": "#/definitions/script"
        },
        "postcompile": {
          "$ref": "#/definitions/script"
        },
        "prepack": {
          "$ref": "#/definitions/script"
        },
        "postpack": {
          "$ref": "#/definitions/script"
        },
        "prepublish": {
          "$ref": "#/definitions/script"
        },
        "postpublish": {
          "$ref": "#/definitions/script"
        },
        "prerestore": {
          "$ref": "#/definitions/script"
        },
        "postrestore": {
          "$ref": "#/definitions/script"
        },
        "prepare": {
          "$ref": "#/definitions/script"
        }
      }
    },
    "version": {
      "description": "The version of the project/package. Examples: 1.2.3, 1.2.3-beta, 1.2.3-*",
      "type": "string"
    },
    "tools": {
      "description": "Project-specific command line tools accessible when in the project.json directory.",
      "type": "object",
      "additionalProperties": {
        "type": ["string", "object"],
        "properties": {
          "version": {
            "type": "string"
          }
        }
      }
    },
    "runtimes": {
      "description": "List of runtime identifiers supported by this project (used when building standalone applications).",
      "type": "object"
    }
  },
  "title": "JSON schema for .NET Core project.json files",
  "type": "object"
}