如果我之前有一个最奇怪的错误,我真的很困惑,所以我想我会写一个自我回答来帮助别人。我的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: ".
答案 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>
这一切都按预期工作。报价真的是因为我害怕空间。如果有人在他们的路径中结束了某些人,我会回去踢球。