Visual Studio 2022发布时Microsoft.TypeScript.MSBuild误删TS生成文件的解决咨询
解决Visual Studio 2022发布时TypeScript编译输出被删除的问题
问题说明
使用Visual Studio 2022发布项目时,所有.d.ts、tsBuildInfoFile文件以及此前TypeScript编译生成的.js文件都会被删除,但常规构建(无论Release还是Debug模式)时不会出现该问题。查看Microsoft.TypeScript.MSBuild NuGet包的Microsoft.TypeScript.targets文件,发现存在多个负责清理TS编译输出的Target:
<Target Name="TypeScriptDeleteCompilerOutput" ... <Target Name="TypeScriptDeleteOutputFromOtherConfigs" ... <Target Name="TypeScriptBuildModeClean" ...
解决方案
要阻止这些清理Target在发布阶段运行,可在项目的.csproj文件中添加以下配置:
方法1:禁用发布阶段的特定清理Target
直接覆盖这些Target的执行条件,让它们仅在非发布场景下运行:
<!-- 禁止发布时执行TS编译输出清理 --> <Target Name="TypeScriptDeleteCompilerOutput" BeforeTargets="TypeScriptCompile" Condition="'$(PublishProfileName)' == ''" /> <Target Name="TypeScriptDeleteOutputFromOtherConfigs" BeforeTargets="TypeScriptCompile" Condition="'$(PublishProfileName)' == ''" /> <Target Name="TypeScriptBuildModeClean" BeforeTargets="TypeScriptCompile" Condition="'$(PublishProfileName)' == ''" />
核心逻辑:通过Condition="'$(PublishProfileName)' == ''"判断当前是否为发布操作,仅当无发布配置名称(即常规构建)时,才执行这些清理Target。
方法2:修改发布清理的文件排除规则
如果方法1无效,可调整发布阶段的清理行为,直接排除TS相关输出文件:
<PropertyGroup> <!-- 发布清理时跳过TS编译生成的文件 --> <ExcludeFromClean>$(ExcludeFromClean);**/*.d.ts;**/*.js;**/*.tsbuildinfo</ExcludeFromClean> </PropertyGroup>
此配置会让发布流程的清理步骤忽略指定的TS相关文件。
版本适配
以上方案适用于Visual Studio 17.4.1、Microsoft.TypeScript.MSBuild NuGet包4.8.4版本。
内容的提问来源于stack exchange,提问作者user764754
相关产品推荐
相关产品推荐

