VS2022新建ASP.NET Web API项目编译报错MSB4036:找不到FormatLocalizedString任务
在Visual Studio 2022中创建新的ASP.NET Web API项目,首次编译默认项目时触发如下MSB4036错误:
严重级别 代码 描述 项目 文件 行 抑制状态
错误 MSB4036 找不到“FormatLocalizedString”任务。请检查以下内容:1.) 项目文件中的任务名称与任务类名称是否一致。2.) 任务类是否为“公共”类并实现Microsoft.Build.Framework.ITask接口。3.) 任务是否在项目文件中正确声明,或者在“C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Current\Bin\amd64”目录下的*.tasks文件中正确声明。WebApplication5 C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VisualStudio\v17.0\TypeScript\Microsoft.TypeScript.targets 69
错误指向C:\Program Files\Microsoft Visual Studio\2022\Professional\MSBuild\Microsoft\VisualStudio\v17.0\TypeScript\Microsoft.TypeScript.targets文件,相关代码片段:
<!-- At least one SDK must be installed for FormatLocalizedString to exist, and if no SDKs are installed, there's nothing to report --> <Target Name="ReportTypeScriptVersion" BeforeTargets="Build" Condition="$(LastKnownTypeScriptVersion) != ''"> <FormatLocalizedString Condition="'$(TypeScriptVersionCheckResult)' == 'NoneSpecified'" Culture="$(PreferredUILang)" Name="TypeScriptNoVersionWarning" Arguments="$(LastKnownTypeScriptVersion)"> <Output TaskParameter="String" PropertyName="TypeScriptNoVersionWarning" /> </FormatLocalizedString> <FormatLocalizedString Condition="'$(TypeScriptVersionCheckResult)' == 'Downgrade' OR '$(TypeScriptVersionCheckResult)' == 'Upgrade'" Culture="$(PreferredUILang)" Name="TypeScriptVersionMismatchWarning" Arguments="$(TypeScriptToolsVersion);$(LastKnownTypeScriptVersion)"> <Output TaskParameter="String" PropertyName="TypeScriptVersionMismatchWarning" /> </FormatLocalizedString> <PropertyGroup> <!-- Don't emit any warnings about TS version if TypeScriptCompileBlocked is set or if there is nothing to compile --> <TypeScriptShowVersionWarning Condition="'$(TypeScriptShowVersionWarning)' == '' AND '$(TypeScriptCompileBlocked)' != 'true' AND ('@(ConfigFiles)' != '' OR '@(TypeScriptCompile)' != '')">true</TypeScriptShowVersionWarning> </PropertyGroup> <Warning Condition="'$(TypeScriptShowVersionWarning)' == 'true' AND '$(TypeScriptVersionCheckResult)' == 'NoneSpecified'" Text="$(TypeScriptNoVersionWarning)" /> <Warning Condition="'$(TypeScriptShowVersionWarning)' == 'true' AND ('$(TypeScriptVersionCheckResult)' == 'Downgrade' OR '$(TypeScriptVersionCheckResult)' == 'Upgrade')" Text="$(TypeScriptVersionMismatchWarning)" /> <Warning Condition="'$(TypeScriptBuildMode)' == 'true' AND ($(TypeScriptToolsVersion.StartsWith('2.')) OR $(TypeScriptToolsVersion.StartsWith('1.')))" Text="TypeScriptBuildMode requires TypeScriptToolsVersion 3.0 or higher" /> </Target>
项目文件内容:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /> </ItemGroup> </Project>
解决方法
方法1:禁用TypeScript版本检查
在项目文件的<PropertyGroup>节点中添加以下配置,跳过TypeScript版本相关的编译任务:
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
修改后的项目文件:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion> </PropertyGroup> <ItemGroup> <PackageReference Include="Swashbuckle.AspNetCore" Version="6.2.3" /> </ItemGroup> </Project>
方法2:修复Visual Studio的TypeScript组件
- 打开Visual Studio Installer,选择“修改”当前安装的Visual Studio 2022版本。
- 在“工作负载”中找到“ASP.NET和Web开发”,确认右侧“可选组件”列表里的“TypeScript SDK”已勾选。
- 点击“修改”按钮,完成组件的安装或修复。
方法3:手动指定TypeScript工具版本
如果项目需要使用TypeScript,可在项目文件中明确指定兼容的TypeScript版本,例如:
<TypeScriptToolsVersion>4.9.5</TypeScriptToolsVersion>
同时确保对应版本的TypeScript SDK已通过Visual Studio Installer安装。
内容的提问来源于stack exchange,提问作者winston dsouza

