1

PSAKEスクリプトを機能させようとしています。タスクがその中の機能を実行していないようですか?

私は2つのファイルを持っています

-- default.ps1 --
Import-Module "C:\dev\Phoenix\trunk\Build\BuildScripts\include.ps1"
Import-Module "C:\Software\PSAKE\JamesKovacs-psake-b0094de\psake.psm1"
Invoke-psake "C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1"
remove-module psake


-- build.ps1 --
$framework = '4.0'

properties {
    $root_dir = 'c:\dev\Phoenix\trunk\'
    $integration_deploy_dir = '\\Server025\Phoenix_IntegrationTests\'
    $build_scripts_dir = '$root_dir\Build\BuildScripts'
    $test_dir =  Join-Path $root_dir '\Tests\Core.UnitTests\bin\Debug'
    $dll = Join-Path $test_dir 'Phoenix.Core.UnitTests.dll'
} 


task default -depends Test

task MsBuild {  exec { msbuild /version }}

task Test -depends Deploy
{
    Write-Host "Start task Test"
Add-PSSnapIn Gallio
Write-Host "TEST --  $dll" 
Test-Gallio $test_dir Release x64 $dll "Core.UnitTests"     ## FYI - call to include func
Write-Host "End task Test"
}

task Deploy
{
Write-Host "Start task deploy"
Write-Host "Deploying to integration server"
copy $root_dir"\Sites" $integration_deploy_dir -Recurse -Force
Write-Host "End task deploy"    
}

現時点では、実際には何もせずに、タスク内にリストされているものを「印刷」しているように見えます。私は何が欠けていますか?ありがとう

申し訳ありませんが、私は本当に最初にCOPYメソッドを機能させたいだけです--thx


助けてくれてありがとう-私はあなたのすべての提案をしましたが、それでも運がありません。

PSAKEタスクではなく、コードを「インライン」にすると、コードは正常に実行されます。

私は今これを持っています

-- default.ps1
Import-Module C:\dev\Phoenix\trunk\Build\BuildScripts\include.ps1
Import-Module C:\Software\PSAKE\JamesKovacs-psake-b0094de\psake.psm1
Invoke-psake C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1
remove-module psake

--build.ps1 $ framework = '4.0'

properties {
$root_dir = 'c:\dev\Phoenix\trunk'
$sites_dir = 'c:\dev\Phoenix\trunk\sites'
$integration_deploy_dir = '\\Vsydnweb025\Phoenix_IntegrationTests\'
$build_scripts_dir = "$root_dir\Build\BuildScripts"
}

task default -depends Deploy

task Deploy
{
Write-Host 'Start task deploy'
Write-Host 'Deploying to integration server'
copy $sites_dir $integration_deploy_dir -Recurse -Force
Write-Host 'End task deploy'
get-childitem $integration_deploy_dir -include *.svclog -recurse | foreach ($_)  {remove-item $_.fullname}
}

これの出力は次のとおりです。

Write-Host 'Start task deploy'
Write-Host 'Deploying to integration server'
copy $sites_dir $integration_deploy_dir -Recurse -Force
Write-Host 'End task deploy'
get-childitem $integration_deploy_dir -include *.svclog -recurse | foreach ($_) {remove-item $_.fullname}


Build Succeeded!

----------------------------------------------------------------------
Build Time Report
----------------------------------------------------------------------
Name   Duration        
----   --------        
Deploy 00:00:00.0006013
Total: 00:00:02.5335350

したがって、タスク内の関数は印刷されているようです。

コピー機能は実行されませんでした-パイプされた.SvcLogファイルも削除されません

つまり、私が期待する画面上

「タスクのデプロイを開始する」

それ以外の

Write-Host'タスクのデプロイを開始'

私はそれを機能させるために努力し続けます。

ご協力いただきありがとうございます!!!

4

2 に答える 2

7

これはグーグルグループで答えましたか

最初の「{」は、「タスク」関数にパラメーターとして渡されるスクリプトブロックであるため、「タスク」関数と同じ行にある必要があります。PSは、コードを1つのステートメントではなく2つのステートメントとして解釈しています。

于 2011-09-26T04:39:59.253 に答える
1

PSAKEで何もしていませんが、Powershellに関しては、次の「修正」が必要です。

$root_dir = 'c:\dev\Phoenix\trunk\'

この変数を他の文字列(「\」で始まる)と連結すると、最後に「\」が二重になるため、末尾の「\」を削除します。

また:

$build_scripts_dir = '$root_dir\Build\BuildScripts'

変数が正しく展開されるようにするには、これに二重引用符を付ける必要があります。

$build_scripts_dir = "$root_dir\Build\BuildScripts"

たぶんこれらを修正して、もっと意味のあるエラーが発生するかどうかを確認しますか?

スクリプト/モジュール呼び出しの前後から二重引用符を削除する必要もあると思います。

Import-Module C:\dev\Phoenix\trunk\Build\BuildScripts\include.ps1
Import-Module C:\Software\PSAKE\JamesKovacs-psake-b0094de\psake.psm1
Invoke-psake C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1
remove-module psake

...スクリプト内からスクリプトを呼び出す方法の概要については、こちらをご覧ください。使用している二重引用符は、呼び出しを文字列に変換します(実行されません)。二重引用符を使用する必要がある場合(つまり、パスにスペースが含まれている場合)、パスの前に呼び出し演算子「&」を付ける必要があります。

& "C:\dev\Phoenix\trunk\Build\BuildScripts\build.ps1"

明らかに、パスにはスペースがないため、これを行う必要はありません。

于 2011-09-21T08:04:41.900 に答える