MSBuild.ExtensionPack.tasks从MSBuild主项目文件继承变量

时间:2019-03-09 08:26:24

标签: visual-studio msbuild msbuildextensionpack

情况: 当我从MSBuild(使用VS Build Tools 2017)进行构建时,$(ExtensionTasksPath)变量没有任何值 从主msbuild文件中,当我使用集成的VS构建时,MSBuild值从主文件传递到MSBuild.ExtensionPack.tasks,这是预期的行为,为什么会发生?为了测试该特定案例,我不使用任何属性。

1 个答案:

答案 0 :(得分:0)

  

那是预期的行为,为什么会发生?

我认为这不是我们所期望的。当我在VM上进行测试时,VS Build Tools2017的msbuild与VS IDE的msbuild具有相同的值。

  

由于这种行为,我有一些建议可以帮助您解决麻烦   射击:

1。首先,确保两个方案都成功构建。

2。如上所述,您在单独的VM中运行它们,请确保两个被测文件是相同的并且是整个解决方案文件夹。(solution目录下的package文件夹很有意义)

3。签入.xxproj文件,检查是否存在<Import Project="..\packages\MSBuild.Extension.Pack.1.9.1\build\net40\MSBuild.Extension.Pack.targets" ...>

我发现$(ExtensionTasksPath)属性在MSBuild.Extension.Pack.targets文件中定义,并且该文件通过<Import>标签导入到.xxproj文件中。

在我的示例项目中查看下面的图片,该图片通过nuget安装MSBuild.Extension.Pack: enter image description here 我的项目安装扩展名bu nuget后,csproj文件中有一个Import句子,打开它我们可以找到:

enter image description here

此处定义的$(ExtensionTasksPath)的值。因此,我想您可能在目标文件或导入sendense中丢失了某物,或者在某处损坏了此属性。

  

总结:

1。保留整个解决方案文件夹可能是最好的建议。 2.如果不起作用,请将下面的脚本添加到您的.xxproj文件中,以使其正常工作:

<PropertyGroup>
      <ExtensionTasksPath> Absolute path of your MSBuild.ExtensionPack.dll</ExtensionTasksPath>
</PropertyGroup>

它将覆盖标记中的值,无论将程序集放在何处,只需添加绝对路径即可。 我的回答是有帮助的,请给我反馈。如有任何更新,请随时与我联系。