当我一起使用以下导入时:
<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')" />
我收到此构建错误:
我可以从第一个 Import 元素中删除 Label 属性或完全删除第二个 import 元素以消除错误。
有人可以解释发生了什么吗?似乎第二个目标文件的内容正在改变正在使用的 MSBuild 版本......不知何故。
注意:您可以通过将 SlowCheetah 和 Specflow NuGet 包添加到您的项目来获取这些目标。
最佳答案
虽然表现为 MsBuild 错误,但这确实是 SpecFlow 的问题(检查完整错误,行号指向 TechTalk.SpecFlow.targets,它调用从 TechTalk.SpecFlow.tasks 中的 specflow.exe 导入的 GenerateAll 任务): SpecFlow 的 NuGet 包的 dll 是针对 .Net35 构建的,它不支持 Label
上的 PropertyGroup
属性。因此,当您将一个项目文件(例如您的)传递给它时,该文件恰好包含此类 Label 某处 specflow 失败。
SpecFlow 声称可以使用 .Net40,因此您可以自己从源代码构建针对 .Net40 的 NuGet 包,然后使用它而不是在线版本。或者使用 SpecFlow 提出支持请求:毕竟 .Net35 已经很老了。
关于MSBuild 表示只有在我导入特定目标文件时才能识别 'Label' 属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27913328/