Web Essentials:编译构建中的所有TypeScript文件不起作用

4 visual-studio typescript web-essentials

正如标题所说:我有这个选项通过激活Tools> Options> Web Essentials窗口,但文件不会在构建编译.没有警告或错误,专用于Web Essentials的"输出"面板显示有关编译内容的消息,但实际上并未执行任何操作.实际上没有输出出现在输出中的那些文件.

有没有办法找出它到底在做什么?我已经对项目文件进行了手动修改.我没有在项目文件中看到任何与Web Essentials相关的内容.

有没有其他方法来解决这个问题?

jfo*_*ira 7

即使使用WebEssentials来控制是否应该在构建工作中编译所有文件,它也可能会带来一些问题:

  • 如果您正在使用构建计算机,与TFS等持续集成,则构建过程将不会应用相同的规则,因为WebEssentials是Visual Studio扩展,并且构建过程无法访问;

  • 您需要重建项目以测试您的更改,除非您还将WebEsentials选项"在保存时编译TypeScript"设置为true,如果您在构建期间进行编译,则可能有点多余;

解决方案:

  • 保持WebEssentials"保存时编译TypeScript"设置为true;
  • 将TypeScript .targets文件添加到.csproj文件中.为此,使用文本编辑器在Visual Studio外部打开YourProject.csproj文件:
  • 将"导入部分"更改为如下所示:
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
.
.
.
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" />
Run Code Online (Sandbox Code Playgroud)

这足以确保在构建期间使用默认选项调用TypeScript编译器来构建所有.js文件.

  • 如果希望使用自定义编译器选项构建文件,请为每个构建定义设置设置(例如,调试/发布):
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    .
    .
    .
    <TypeScriptTarget>ES5</TypeScriptTarget>
    <TypeScriptIncludeComments>false</TypeScriptIncludeComments>
    <TypeScriptSourceMap>false</TypeScriptSourceMap>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

此设置还允许您为每个项目设置不同的设置,这有利于灵活性.

在构建过程中,将使用当前构建定义中定义的设置调用TypeScript编译器.例如,在上面的设置中将TypeScriptTarget设置为ES5时,执行的命令行将类似于

tsc.exe --target ES5
Run Code Online (Sandbox Code Playgroud)

请注意,只会处理标记为BuildAction = TypeScriptCompile的文件.您可以在解决方案资源管理器,属性面板中检查/更改文件的BuildAction:

设置TypeScript文件构建操作