情况: 当我从MSBuild(使用VS Build Tools 2017)进行构建时,$(ExtensionTasksPath)变量没有任何值 从主msbuild文件中,当我使用集成的VS构建时,MSBuild值从主文件传递到MSBuild.ExtensionPack.tasks,这是预期的行为,为什么会发生?为了测试该特定案例,我不使用任何属性。
答案 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: 我的项目安装扩展名bu nuget后,csproj文件中有一个Import句子,打开它我们可以找到:
此处定义的$(ExtensionTasksPath)的值。因此,我想您可能在目标文件或导入sendense中丢失了某物,或者在某处损坏了此属性。
总结:
1。保留整个解决方案文件夹可能是最好的建议。 2.如果不起作用,请将下面的脚本添加到您的.xxproj文件中,以使其正常工作:
<PropertyGroup>
<ExtensionTasksPath> Absolute path of your MSBuild.ExtensionPack.dll</ExtensionTasksPath>
</PropertyGroup>
它将覆盖标记中的值,无论将程序集放在何处,只需添加绝对路径即可。 我的回答是有帮助的,请给我反馈。如有任何更新,请随时与我联系。