1

私が本当に混乱していたことを以前には間違ったエラーがあったので、人を助けるための自己回答を書くと思っていました。そこでここでは、Visual Studio PreBuildEvent powershell文字列にターミネーターがありません: "

これは

<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と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: ".

答えて

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> 

それはすべての作品:

は、だから今、私は単純にこの行を置く場合。引用符は本当に私がスペースを恐れていたためです。誰かがパスで終わると、私は戻ってきて、パントします。

+0

あなたのソリューションをここで共有してくれてありがとうございました。答えとしてマークすることができ、同じ問題を抱える他のコミュニティのメンバーに役立つ可能性があります。簡単に答えを見つけるために –

+0

ちょうどそれを数日間与えることを試みていたありがとう@レオ-MSFTとそれを忘れていた – jcolebrand

関連する問題