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

MSBuild.ExtensionPack.tasks inheritance of variables from MSBuild main project file

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

Is that expected behavior and why does it happen?

我认为不是我们 expect.As 我在 VM 上测试,VS Build Tools2017 的 msbuild 获得的值与我们从 VS IDE.[=20= 的 msbuild 获得的值相同]

For the reason of this behavior I have some suggestions to help trouble shooting:

1.First 最重要的是,确保两个场景都成功构建。

2.As你上面提到的,你在不同的虚拟机中运行它们,确保测试的两个文件是相同的并且是整个解决方案文件夹。(解决方案目录下的包文件夹有意义)

3.Check在.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: 我的项目安装了bu nuget扩展后,在csproj文件中有一个Import语句,打开我们可以发现:

此处定义的 $(ExtensionTasksPath) 的值。所以我猜你可能在目标文件或导入语句中丢失了某物,或者有某物损坏了这个 属性.

In summary:

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

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

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