VisualStudioを認識しないコマンドラインと統合するオプションがいくつかある場合があります。
ルビー/ガードウェイ
私は昨夜ガードの宝石で遊んでいました。基本的に、guardとGuardrakeプラグインをインストールします。
gem install guard
gem install guard-rake
Guardfile
プレーンなRakeタスクを含むGuardの「テンプレート」を作成できます。
guard init rake
たとえば.cs
、ディレクトリ内のファイルを監視するように編集できます。source
(と
guard 'rake', :task => 'default', :run_on_start => false do
watch(%r{^source/.+\.cs$})
end
次に、Guardを開始します
guard
-i
この「インタラクティブ」モードをオフにするためにを使用する必要がある場合があります。これにより、Windowsでエラーが発生する可能性があります。
guard -i
Guardは小さなローカルサーバーのように動作し、ログを表示します
12:07:08 - INFO - Guard uses TerminalTitle to send notifications.
12:07:08 - INFO - Starting guard-rake default
12:07:08 - INFO - Guard is now watching at 'D:/temp'
[1] guard(main)>
また、ファイルを強制的に変更すると(touch
テストディレクトリに設定した偽のファイルに移動します)、rakeタスクの出力が得られます。
12:07:08 - INFO - Guard uses TerminalTitle to send notifications.
12:07:08 - INFO - Starting guard-rake default
12:07:08 - INFO - Guard is now watching at 'D:/temp'
12:07:54 - INFO - running default
building!...
[1] guard(main)>
PowerShellの方法
ファイルシステムのポーリングによってトリガーされたアクションをまとめるような派手なものはありませんが、それはあなたが自分で作成できないという意味ではありません!.\guard.ps1
ソリューションルートにあるファイルを作成しました。がありFileSystemWatcher
、ループ内の変更を待ちます。
$here = Split-Path $MyInvocation.MyCommand.Definition
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "$here\source"
$watcher.IncludeSubdirectories = $true
while($true) {
# timeout here lets the console process kill commands and such
$result = $watcher.WaitForChanged('All', 3000)
if($result.TimedOut) {
continue
}
# this is where you'd put your rake command
Write-Host "$($result.ChangeType):: $($result.Name)"
# and a delay here is good for the CPU :)
Start-Sleep -Seconds 3
}
touch
(New-Item <name> -Type File
)ファイルを作成するとき、またはファイルを作成するときに、それが機能して印刷されていることを確認できます。しかし、非常に簡単にレーキを実行することもできます
rake
PowerShellは先に進み、それをネイティブコマンドとして実行します。あなたは空想を得て、このスクリプトをGuardのように見せたり感じさせたりすることができます(わかりました、それほど多くはありませんが、少しです!)
param(
[string] $path = (Split-Path $MyInvocation.MyCommand.Definition),
[string] $task = 'default'
)
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $path
$watcher.IncludeSubdirectories = $true
while($true) {
$result = $watcher.WaitForChanged('All', 3000)
if($result.TimedOut) {
continue
}
rake $task
Start-Sleep -Seconds 3
}
そして、あなたはそれをこのように実行するでしょう
.\guard.ps1 -Path "$pwd\source" -Task 'build'