错误MSB4064:“VsTsc”任务不支持“ComputeInputAndOutputOnly”参数

时间:2018-02-28 11:09:16

标签: typescript msbuild tsc

升级到Typescript 2.7.2(从2.4开始)后,我在构建服务器上收到以下错误:

packages \ Microsoft.TypeScript.MSBuild.2.7.2 \ tools \ Microsoft.TypeScript.targets(378,7):错误MSB4064:“VsTsc”任务不支持“ComputeInputAndOutputOnly”参数。验证任务上是否存在参数,它是可设置的公共实例属性。

该项目将Microsoft.TypeScript.MSBuild作为包依赖项引入。 Packages.config包括:

  <package id="Microsoft.TypeScript.Compiler" version="2.7.2" targetFramework="net462" developmentDependency="true" />
  <package id="Microsoft.TypeScript.MSBuild" version="2.7.2" targetFramework="net462" developmentDependency="true" />

使用打包的编译器比在服务器上安装Typescript更好(就像在本地机器上一样),因为我们有很多构建服务器并且只要项目需要更新版本的打字稿就保持最新状态是不切实际的。

深入了解packages文件夹中的Microsoft.TypeScript.targets,我可以看到使用了违规参数:

<Target Name="CompileTypeScriptWithTSConfig"
    Condition="'$(BuildingProject)' != 'false' AND '@(ConfigFiles)' != '' AND '$(DesignTimeBuild)' != 'true'"
    DependsOnTargets="$(CompileTypeScriptDependsOn)"
    BeforeTargets="$(CompileTypeScriptBeforeTargets)"
    AfterTargets="$(CompileTypeScriptAfterTargets)"
    Inputs="@(TypeScriptInputFiles)" Outputs="@(GeneratedJavascript)">
    <!--For some reason, ItemGroup operations are occurring even when the target is skipped-->
    <!--So we use the CompileRan property to ensure the ItemGroup operations only run when it isn't skipped-->
    <CreateProperty Value="true">
      <Output TaskParameter="ValueSetByTask" PropertyName="CompileRan" />
    </CreateProperty>
    <ItemGroup>
      <emittedFiles Remove="@(emittedFiles)" Condition="'$(CompileRan)' == 'true'" />
      <GeneratedJavascript Remove="@(GeneratedJavascript)" Condition="'$(CompileRan)' == 'true'" />
    </ItemGroup>
    <VsTsc
      ToolPath="$(TscToolPath)"
      ToolExe="$(TscToolExe)"
      IsFileSystemCaseSensitive="$(IsFileSystemCaseSensitive)"
      TSJavaScriptFile="$(TSJavaScriptFile)"
      PreferredUILang="$(PreferredUILang)"
      TSConfigFile="%(TSConfigFilesWithOutputLogs.Identity)"
      YieldDuringToolExecution="$(TscYieldDuringToolExecution)"
      ProjectDir="$(TypeScriptProjectDir)"
      ToolsVersion="$(TypeScriptEffectiveToolsVersion)"
      TypeScriptCompileBlocked="$(TypeScriptCompileBlocked)"
      ComputeInputAndOutputOnly="false"
      OutputLogFile="%(TSConfigFilesWithOutputLogs.OutputLog)"
      OutputLogDirectory="$(TSCompilerOutputLogDirectory)">

      <Output TaskParameter="GeneratedJavascript" ItemName="emittedFiles" />
    </VsTsc>
    <ItemGroup>
      <GeneratedJavascript Include="@(emittedFiles)" KeepDuplicates="false" Condition="'$(CompileRan)' == 'true'" />
    </ItemGroup>
  </Target>

这可能是由于服务器上的旧版MSBuild造成的吗?服务器下载Microsoft.TypeScript.MSBuild包作为构建过程的一部分,因此我无法修改包中的目标文件。任何帮助或工作都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

我有同样的问题,需要打败我的项目时间表, 所以我现在评论这些代码,将寻找更愉快的解决方案

ComputeInputAndOutputOnly="true"
OutputLogDirectory="$(TSCompilerOutputLogDirectory)">

<Output TaskParameter="FullPathsToFiles" ItemName="TypeScriptInputFiles" />

希望有更好的解决方案