调用在文件路径中有空格的 target exec power shell 命令
calling target exec power shell command that has spaces in file paths
我试图通过 Visual Studio Target exec 命令调用 BAT,但是当文件路径中有空格时它会出错。我尝试用 "
将其括起来,但它仍然失败。
错误:
1>Task "CreateProperty" (TaskId:58)
1> Task Parameter:Value=C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat (TaskId:58)
1> Output Property: batPath=C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat (TaskId:58)
1>Done executing task "CreateProperty". (TaskId:58)
1>Using "Exec" task from assembly "Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Exec" (TaskId:59)
1> Task Parameter:Command=%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat" "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll" (TaskId:59)
1> %WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat" "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll" (TaskId:59)
1> C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK : The term 'C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK' is (TaskId:59)
1> not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or (TaskId:59)
1> if a path was included, verify that the path is correct and try again. (TaskId:59)
1> At line:1 char:1 (TaskId:59)
1> + C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK. ... (TaskId:59)
1> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (TaskId:59)
1> + CategoryInfo : ObjectNotFound: (C:\Users\ksobon...evit-Addins\HOK:String) [], CommandNotFoundException (TaskId:59)
1> + FullyQualifiedErrorId : CommandNotFoundException (TaskId:59)
1> (TaskId:59)
1>C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\HOK.BetaToolsManager.csproj(332,5): error MSB3073: The command "%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat" "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll"" exited with code 1.
1>Done executing task "Exec" -- FAILED. (TaskId:59)
1>Done building target "CopyFiles" in project "HOK.BetaToolsManager.csproj" -- FAILED.: (TargetId:82)
这是我的目标调用:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<CreateProperty Value="$(SolutionDir)..\..\..\_postBuild\codeSigning.bat">
<Output PropertyName="batPath" TaskParameter="Value"/>
</CreateProperty>
<Exec Command="%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "$(batPath)" "$(TargetPath)""/>
</Target>
错误很清楚是什么问题。该路径中有空格并使 power shell 认为这是一个命令。我该如何解决?
我无法访问构建服务器来测试它,但按照这篇 Executing a Windows PowerShell Script on the Build Server 文章中的说明,它应该接近于:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<PropertyGroup>
<PowerShellExe Condition=" '$(PowerShellExe)'=='' ">
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
</PowerShellExe>
<BatPath Condition=" '$(BatPath)'=='' ">
C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat
</BatPath>
<TargetPath Condition=" '$(TargetPath)'=='' ">
C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll
</TargetPath>
</PropertyGroup>
<Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted
-command "& {
&'$(BatPath)'
'$(TargetPath)'} "" />
</Target>
我试图通过 Visual Studio Target exec 命令调用 BAT,但是当文件路径中有空格时它会出错。我尝试用 "
将其括起来,但它仍然失败。
错误:
1>Task "CreateProperty" (TaskId:58)
1> Task Parameter:Value=C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat (TaskId:58)
1> Output Property: batPath=C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat (TaskId:58)
1>Done executing task "CreateProperty". (TaskId:58)
1>Using "Exec" task from assembly "Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Exec" (TaskId:59)
1> Task Parameter:Command=%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat" "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll" (TaskId:59)
1> %WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat" "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll" (TaskId:59)
1> C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK : The term 'C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK' is (TaskId:59)
1> not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or (TaskId:59)
1> if a path was included, verify that the path is correct and try again. (TaskId:59)
1> At line:1 char:1 (TaskId:59)
1> + C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK. ... (TaskId:59)
1> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (TaskId:59)
1> + CategoryInfo : ObjectNotFound: (C:\Users\ksobon...evit-Addins\HOK:String) [], CommandNotFoundException (TaskId:59)
1> + FullyQualifiedErrorId : CommandNotFoundException (TaskId:59)
1> (TaskId:59)
1>C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\HOK.BetaToolsManager.csproj(332,5): error MSB3073: The command "%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat" "C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll"" exited with code 1.
1>Done executing task "Exec" -- FAILED. (TaskId:59)
1>Done building target "CopyFiles" in project "HOK.BetaToolsManager.csproj" -- FAILED.: (TargetId:82)
这是我的目标调用:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<CreateProperty Value="$(SolutionDir)..\..\..\_postBuild\codeSigning.bat">
<Output PropertyName="batPath" TaskParameter="Value"/>
</CreateProperty>
<Exec Command="%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe "$(batPath)" "$(TargetPath)""/>
</Target>
错误很清楚是什么问题。该路径中有空格并使 power shell 认为这是一个命令。我该如何解决?
我无法访问构建服务器来测试它,但按照这篇 Executing a Windows PowerShell Script on the Build Server 文章中的说明,它应该接近于:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<PropertyGroup>
<PowerShellExe Condition=" '$(PowerShellExe)'=='' ">
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
</PowerShellExe>
<BatPath Condition=" '$(BatPath)'=='' ">
C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\..\..\..\_postBuild\codeSigning.bat
</BatPath>
<TargetPath Condition=" '$(TargetPath)'=='' ">
C:\Users\ksobon\source\repos\HOK-Revit-Addins\HOK Beta Tools\src\HOK.BetaToolsManager\HOK.BetaToolsManager\bin18\HOK.BetaToolsManager.dll
</TargetPath>
</PropertyGroup>
<Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted
-command "& {
&'$(BatPath)'
'$(TargetPath)'} "" />
</Target>