今日VS2017にアップグレードし、Webアプリプロジェクトで何かを変更するたびに、ビルドがすべてのjavascriptを再ビルドすることを確認しました(クライアントにwebpackを使用しています)。クールですが、かなり時間がかかりますので、javascriptの構築を停止するように設定できます(また、変更されたときに自分で構築します)。
Csprojファイルで、次の行を既存のPropertyGroupブロックに追加します。
_<PropertyGroup>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
</PropertyGroup>
_
TypeScriptファイルがコンテンツとして含まれていることを確認してください
_<ItemGroup>
<Content Include="**\*.ts" Exclude="$(GlobalExclude)" />
</ItemGroup>
_
_tsconfig.json
_ファイルをプロジェクトルートに追加し、次の設定が設定されていることを確認します。
_"compileOnSave": false,
_
最後に、Visual Studioを再起動します
Nugetは、プロジェクトのobj
ディレクトリに_[ProjectName].csproj.nuget.g.targets
_という生成されたターゲットファイルを作成します。このターゲットファイルは_Microsoft.NET.Sdk.Web.ProjectSystem.targets
_をインポートしており、_Microsoft.TypeScript.targets
_をインポートしています。
_Microsoft.TypeScript.targets
_ファイルでは、次の行にコメントがあり、このプロパティがtrueに設定されている場合、TypeScriptコンパイルタスクは何もしないことがわかります。
_<!-- Makes the TypeScript compilation task a no-op -->
<TypeScriptCompileBlocked Condition="'$(TypeScriptCompileBlocked)' == ''">false</TypeScriptCompileBlocked>
_
Typepackファイルをコンパイルおよびバンドルするためにwebpackのts-loaderを使用しています。そのため、Visual Studioが各ビルドで実行した自動コンパイルは不要になりました。 Visual Studio 2017では、tsconfig.jsonから次の行をコメントアウトして、自動コンパイルを停止しました。
"outDir": "./wwwroot/build/",
私は同じ問題を抱えていました-Webpackは、Visual Studioがプロジェクトを再構築するたびにTypeScriptファイルを再構築していましたが、
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
私のPROJファイルで、そして
"compileOnSave": false,
"buildOnSave": false
私のtsconfig.jsonファイル。
NPM Task Runner VS拡張機能がインストールされていたため( https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner )、そしてTask Runner Explorerにビルドがあったためでした「ビルド前」イベントにバインドされたタスク。この拡張機能は必要なかったので、アンインストールしました。
注:VSビルドで再構築するためにWebpackを必要としませんでした。なぜなら、この拡張機能を使用して、ファイルを監視し、変更を加えながら再構築したからです。 https://marketplace.visualstudio.com/items?itemName= MadsKristensen.WebPackTaskRunner
TypeScriptCompileBlocked
をtrue
に設定するだけでは不十分でした。うまくいったのはプロジェクトのプロパティでした。TSコンパイルを構成できるTypeScriptビルドタブがあり、[保存時にコンパイル]オプションが含まれています。
次の結果がcsproj
ファイルに追加されます。
<TypeScriptTarget>ES5</TypeScriptTarget>
<TypeScriptJSXEmit>None</TypeScriptJSXEmit>
<TypeScriptModuleKind>ES6</TypeScriptModuleKind>
<TypeScriptCompileOnSaveEnabled>False</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />
TypeScriptCompileBlockedとともに次の設定をtrueに設定します。
アプリケーションの.csprojファイルで以下の条件をfalseに設定します。