4

正如标题所说:我通过 >> 窗口激活了这个选项Tools,但是文件没有在构建时编译OptionsWeb Essentials没有警告或错误,专用于 Web Essentials 的输出面板显示有关编译的消息,但实际上什么也没做。没有实际编译出现在输出中的那些文件。

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

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

4

1 回答 1

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" />

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

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

此设置还允许您对每个项目进行不同的设置,这有利于灵活性。

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

tsc.exe --target ES5

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

设置 TypeScript 文件构建操作

于 2013-05-07T11:35:53.793 回答