MSBuild 属性 扩展在 Exec 命令中创建一个新行

MSBuild property expansion creates a new line in the Exec command

我遇到一些问题运行在目标文件中使用 powershell 脚本,该文件被包含在某些项目中。

MSBuild 版本是 16.11.0.36601

以下是目标文件中的相关内容:

<PropertyGroup>
  <ScriptLocation>
    '$(SolutionDir)subdir\script.ps1'
  </ScriptLocation>
  ...
</PropertyGroup>      
<Exec Command="powershell -noprofile -NonInteractive -executionpolicy Unrestricted -File $(ScriptLocation)" />

我的问题发生在 属性 展开时。由于某种原因,它出现在一个新行上,这使得命令失败。

这是输出:

0>powershell -noprofile -NonInteractive -executionpolicy Unrestricted -File 
            'C:\code\app\subdir\script.ps1'
        
0>The command cannot be run because the File parameter requires a file path. Supply a path for the File parameter and then try the command again.

然后脚本。ps1 在我的默认编辑器中打开。

所以本质上它是 运行ning powershell -noprofile -NonInteractive -executionpolicy Unrestricted -File 然后继续并尝试 运行 下一行,即 'C:\code\app\subdir\script.ps1'

我根本无法完成这项工作 - 即使我将其替换为此处记录的方法:https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/advanced-enterprise-web-deployment/running-windows-powershell-scripts-from-msbuild-project-files#executing-a-windows-powershell-script-on-the-build-server

当我这样做时 - 会发生以下情况:

0>powershell -noprofile -NonInteractive -executionpolicy Unrestricted -Command "&{ &'
            C:\code\app\subdir\script.ps1
        ' } "
0>The string is missing the terminator: '.
0>    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
0>    + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString
0> 
0>''' is not recognized as an internal or external command
...

有没有办法告诉 MSBuild 不要在新行上扩展 属性?如果没有,有什么方法可以包装东西,这样就不会发生这种情况吗?

批量或等效地重写脚本并不是真正的选择。

定义 属性 时,它包括 属性 中的任何换行符。

这个:

  <ScriptLocation>
    '$(SolutionDir)subdir\script.ps1'
  </ScriptLocation>

与此不同:

<ScriptLocation>'$(SolutionDir)subdir\script.ps1'</ScriptLocation>