You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Razor类库项目中添加TypeScript文件后出现交替构建失败的问题求助

在Razor类库项目中添加TypeScript文件后出现交替构建失败的问题求助

看起来你遇到了一个挺棘手的交替构建失败问题,我来帮你分析下可能的原因和解决办法:

问题原因分析

这个交替失败的情况,本质是MSBuild的静态Web资产任务(StaticWebAssets)和TypeScript编译任务的执行时机不匹配导致的:

  • 第一次Rebuild时,TypeScript先完成编译,生成了wwwroot/js/file1.js,StaticWebAssets任务能正常找到这个文件,构建成功;
  • 第二次Rebuild时,Rebuild的清理步骤会先删掉所有生成文件,但StaticWebAssets任务在TypeScript重新编译生成文件之前就去查找目标js文件,自然找不到就报错;
  • 第三次Rebuild时,TypeScript编译又抢在了StaticWebAssets之前完成,所以又能成功,如此循环就形成了交替失败的现象。

具体解决办法

这里给你几个可行的修复方案,你可以根据自己的项目需求选择:

1. 强制TypeScript编译在StaticWebAssets之前执行

直接在你的test1.csproj文件里添加一个自定义目标,确保StaticWebAssets任务必须等TypeScript编译完成后再启动:

<Target Name="EnsureTypeScriptCompiledBeforeStaticWebAssets" BeforeTargets="DefineStaticWebAssets">
  <MSBuild Projects="$(MSBuildProjectFile)" Targets="TypeScriptCompile" />
</Target>

这个方案最直接,不需要改动现有输出目录,只需要调整任务顺序就能解决问题。

2. 调整TypeScript输出目录,通过复制任务同步到wwwroot

把TypeScript的输出目录从wwwroot/js改成项目内的其他目录(比如dist/js),再通过MSBuild任务把编译后的文件复制到wwwroot,避开StaticWebAssets的直接依赖:

  • 首先修改tsconfig.json的outDir配置:
    {
      "compilerOptions": {
        "target": "ES6",
        "module": "ES6",
        "outDir": "./dist/js",
        "strict": true
      },
      "include": [ "*.ts" ]
    }
    
  • 然后在test1.csproj里添加复制任务:
    <Target Name="CopyTypeScriptOutputToWwwroot" AfterTargets="TypeScriptCompile">
      <Copy SourceFiles="$(ProjectDir)dist/js/**/*.js" DestinationFolder="$(ProjectDir)wwwroot/js" />
    </Target>
    

3. 禁用StaticWebAssets功能(如果项目不需要)

如果你的Razor类库不需要对外提供静态Web资产,直接在test1.csproj里禁用这个任务即可:

<PropertyGroup>
  <EnableStaticWebAssets>false</EnableStaticWebAssets>
</PropertyGroup>

关于复现问题

这个问题在你使用的VS 17.14.13 + TypeScript MSBuild 5.9.2的组合下是可以复现的,属于工具链任务顺序的兼容性问题,并不是你配置出错了哦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:19:51