MSBuild说“Label”属性仅在导入特定目标文件时无法识别

时间:2015-01-13 00:50:41

标签: msbuild

当我一起使用以下导入时:

<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')" />

我收到了这个构建错误:

  

元素&lt; Import&gt;中的属性“Label”无法识别

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

有人可以解释发生了什么吗?看起来第二个目标文件的内容正在改变正在使用的MSBuild的版本...不知何故。

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

1 个答案:

答案 0 :(得分:2)

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

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