【问题标题】:devenv always rebuilds my project, because a typescript file is newer than a pdb filedevenv 总是重建我的项目,因为打字稿文件比 pdb 文件新
【发布时间】:2014-04-04 03:38:47
【问题描述】:

我有一个带有打字稿的项目。 devenv 不断重建这个项目。诊断输出包含这一行:

Project 'Benefits' is not up to date. Input file 'C:\abc\UI\BenefitsWeb\Scripts\Benefits\Modules\PPACA\ApprovalScreen.ts' is modified after output file 'C:\abc\UI\BenefitsWeb\bin\Dayforce.Web.Benefits.pdb'.

那么,我该如何解决这个问题呢?上述打字稿文件确实比 PDB 更新。但是 PDB 不是打字稿编译的输出!!!

这是我编译打字稿文件的方法:

<PropertyGroup>
  <CompileDependsOn>
    $(CompileDependsOn);
    CompileTypeScript
  </CompileDependsOn>
</PropertyGroup>

<Target Name="GetInputs">
  ...
</Target>

<Target Name="GetOutputs">
  ...
</Target>

<Target Name="CompileTypeScript" DependsOnTargets="GetInputs;GetOutputs" Inputs="@(InputTypeScripts)" Outputs="@(OutputJavaScripts)">
  ...
</Target>

项目指定TypeScriptCompile项目组中的打字稿文件,例如:

<TypeScriptCompile Include="Scripts\Benefits\Modules\PPACA\CalendarSetup.ts" />

当然,@(OutputJavaScripts) 仅列出预期的 .js 文件。那里没有 PDB 文件。

那么 devenv 是如何将 typescript 文件与 PDB 文件匹配的呢?我该如何解决?

编辑 1

我想澄清一下。它实际上并没有重新编译 typescript 或 C# 文件(这是它第一次重新编译 typescript 文件,但仅此而已)。它开始构建,因为 typescript 比 PDB 更新,但随后它认识到 PDB 依赖项实际上没有改变。 javascript 文件也是如此——它们都是最新的。所以实际上并没有重建任何东西,但是为什么要首先进入构建序列!

【问题讨论】:

    标签: msbuild devenv


    【解决方案1】:

    我遇到了类似的问题,但使用的是 txt 文件而不是打字稿文件。我打开csproj 文件,找到声明文本文件的部分,并将其移到声明一些项目引用的部分上方。基本上,高于任何二进制类型的文件。重新加载项目后,除非其中的文件实际发生更改,否则 MSBuild 不会构建它。

    【讨论】:

    • 这真的很有趣。您可以在更改前后从 csproj 文件中发布代码 sn-p 吗?
    【解决方案2】:

    js 文件也有类似的问题。将其Build Action 设置为None,重新编译,然后返回Content,重新编译即可解决问题。

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 1970-01-01
      • 2017-11-28
      • 2010-11-09
      • 2019-08-23
      • 2019-07-09
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      相关资源
      最近更新 更多