Net Core 2.1项目TFS构建报错:GetTargetFrameworkIdentifier调用语法无效
问题:.NET Core 2.1项目构建报错MSB4186
错误详情
C:\Program Files\dotnet\sdk\6.0.102\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(54,5): error MSB4186: Invalid static method invocation syntax: "[MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')". [MSBuild]::GetTargetFrameworkIdentifier Static method invocation should be of the form: $([FullTypeName]::Method()), e.g. $([System.IO.Path]::Combine(`a`, `b`)). [D:\Agents\EROS-006\_work\2\s\src\Cases.CommandHandlers\Cases.CommandHandlers.csproj]
项目文件头部配置
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netcoreapp2.1</TargetFramework> <RuntimeFrameworkVersion>2.1.4</RuntimeFrameworkVersion> <TargetLatestAspNetCoreRuntimePatch>True</TargetLatestAspNetCoreRuntimePatch> </PropertyGroup> ...
Cake构建脚本片段
Task("Build") .IsDependentOn("Version") .Does(() => { var settings = new DotNetCoreRestoreSettings() { Sources = packageSources }; DotNetCoreRestore(settings); if(useLatestMsBuild){ MSBuild(solution, new MSBuildSettings { Configuration = configuration, MaxCpuCount = maxcpucount, ArgumentCustomization = args => args .Append("/p:Version=" + versionInfo.InformationalVersion.Replace("/", "-")) .Append("/p:AssemblyVersion=" + versionInfo.AssemblySemVer) .Append("/p:FileVersion=" + versionInfo.AssemblySemVer) }); }else{ MSBuild(solution, new MSBuildSettings { Configuration = configuration, MaxCpuCount = maxcpucount, ToolVersion = MSBuildToolVersion.VS2017, Restore = true, ArgumentCustomization = args => args .Append("/p:Version=" + versionInfo.InformationalVersion.Replace("/", "-")) .Append("/p:AssemblyVersion=" + versionInfo.AssemblySemVer) .Append("/p:FileVersion=" + versionInfo.AssemblySemVer) }); } });
错误原因
- SDK与MSBuild版本不兼容:构建过程调用了.NET 6.0 SDK(路径显示为
6.0.102),该SDK目标文件中使用的[MSBuild]::GetTargetFrameworkIdentifier语法,在适配.NET Core 2.1的旧版MSBuild(如VS2017配套的MSBuild 15.x)中不被支持,语法格式不符合旧版要求。 - 版本匹配缺失:.NET Core 2.1项目需要对应版本的SDK(2.1.x)和MSBuild版本构建,系统中存在更高版本SDK时,若未明确指定版本,MSBuild会优先调用最新SDK,触发语法不兼容报错。
- Cake脚本逻辑问题:当
useLatestMsBuild为true时,未限制SDK版本,直接调用最新MSBuild必然引发版本冲突;即使指定了VS2017的MSBuild版本,若环境变量或全局SDK指向未调整,仍可能拉取高版本SDK执行构建。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

