4

Powershell シェルと cmd ウィンドウから素晴らしく機能する powershell スクリプトがあり、Visual Studio のビルド後のステップから起動しようとしています。

これを昼食にして正常に実行しようとするいくつかの異なるバリエーションの後、現在、VS2010 の「ビルド後のイベント」の「コマンド ライン」プロパティには次の構成があります。

これはビルド後の構成ではすべて 1 行ですが、読みやすくするためにここではテキストを折り返しています。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive
-File "$(SolutionDir)testScript.ps1"
-ConfigurationFile "$(SolutionDir)configuration.txt"
-SolutionDir "$(SolutionDir)"
-Platform "$(Platform)"
-Configuration "$(Configuration)"

PowerShell スクリプトには、ConfigurationFile、SolutionDir、Platform、および Configuration の 4 つの必須パラメーターが必要です。ご覧のとおり、上記の各パラメーターを指定し、値のスペースを保護するためにそれらを二重引用符で囲んでいます。

VS2010 では、SolutionDir マクロはスペースを含むパスに展開され、Platform は "Release" に展開され、Configuration は "Win32" に展開されます。

ビルド後のステップが実行されると、次のエラーが表示されます。

testScript.ps1 : Cannot process command because of one or more missing
mandatory parameters: Platform Configuration.
    + CategoryInfo          : InvalidArgument: (:) [testScript.ps1], 
    ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingMandatoryParameter,testScript.ps1

...私が見逃している可能性のあるアイデアはありますか? どうやら $(SolutionDir) でスクリプトを見つけることができますが、コマンド ライン引数のいずれかを取得しているかどうかはわかりません。$(SolutionDir) の末尾の「\」文字がこれをハングアップさせている可能性はありますか?

4

1 に答える 1

13

変数$(SolutionDir)はディレクトリであるため、バックスラッシュ「\」で終わります。したがって、変数が展開されると、 の引数は-SolutionDir "$(SolutionDir)"次のようになります。

-SolutionDir "c:\Your Solution Dir\"

これが解析されると、最後のスラッシュは効果的に閉じ引用符をエスケープし、シェル パーサーは引数の末尾を認識しないため、パラメーター-SolutionDirは残りの引数を SolutionDir 引数に「吸い込みます」。末尾のスラッシュを追加して、最後のバックスラッシュを別のバックスラッシュでエスケープすることで、これを修正できます。

-SolutionDir "$(SolutionDir)\"

于 2012-10-04T01:31:27.047 に答える