J'ai mis à jour aujourd'hui vers VS2017, et j'ai vu que chaque fois que je change quelque chose dans mon projet d'application web - la build reconstruit tout mon javascript (j'utilise webpack pour le client). C'est cool, mais cela prend beaucoup de temps, donc je serai heureux de le configurer pour arrêter la construction du javascript (et je le construirai moi-même au moment où il a changé).
Dans votre fichier csproj, ajoutez la ligne suivante au bloc PropertyGroup existant:
<PropertyGroup>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
</PropertyGroup>
Assurez-vous d'inclure vos fichiers TypeScript en tant que contenu
<ItemGroup>
<Content Include="**\*.ts" Exclude="$(GlobalExclude)" />
</ItemGroup>
Ajouter un tsconfig.json
fichier à la racine de votre projet et assurez-vous que le paramètre suivant est défini:
"compileOnSave": false,
Enfin, redémarrez Visual Studio
Nuget crée un fichier de cibles généré appelé [ProjectName].csproj.nuget.g.targets
dans le répertoire obj
de votre projet. Ce fichier cible importe Microsoft.NET.Sdk.Web.ProjectSystem.targets
qui à son tour importe Microsoft.TypeScript.targets
.
Dans le Microsoft.TypeScript.targets
fichier, la ligne suivante a un commentaire qui nous fait savoir que si cette propriété est définie sur true, la tâche de compilation TypeScript ne fera rien:
<!-- Makes the TypeScript compilation task a no-op -->
<TypeScriptCompileBlocked Condition="'$(TypeScriptCompileBlocked)' == ''">false</TypeScriptCompileBlocked>
J'utilise ts-loader de webpack pour compiler et regrouper mes fichiers TypeScript. Je n'avais donc plus besoin de la compilation automatique effectuée par Visual Studio sur chaque build. Dans Visual Studio 2017, je viens de commenter la ligne suivante de tsconfig.json pour arrêter la compilation automatique:
"outDir": "./wwwroot/build/",
J'ai eu le même problème - Webpack reconstruisait mes fichiers TypeScript chaque fois que Visual Studio reconstruisait le projet, malgré
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
dans mon fichier proj, et
"compileOnSave": false,
"buildOnSave": false
dans mon fichier tsconfig.json.
Il s'avère que c'était parce que j'avais l'extension NPM Task Runner VS installée ( https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner ), et dans Task Runner Explorer cela avait une build tâche liée à l'événement 'Before Build'. Je n'avais pas besoin de cette extension, je l'ai donc désinstallée.
Remarque: Je n'avais pas besoin de Webpack pour reconstruire sur VS build car je l'avais vu mes fichiers et reconstruit de toute façon que j'ai apporté des modifications, via cette extension: https://marketplace.visualstudio.com/items?itemName= MadsKristensen.WebPackTaskRunner
Définir TypeScriptCompileBlocked
sur true
ne me suffisait pas. Ce qui fonctionnait allait aux propriétés du projet - il y a un onglet TypeScript Build où vous pouvez configurer la compilation TS, y compris l'option Compile On Save:
Il en résulte l'ajout suivant au fichier 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 />
Effectuez le paramètre suivant avec TypeScriptCompileBlocked sur true.
Définissez la condition ci-dessous sur false dans le fichier .csproj de l'application.