GetReferenceNearestTargetFramwork 任务意外失败。无效框架 V4.0

GetReferenceNearestTargetFramwork task failed unexpectedly. Invalid framework V4.0

我正在尝试在 VS2019 中构建一个 VS2010 项目。我也在 VS2017 中收到此错误消息。

该项目将无法生成,因为它似乎无法将 MSbuild 4.0 识别为有效。

这是错误:

  The "GetReferenceNearestTargetFrameworkTask" task failed unexpectedly.
    System.ArgumentException: Invalid framework version 'V4.0'.
    at NuGet.Frameworks.NuGetFramework.ParseFrameworkName(String frameworkName, IFrameworkNameProvider mappings)
    at NuGet.Frameworks.NuGetFramework.Parse(String folderName, IFrameworkNameProvider mappings)
 at 

NuGet.Build.Tasks.GetReferenceNearestTargetFrameworkTask.TryParseFramework(字符串框架、字符串错误消息、MSBuildLogger 记录器、NuGetFramework& nugetFramework)

这是失败的任务:

 <GetReferenceNearestTargetFrameworkTask AnnotatedProjectReferences="@(_ProjectReferenceTargetFrameworkPossibilities)"
                                            CurrentProjectTargetFramework="$(ReferringTargetFrameworkForProjectReferences)"
                                            CurrentProjectName="$(MSBuildProjectName)"
                                            FallbackTargetFrameworks="$(AssetTargetFallback)"
                                            Condition="'@(_ProjectReferenceTargetFrameworkPossibilities->Count())' != '0' and '$(ReferringTargetFrameworkForProjectReferences)' != ''">
      <Output ItemName="AnnotatedProjects" TaskParameter="AssignedProjects" />
    </GetReferenceNearestTargetFrameworkTask>

GetReferenceNearestTargetFrameworkTask 将在构建过程中调用。

并看到 Condition="'@(_ProjectReferenceTargetFrameworkPossibilities->Count())' != '0' and '$(ReferringTargetFrameworkForProjectReferences)' != ''",当当前项目有 project reference 到其他项目时,此任务将 运行。

如果执行此任务,<TargetFrameworkVersion> 的值将从 NuGet.Build.Tasks.dll 传递给 GetReferenceNearestTargetFrameworkTask class。而且它无法识别V4.0,在VS2019中,framewrok版本以v开头,而不是V

所以 解决方法 是打开 xx.csproj 文件,并将 <TargetFrameworkVersion>V4.0</TargetFrameworkVersion> 更改为 <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> 和 运行重建。希望对您有所帮助:)