仅当我导入特定目标文件时,MSBuild 才显示 'Label' 属性无法识别

MSBuild says 'Label' attribute unrecognized only when I import a particular targets file

当我同时使用以下导入时:

<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" />
<Import Project="$(SolutionDir)\packages\SpecFlow.1.9.0\tools\TechTalk.SpecFlow.targets" Condition="Exists('$(SolutionDir)\packages\SpecFlow.1.9.0')" />

我收到此构建错误:

The attribute "Label" in element <Import> is unrecognized

我可以从第一个 Import 元素中删除 Label 属性或完全删除第二个 import 元素以消除错误。

谁能解释一下这是怎么回事?似乎第二个目标文件的内容正在改变正在使用的 MSBuild 版本......不知何故。

注意:您可以通过将 SlowCheetah 和 Specflow NuGet 包添加到您的项目中来获取这些目标。

虽然表现为 MsBuild 错误,但这实际上是 SpecFlow 的问题(检查完整错误,行号指向 TechTalk.SpecFlow.targets,它调用从 specflow.exe 中导入的 GenerateAll 任务TechTalk.SpecFlow.tasks): SpecFlow 的 NuGet 包的 dll 是针对 .Net35 构建的,它不支持 PropertyGroup 上的 Label 属性。因此,当您向它传递一个项目文件(例如您的项目文件)时,它恰好在某处包含这样的标签,specflow 失败了。

SpecFlow 声称可以与 .Net40 一起使用,因此您可以自己从源代码构建针对 .Net40 的 NuGet 包,然后使用它而不是在线版本。或者使用 SpecFlow 提出支持请求:毕竟 .Net35 已经很老了。