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>
我遇到一些问题运行在目标文件中使用 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>