繁体   English   中英

如何防止visual studio 2017构建javascript?

[英]How to prevent visual studio 2017 from build javascript?

我今天升级到 VS2017,每次我在我的 Web 应用程序项目中更改某些内容时,我都会看到这一点 - 构建再次构建我的所有 javascript(我使用 webpack 作为客户端)。 这很酷,但需要很多时间,所以我很乐意配置它以停止构建 javascript(我会在它发生变化时自己构建它)。

简单的答案

在您的 csproj 文件中,将以下行添加到现有的 PropertyGroup 块中:

<PropertyGroup>
     <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
</PropertyGroup>

如果将.ts.tsx文件添加到您的项目导致您的项目文件被修改,您可能需要应用以下修复。 有关更多详细信息,请参阅错误报告

 <ItemGroup>
      <None Remove="**/*.ts;**/*.tsx" />
      <Content Remove="**/*.ts;**/*.tsx" />
      <TypeScriptCompile Include="**/*.ts;**/*.tsx" />
 </ItemGroup>

tsconfig.json文件添加到您的项目根目录,并确保设置了以下设置:

"compileOnSave": false,

最后,重启 Visual Studio


详情

Nuget 在[ProjectName].csproj.nuget.g.targetsobj目录中创建一个名为[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>

我正在使用 webpack 的 ts-loader 来编译和打包我的 TypeScript 文件。 所以我不再需要 Visual Studio 在每次构建时执行的自动编译。 在 Visual Studio 2017 中,我刚刚从 tsconfig.json 中注释掉了以下行以停止自动编译:

"outDir": "./wwwroot/build/",

TypeScriptCompileBlocked设置为true对我来说还不够。 什么工作是去项目属性 - 有一个 TypeScript Build 选项卡,您可以在其中配置 TS 编译,包括 Compile On Save 选项:

在此处输入图片说明

它导致以下内容被添加到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 />

我遇到了同样的问题 - 每次 Visual Studio 重建项目时,Webpack 都会重建我的 Typescript 文件,尽管有

<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>

在我的项目文件中,和

"compileOnSave": false,
  "buildOnSave": false

在我的 tsconfig.json 文件中。

原来这是因为我安装了 NPM Task Runner VS 扩展( https://marketplace.visualstudio.com/items?itemName=MadsKristensen.NPMTaskRunner ),并且在 Task Runner Explorer 中有一个绑定到“Before Build”的构建任务' 事件。 我不需要这个扩展,所以我只是卸载了它。

注意:我不需要 Webpack 在 VS 构建上重建,因为我让它监视我的文件并在我进行更改时重建,通过此扩展名: https ://marketplace.visualstudio.com/items?itemName=MadsKristensen.WebPackTaskRunner

抱怨 .ts 文件的错误:当我尝试重建包含一些打字稿文件的 VS2017 Web 项目时出现构建错误。 错误看起来像这些Error TS1005 (TS) '?' expected. C:\\...\\...project1 (tsconfig or jsconfig project) C:\\\\...\\...project1 \\node_modules\\@storybook\\addon-knobs\\dist\\type-defs.d.ts Error TS1005 (TS) '?' expected. C:\\...\\...project1 (tsconfig or jsconfig project) C:\\\\...\\...project1 \\node_modules\\@storybook\\addon-knobs\\dist\\type-defs.d.ts

没有真正有帮助的答案......到目前为止:在花费数小时在堆栈中上下搜索之后,我意识到将错误的项目文件与另一个也有打字稿但没有编译错误的项目文件进行比较可能很简单。

这很简单..但它有效:

以下是步骤:

  1. 卸载项目和编辑的项目文件

  2. 搜索“TypeScript”(精确大小写和精确单词选项)并找到两个匹配的导入:

    <Import Project="$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.Default.props')" />

<Import Project="$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets" Condition="Exists('$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets')" />

  1. 然后我去了编译 .ts 文件没有问题的项目,看看,它的条件不同:

    <Import Project="$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets" Condition="false" />

  2. 所以我只是用 3) 中的一个替换了 Import 并重新加载了项目并按预期成功编译。

在完美的世界中, Condition="Exists ('$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\TypeScript\\Microsoft.TypeScript.targets')" 可能与Condition="false"完全相同,但有不是,即使在我的机器中也不存在这样的文件夹(C:\\Program Files (x86)\\MSBuild\\15.0)。

有时,常识比深入的知识更有帮助,这就是那个时候。

就我而言(Visual Studio 2017 15.9.25),我必须将以下属性添加到 .csproj

<PropertyGroup>
   <TypeScriptCompileOnSaveEnabled>false</TypeScriptCompileOnSaveEnabled>
</PropertyGroup>

更多详情:

我阅读了这篇文章https://www.typescriptlang.org/docs/handbook/compiler-options-in-msbuild.html并意识到 VS 将基于文件Microsoft.TypeScript.targets构建 TS 。

在这个文件中,我看到它也基于这个属性来控制 Compile-on-Save TypeScriptCompileOnSaveEnabled 因此,在 .csproj 中将此属性设置为false将在保存时停止编译打字稿。 (请注意,在执行此操作之前,我已经尝试在 tsconfig.json 文件中设置"compileOnSave": false ,但没有帮助)

完成以下设置以及 TypeScriptCompileBlocked 为 true。

在应用程序的 .csproj 文件中将以下条件设置为 false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM