0

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

4

1 回答 1

0

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

我认为这不是我们所期望的。当我在 VM 上测试时,来自 VS Build Tools2017 的 msbuild 获得的值与我们在 VS IDE 中的 msbuild 中获得的值相同。

由于这种行为,我有一些建议可以帮助解决问题:

1.首先,确保两个场景都构建成功。

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

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: 在此处输入图像描述 在我的项目安装扩展 bu nuget 后,csproj 文件中有一个 Import 语句,打开它我们可以找到:

在此处输入图像描述

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

总之:

1.保留整个解决方案文件夹可能是最好的建议。2.如果它不起作用,在你的 .xxproj 文件中添加一个脚本就可以了:

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

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

于 2019-03-13T09:42:03.233 回答