Visual Studio PreBuildEvent powershell该字符串缺少终结符:“

时间:2017-06-09 03:38:04

标签: visual-studio powershell msbuild post-build-event pre-build-event

如果我之前有一个最奇怪的错误,我真的很困惑,所以我想我会写一个自我回答来帮助别人。我的googlefu没有整齐地出现,所以我们在这里。

这是我原来的行

<PreBuildEvent>powershell.exe -noninteractive -command "$(solutiondir)\..\PreBuild.ps1" "$(TargetFileName)" "$(ProjectDir)" "$(SolutionDir)"</PreBuildEvent>

这是我的PreBuild.ps1文件:

Param(
    [Parameter(Mandatory=$false)][string]$targetFileName,
    [Parameter(Mandatory=$false)][string]$projectDir,
    [Parameter(Mandatory=$false)][string]$solutionDir
)
process {
    Write-Host "`$targetFileName $targetFileName";
    Write-Host "`$projectDir $projectDir";
    Write-Host "`$solutionDir $solutionDir";
}

由于某种原因,我的脚本中的变量$projectDir包含projectdir和solutiondir。像这样:

2>  Processing files with gulp script.
2>  $targetFileName project.dll
2>  $projectDir c:\src\sln\project c:\src\sln

所以我把它改成了

<PreBuildEvent>powershell.exe -noninteractive -command "$(solutiondir)\..\PreBuild.ps1" "$(TargetFileName)" "$(ProjectDir)"</PreBuildEvent>

我在VS输出中收到此错误:The string is missing the terminator: ".

1 个答案:

答案 0 :(得分:2)

这是我搞砸的地方。 $(ProjectDir)以尾部斜杠结尾。所以我的命令就是:

powershell.exe -noninteractive -command "c:\src\sln\project\..\PreBuild.ps1" "project.dll" "c:\src\sln\project\"
你看到了吗?这很微妙,花了我几分钟。这是最后的\"。这逃脱了引用,使字符串无限制。因此缺少收盘价。

所以现在如果我简单地说这一行:

<PreBuildEvent>powershell.exe -noninteractive -command "$(solutiondir)\..\PreBuild.ps1" $(TargetFileName) $(ProjectDir)</PreBuildEvent>

这一切都按预期工作。报价真的是因为我害怕空间。如果有人在他们的路径中结束了某些人,我会回去踢球。