This commit is contained in:
Bill Ticehurst 2017-10-24 17:46:22 -07:00
Родитель 686bf0ed7c
Коммит 18830defbc
11 изменённых файлов: 985 добавлений и 0 удалений

Просмотреть файл

@ -87,3 +87,5 @@
href: build/tsc.md
- name: Building with NuGet
href: build/nuget.md
- name: Troubleshooting
href: troubleshooting/index.md

Просмотреть файл

@ -0,0 +1,117 @@
# Troubleshooting
## Language service is disabled
You may get a bar along the top of the editor with text that reads "The JavaScript language
service has been disabled for the following project(s)", as shown below.
<img src="../../images/jslsdisabledpopup.png" width="970px"/>
This limit is enabled by default to reduce the amount of memory that the JavaScript language
service in Visual Studio 2017 might consume, as loading high volumes of JavaScript code is
often unintentional, or suboptimal. See the section below on "Reducing the amount of source
loaded" for ways to configure this.
## Excessive CPU and/or memory usage
High CPU usage or memory usage by the Node.exe process that runs the JavaScript and TypeScript
language service is often caused by the amount of code loaded that needs to be analyzed. As a
first step, verify it is indeed the JavaScript/TypeScript language service process consuming the
resources. This is best done using Task Manager (most easily launched with Ctrl + Shift + Esc),
selecting "More details" in the bottom left if necessary, going to the "Details" tab, and adding
the "Command line" column (right click on the column headings and click on "Select columns"). The
language service process is the Node.exe process running the `tsserver.js` script, as shown below:
<img src="../../images/taskmanager.png" width="1800px"/>
If it is indeed the offending process, often the best way to reduce load is to reduce the amount
of source code analyzed, as shown below.
## Reducing the amount of source loaded
By default, without a `tsconfig.json` file present, a Visual Studio 2017 project will create
a TypeScript "context" that includes all the TypeScript files, and another for any JavaScript files. These
contexts may be controlled somewhat with TypeScript settings in the Visual Studio project file, however
for more control over the "contexts" and their settings, adding `tsconfig.json` files is recommended.
If one or more `tsconfig.json` files are present in a project, then a "context" will be created for
each `tsconfig.json` file, and any files not belonging to one of these contexts, will be placed into
a "Miscellaneous" context with default settings.
The language service works by statically analyzing the source code, and attempting to infer the shape
and types of the code; this is what powers the editor completion lists, signature help, goto definition, etc.
For TypeScript code, or JavaScript code with JsDoc annotations, this can be highly effective, however
for many JavaScript files - especially large libraries - this results in a lot of work, with often limited
results.
For some common JavaScript libraries, the langauge service can recognize the library files, and will
automatically fetch the type definitions for it rather than process the JavaScript code directly. For
some project structures however, this is insufficient, and assisting the language service via explicit
configuration can be highly beneficial.
The simpliest way to avoid loading large Javascript libraries, but still provide good IntelliSense, is to
have all such code under common directories which can be excluded from the context, and then listing the
libraries to fetch and include the type definitions for explicitly. For example, in the below configuration,
the large JavaScript libraries are included under the "js/lib" and "vendor" directories, so these have
been listed under the "exclude" setting. The "typeAcquisition" configuration is then provided to fetch and
include the definitions for the excluded libraries. (The other settings in this configuration file will be
explained further below).
```json
{
"compilerOptions": {
"allowJs": true,
"noEmit": true,
"disableSizeLimit": true,
"skipLibCheck": true
},
"typeAcquisition": {
"enable": true,
"include": ["knockout", "underscore", "chartist"]
},
"exclude": [
"node_modules",
"js/lib",
"vendor"
]
}
```
## Other optimizations to reduce overhead
### Project settings
The above `tsconfig.json` file contains several other options that may be beneficial, these are:
- "disableSizeLimit": This will switch off the limit on the amount of JavaScript code loaded, which
can cause the warning shown at the top of this page. Note however in doing so, there is a risk of
"out of memory" errors in the language service if more code is loaded than can be processed.
- "skipLibCheck": By default the language service will check the type definition files, ("*.d.ts" files).
For a JavaScript only project, or projects using well-tested type definition files (such as
those published via `@types` and fetched automatically), this can be of little value, so disabling
this via this configuration option can be beneficial.
- "noEmit": If the language service is not being used to "compile" the code (i.e. convert TypeScript
into JavaScript, or convert ES2015 JavaScript into ES5 JavaScript), then this option should be set.
### Editor settings
Within Visual Studio 2017, the default behavior is to create the language service contexts for every
project in a solution. In VS2017 Update 3 an option was added to only create the contexts for projects
that have files open in the editor. This can significantly reduce memory usage, but does mean that
projects without files open may contain errors that will not show in the editor while editing. (Though
the errors will still be shown when performing a build).
To enable this option, select "Tools" / "Options" from the menu, navigate to "Text Editor" / "JavaScript/TypeScript"
/ "Project", and check the setting "Only analyze projects which contain files opened in the editor".
<img src="../../images/toolsoptionsproject.png" width="940px"/>
## Gathering an ETW trace of detailed analysis
TODO: Detail where to obtain PerfView, and the command-line to use when running it.
## Useful links
The below pages go over the configuration options in more detail:
- https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
- https://www.typescriptlang.org/docs/handbook/compiler-options.html
- https://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html

Просмотреть файл

@ -158,6 +158,9 @@
<a href="build/nuget.html" name="" title="Building with NuGet">Building with NuGet</a>
</li>
</ul> </li>
<li>
<a href="troubleshooting/index.html" name="" title="Troubleshooting">Troubleshooting</a>
</li>
</ul> </div>
</div>
</div>

Просмотреть файл

@ -0,0 +1,202 @@
<!DOCTYPE html>
<!--[if IE]><![endif]-->
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Troubleshooting </title>
<meta name="viewport" content="width=device-width">
<meta name="title" content="Troubleshooting ">
<meta name="generator" content="docfx 2.26.1.0">
<link rel="shortcut icon" href="../../favicon.ico">
<link rel="stylesheet" href="../../styles/docfx.vendor.css">
<link rel="stylesheet" href="../../styles/docfx.css">
<link rel="stylesheet" href="../../styles/main.css">
<meta property="docfx:navrel" content="../../toc.html">
<meta property="docfx:tocrel" content="../toc.html">
</head>
<body data-spy="scroll" data-target="#affix">
<div id="wrapper">
<header>
<nav id="autocollapse" class="navbar navbar-inverse ng-scope" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../logo.svg" alt="">
</a>
</div>
<div class="collapse navbar-collapse" id="navbar">
<form class="navbar-form navbar-right" role="search" id="search">
<div class="form-group">
<input type="text" class="form-control" id="search-query" placeholder="Search" autocomplete="off">
</div>
</form>
</div>
</div>
</nav>
<div class="subnav navbar navbar-default">
<div class="container hide-when-search" id="breadcrumb">
<ul class="breadcrumb">
<li></li>
</ul>
</div>
</div>
</header>
<div role="main" class="container body-content hide-when-search">
<div class="sidenav hide-when-search">
<a class="btn toc-toggle collapse" data-toggle="collapse" href="#sidetoggle" aria-expanded="false" aria-controls="sidetoggle">Show / Hide Table of Contents</a>
<div class="sidetoggle collapse" id="sidetoggle">
<div id="sidetoc"></div>
</div>
</div>
<div class="article row grid-right">
<div class="col-md-10">
<article class="content wrap" id="_content" data-uid="">
<h1 id="troubleshooting">Troubleshooting</h1>
<h2 id="language-service-is-disabled">Language service is disabled</h2>
<p>You may get a bar along the top of the editor with text that reads &quot;The JavaScript language
service has been disabled for the following project(s)&quot;, as shown below.</p>
<p><img src="../../images/jslsdisabledpopup.png" width="970px"></p>
<p>This limit is enabled by default to reduce the amount of memory that the JavaScript language
service in Visual Studio 2017 might consume, as loading high volumes of JavaScript code is
often unintentional, or suboptimal. See the section below on &quot;Reducing the amount of source
loaded&quot; for ways to configure this.</p>
<h2 id="excessive-cpu-andor-memory-usage">Excessive CPU and/or memory usage</h2>
<p>High CPU usage or memory usage by the Node.exe process that runs the JavaScript and TypeScript
language service is often caused by the amount of code loaded that needs to be analyzed. As a
first step, verify it is indeed the JavaScript/TypeScript language service process consuming the
resources. This is best done using Task Manager (most easily launched with Ctrl + Shift + Esc),
selecting &quot;More details&quot; in the bottom left if necessary, going to the &quot;Details&quot; tab, and adding
the &quot;Command line&quot; column (right click on the column headings and click on &quot;Select columns&quot;). The
language service process is the Node.exe process running the <code>tsserver.js</code> script, as shown below:</p>
<p><img src="../../images/taskmanager.png" width="1800px"></p>
<p>If it is indeed the offending process, often the best way to reduce load is to reduce the amount
of source code analyzed, as shown below.</p>
<h2 id="reducing-the-amount-of-source-loaded">Reducing the amount of source loaded</h2>
<p>By default, without a <code>tsconfig.json</code> file present, a Visual Studio 2017 project will create
a TypeScript &quot;context&quot; that includes all the TypeScript files, and another for any JavaScript files. These
contexts may be controlled somewhat with TypeScript settings in the Visual Studio project file, however
for more control over the &quot;contexts&quot; and their settings, adding <code>tsconfig.json</code> files is recommended.</p>
<p>If one or more <code>tsconfig.json</code> files are present in a project, then a &quot;context&quot; will be created for
each <code>tsconfig.json</code> file, and any files not belonging to one of these contexts, will be placed into
a &quot;Miscellaneous&quot; context with default settings.</p>
<p>The language service works by statically analyzing the source code, and attempting to infer the shape
and types of the code; this is what powers the editor completion lists, signature help, goto definition, etc.
For TypeScript code, or JavaScript code with JsDoc annotations, this can be highly effective, however
for many JavaScript files - especially large libraries - this results in a lot of work, with often limited
results.</p>
<p>For some common JavaScript libraries, the langauge service can recognize the library files, and will
automatically fetch the type definitions for it rather than process the JavaScript code directly. For
some project structures however, this is insufficient, and assisting the language service via explicit
configuration can be highly beneficial.</p>
<p>The simpliest way to avoid loading large Javascript libraries, but still provide good IntelliSense, is to
have all such code under common directories which can be excluded from the context, and then listing the
libraries to fetch and include the type definitions for explicitly. For example, in the below configuration,
the large JavaScript libraries are included under the &quot;js/lib&quot; and &quot;vendor&quot; directories, so these have
been listed under the &quot;exclude&quot; setting. The &quot;typeAcquisition&quot; configuration is then provided to fetch and
include the definitions for the excluded libraries. (The other settings in this configuration file will be
explained further below).</p>
<pre><code class="lang-json">{
&quot;compilerOptions&quot;: {
&quot;allowJs&quot;: true,
&quot;noEmit&quot;: true,
&quot;disableSizeLimit&quot;: true,
&quot;skipLibCheck&quot;: true
},
&quot;typeAcquisition&quot;: {
&quot;enable&quot;: true,
&quot;include&quot;: [&quot;knockout&quot;, &quot;underscore&quot;, &quot;chartist&quot;]
},
&quot;exclude&quot;: [
&quot;node_modules&quot;,
&quot;js/lib&quot;,
&quot;vendor&quot;
]
}
</code></pre><h2 id="other-optimizations-to-reduce-overhead">Other optimizations to reduce overhead</h2>
<h3 id="project-settings">Project settings</h3>
<p>The above <code>tsconfig.json</code> file contains several other options that may be beneficial, these are:</p>
<ul>
<li>&quot;disableSizeLimit&quot;: This will switch off the limit on the amount of JavaScript code loaded, which
can cause the warning shown at the top of this page. Note however in doing so, there is a risk of
&quot;out of memory&quot; errors in the language service if more code is loaded than can be processed.</li>
<li>&quot;skipLibCheck&quot;: By default the language service will check the type definition files, (&quot;*.d.ts&quot; files).
For a JavaScript only project, or projects using well-tested type definition files (such as
those published via <code>@types</code> and fetched automatically), this can be of little value, so disabling
this via this configuration option can be beneficial.</li>
<li>&quot;noEmit&quot;: If the language service is not being used to &quot;compile&quot; the code (i.e. convert TypeScript
into JavaScript, or convert ES2015 JavaScript into ES5 JavaScript), then this option should be set.</li>
</ul>
<h3 id="editor-settings">Editor settings</h3>
<p>Within Visual Studio 2017, the default behavior is to create the language service contexts for every
project in a solution. In VS2017 Update 3 an option was added to only create the contexts for projects
that have files open in the editor. This can significantly reduce memory usage, but does mean that
projects without files open may contain errors that will not show in the editor while editing. (Though
the errors will still be shown when performing a build). </p>
<p>To enable this option, select &quot;Tools&quot; / &quot;Options&quot; from the menu, navigate to &quot;Text Editor&quot; / &quot;JavaScript/TypeScript&quot;
/ &quot;Project&quot;, and check the setting &quot;Only analyze projects which contain files opened in the editor&quot;.</p>
<p><img src="../../images/toolsoptionsproject.png" width="940px"></p>
<h2 id="gathering-an-etw-trace-of-detailed-analysis">Gathering an ETW trace of detailed analysis</h2>
<p>TODO: Detail where to obtain PerfView, and the command-line to use when running it.</p>
<h2 id="useful-links">Useful links</h2>
<p>The below pages go over the configuration options in more detail:</p>
<ul>
<li><a href="https://www.typescriptlang.org/docs/handbook/tsconfig-json.html">https://www.typescriptlang.org/docs/handbook/tsconfig-json.html</a></li>
<li><a href="https://www.typescriptlang.org/docs/handbook/compiler-options.html">https://www.typescriptlang.org/docs/handbook/compiler-options.html</a></li>
<li><a href="https://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html">https://www.typescriptlang.org/docs/handbook/declaration-files/consumption.html</a></li>
</ul>
</article>
</div>
<div class="hidden-sm col-md-2" role="complementary">
<div class="sideaffix">
<div class="contribution">
<ul class="nav">
<li>
<a href="https://github.com/billti/jsdocs/blob/master/articles/troubleshooting/index.md/#L1" class="contribution-link">Improve this Doc</a>
</li>
</ul>
</div>
<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix" id="affix">
<!-- <p><a class="back-to-top" href="#top">Back to top</a><p> -->
</nav>
</div>
</div>
</div>
</div>
<footer>
<div class="grad-bottom"></div>
<div class="footer">
<div class="container">
<span class="pull-right">
<a href="#top">Back to top</a>
</span>
<span>Copyright © 2015-2017 Microsoft<br>Generated by <strong>DocFX</strong></span>
</div>
</div>
</footer>
</div>
<script type="text/javascript" src="../../styles/docfx.vendor.js"></script>
<script type="text/javascript" src="../../styles/docfx.js"></script>
<script type="text/javascript" src="../../styles/main.js"></script>
</body>
</html>

Двоичные данные
docs/images/jslsdisabledpopup.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
docs/images/taskmanager.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 41 KiB

Двоичные данные
docs/images/toolsoptionsproject.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 46 KiB

661
docs/manifest.json Normal file
Просмотреть файл

@ -0,0 +1,661 @@
{
"homepages": [],
"source_base_path": "C:/src/github/jsdocs",
"xrefmap": "xrefmap.yml",
"files": [
{
"type": "Conceptual",
"source_relative_path": "README.md",
"output": {
".html": {
"relative_path": "README.html",
"hash": "8f/sTS2A1bo/XshGr0J/OA=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/build/index.md",
"output": {
".html": {
"relative_path": "articles/build/index.html",
"hash": "gaRZE7mNobJ+sdAmjs2qvg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/build/nuget.md",
"output": {
".html": {
"relative_path": "articles/build/nuget.html",
"hash": "YOX2Fk+caniyxn5mVxKCVg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/build/tsc.md",
"output": {
".html": {
"relative_path": "articles/build/tsc.html",
"hash": "BBbXlEOTJMMVdvdTjmQroQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/configuration/index.md",
"output": {
".html": {
"relative_path": "articles/configuration/index.html",
"hash": "scoX5fnsn2z2KZo5kXWVzg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/configuration/msbuild.md",
"output": {
".html": {
"relative_path": "articles/configuration/msbuild.html",
"hash": "Bj67bjeAQPtOrnaNzQYxYg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/configuration/tsconfig.md",
"output": {
".html": {
"relative_path": "articles/configuration/tsconfig.html",
"hash": "U+qHvV6tjRpDtQy2/bk13A=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/configuration/versioning.md",
"output": {
".html": {
"relative_path": "articles/configuration/versioning.html",
"hash": "1oUoHR/SWf28pr6rldI3Lw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/debugging/index.md",
"output": {
".html": {
"relative_path": "articles/debugging/index.html",
"hash": "mHaMd6clD6BlQzK5gSWwzQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/debugging/sourcemaps.md",
"output": {
".html": {
"relative_path": "articles/debugging/sourcemaps.html",
"hash": "U6mNp1qlluMLy98n2Wkwmg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/editor/formatting.md",
"output": {
".html": {
"relative_path": "articles/editor/formatting.html",
"hash": "Q+dMMwWSulObxXQGmoaf6w=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/editor/index.md",
"output": {
".html": {
"relative_path": "articles/editor/index.html",
"hash": "Gu4+VMSAWH8d07UUk2ozpw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/editor/intellisense.md",
"output": {
".html": {
"relative_path": "articles/editor/intellisense.html",
"hash": "+ZCCZcrzAHl4kg8NaRcpSA=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/editor/linting.md",
"output": {
".html": {
"relative_path": "articles/editor/linting.html",
"hash": "S1GOD1CLkk4hDzuccFnMhg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/editor/lists.md",
"output": {
".html": {
"relative_path": "articles/editor/lists.html",
"hash": "5K6WGOJHUsI0C1TbtI3kaw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/editor/refactoring.md",
"output": {
".html": {
"relative_path": "articles/editor/refactoring.html",
"hash": "CQ9h2vEglHIuzEnHc8nFmQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/frameworks/angular.md",
"output": {
".html": {
"relative_path": "articles/frameworks/angular.html",
"hash": "/VWDnvpKUnqQYy95Cgz5lQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/frameworks/gulpwebpack.md",
"output": {
".html": {
"relative_path": "articles/frameworks/gulpwebpack.html",
"hash": "6zRhK9oUNjoXM89l0TQLDg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/frameworks/index.md",
"output": {
".html": {
"relative_path": "articles/frameworks/index.html",
"hash": "FJNo7i8KF9FeWfbCIfs0rg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/frameworks/jsx.md",
"output": {
".html": {
"relative_path": "articles/frameworks/jsx.html",
"hash": "1w4ghRhi7Zq9HdQs8VGsqQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/frameworks/vue.md",
"output": {
".html": {
"relative_path": "articles/frameworks/vue.html",
"hash": "4/+aazp761OJjKNx9bK79A=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/index.md",
"output": {
".html": {
"relative_path": "articles/index.html",
"hash": "FnUDdVIZ9UaZ5wB1NWVySA=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/azure.md",
"output": {
".html": {
"relative_path": "articles/nodejs/azure.html",
"hash": "DbxCkdomzkrM0lOlPuR+Kw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/index.md",
"output": {
".html": {
"relative_path": "articles/nodejs/index.html",
"hash": "X0bep0TMGuQWzC7HYC0SYw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/interactivewindow.md",
"output": {
".html": {
"relative_path": "articles/nodejs/interactivewindow.html",
"hash": "xlGCoj8RYdcvHTztCsyveQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/npm.md",
"output": {
".html": {
"relative_path": "articles/nodejs/npm.html",
"hash": "coElY50RY3hOm78CDqZCiw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/requirements.md",
"output": {
".html": {
"relative_path": "articles/nodejs/requirements.html",
"hash": "raha/Z73nal8dAqTHYSSCw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/taskexplorer.md",
"output": {
".html": {
"relative_path": "articles/nodejs/taskexplorer.html",
"hash": "iKPG5u3yVvcnROjvClCQdQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/nodejs/unittesting.md",
"output": {
".html": {
"relative_path": "articles/nodejs/unittesting.html",
"hash": "6orOm1PVuEox0fZQH6mRog=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/aspnet/aspnetclassic.md",
"output": {
".html": {
"relative_path": "articles/projects/aspnet/aspnetclassic.html",
"hash": "U4e6ljQDsi01LF2gxTlaIw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/aspnet/aspnetcore.md",
"output": {
".html": {
"relative_path": "articles/projects/aspnet/aspnetcore.html",
"hash": "HUxZ6YXbZ+kITQhMr5YXsA=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/aspnet/index.md",
"output": {
".html": {
"relative_path": "articles/projects/aspnet/index.html",
"hash": "QluciI3EgtaQ1TxqIwPZZg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/cordova.md",
"output": {
".html": {
"relative_path": "articles/projects/cordova.html",
"hash": "I+q/0Z3FLpa24WwK4NpbrQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/index.md",
"output": {
".html": {
"relative_path": "articles/projects/index.html",
"hash": "RpYFfRooVYySlnKI+uIqVg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/nodejs.md",
"output": {
".html": {
"relative_path": "articles/projects/nodejs.html",
"hash": "9tjETcwnhyHQf52HnsnnLg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/openfolder.md",
"output": {
".html": {
"relative_path": "articles/projects/openfolder.html",
"hash": "thxGWwO/GzcRpB9/YOe2Pg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/projects/uwp.md",
"output": {
".html": {
"relative_path": "articles/projects/uwp.html",
"hash": "voAQJV6S/3ziddMSioaBfQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Toc",
"source_relative_path": "articles/toc.yml",
"output": {
".html": {
"relative_path": "articles/toc.html",
"hash": "X31bj/3yaJxmBtM+WIkkRw=="
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/troubleshooting/index.md",
"output": {
".html": {
"relative_path": "articles/troubleshooting/index.html",
"hash": "+2E6opmzd2EkKNMVCs1GKA=="
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/types/allowjs.md",
"output": {
".html": {
"relative_path": "articles/types/allowjs.html",
"hash": "gK53IFPynLirt+keOcRDfg=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/types/ata.md",
"output": {
".html": {
"relative_path": "articles/types/ata.html",
"hash": "fi2ctAJfDA6IfRlkiY4GVw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/types/attypes.md",
"output": {
".html": {
"relative_path": "articles/types/attypes.html",
"hash": "Jj6L/VbIi0dKVxppvVjJJw=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/types/index.md",
"output": {
".html": {
"relative_path": "articles/types/index.html",
"hash": "wplMTn5vOsrJpnH5PdnVmQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "articles/types/jsdoc.md",
"output": {
".html": {
"relative_path": "articles/types/jsdoc.html",
"hash": "+eRZHRbSq/E2DnNK1qBa3w=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Resource",
"source_relative_path": "images/jslsdisabledpopup.png",
"output": {
"resource": {
"relative_path": "images/jslsdisabledpopup.png"
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Resource",
"source_relative_path": "images/taskmanager.png",
"output": {
"resource": {
"relative_path": "images/taskmanager.png"
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Resource",
"source_relative_path": "images/toolsoptionsproject.png",
"output": {
"resource": {
"relative_path": "images/toolsoptionsproject.png"
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Resource",
"source_relative_path": "images/tooltip.png",
"output": {
"resource": {
"relative_path": "images/tooltip.png"
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Resource",
"source_relative_path": "images/virtualproject.png",
"output": {
"resource": {
"relative_path": "images/virtualproject.png"
}
},
"is_incremental": false,
"version": ""
},
{
"type": "Conceptual",
"source_relative_path": "index.md",
"output": {
".html": {
"relative_path": "index.html",
"hash": "5RheSmtiRPukcqFSNJfWzQ=="
}
},
"is_incremental": true,
"version": ""
},
{
"type": "Toc",
"source_relative_path": "toc.yml",
"output": {
".html": {
"relative_path": "toc.html",
"hash": "2aZAzfypMbRePF/dmP9pjg=="
}
},
"is_incremental": false,
"version": ""
}
],
"incremental_info": [
{
"status": {
"can_incremental": true,
"incrementalPhase": "build"
},
"processors": {
"TocDocumentProcessor": {
"can_incremental": false,
"details": "Processor TocDocumentProcessor cannot suppport incremental build because the processor doesn't implement ISupportIncrementalDocumentProcessor interface.",
"incrementalPhase": "build"
},
"RestApiDocumentProcessor": {
"can_incremental": false,
"details": "Processor RestApiDocumentProcessor cannot suppport incremental build because the processor doesn't implement ISupportIncrementalDocumentProcessor interface.",
"incrementalPhase": "build"
},
"ResourceDocumentProcessor": {
"can_incremental": false,
"details": "Processor ResourceDocumentProcessor cannot suppport incremental build because the processor doesn't implement ISupportIncrementalDocumentProcessor interface.",
"incrementalPhase": "build"
},
"ConceptualDocumentProcessor": {
"can_incremental": true,
"incrementalPhase": "build"
},
"ManagedReferenceDocumentProcessor": {
"can_incremental": true,
"incrementalPhase": "build"
}
}
},
{
"status": {
"can_incremental": true,
"details": "Can support incremental post processing.",
"incrementalPhase": "postProcessing"
},
"processors": {}
}
],
"version_info": {},
"groups": [
{
"xrefmap": "xrefmap.yml"
}
]
}

Двоичные данные
images/jslsdisabledpopup.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 20 KiB

Двоичные данные
images/taskmanager.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 41 KiB

Двоичные данные
images/toolsoptionsproject.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 46 KiB