MSBuild Exec命令属性展开自动换行导致PowerShell脚本执行失败如何解决
MSBuild 执行PowerShell脚本属性换行问题解决方案
问题根因
MSBuild 解析PropertyGroup内的属性值时,会保留属性开始标签与结束标签之间的所有字符,包括用于排版的换行、缩进空格,并非属性展开阶段额外添加换行。当前ScriptLocation属性值本身已包含前后换行与缩进,拼接到Command参数后会导致命令被拆分执行。
可用解决方案
所有方案均无需修改现有PowerShell脚本,仅需调整.targets文件配置即可。
方案1:属性值与标签同行(推荐)
定义属性时直接将路径值写在开始、结束标签的同一行,避免多余空白被计入属性值。
配置示例:
<PropertyGroup> <ScriptLocation>'$(SolutionDir)subdir\script.ps1'</ScriptLocation> ... </PropertyGroup> <Exec Command="powershell -noprofile -NonInteractive -executionpolicy Unrestricted -File $(ScriptLocation)" />
方案2:使用Trim()函数清除首尾空白
如果需要保留原有的排版格式,可以在使用属性时调用MSBuild内置的Trim()属性函数,自动清除属性值前后的所有空白字符(换行、空格、制表符)。
配置示例:
<PropertyGroup> <ScriptLocation> '$(SolutionDir)subdir\script.ps1' </ScriptLocation> ... </PropertyGroup> <Exec Command="powershell -noprofile -NonInteractive -executionpolicy Unrestricted -File $(ScriptLocation.Trim())" />
方案3:直接内联路径
如果该路径仅在当前Exec节点使用,可不用单独定义ScriptLocation属性,直接把路径写在Command参数中,规避属性带空白的问题。
配置示例:
<Exec Command="powershell -noprofile -NonInteractive -executionpolicy Unrestricted -File '$(SolutionDir)subdir\script.ps1'" />
内容的提问来源于stack exchange,提问作者finlaybob
相关产品推荐
相关产品推荐

