每次在Visual Studio中保存文件时,如何自动运行rake脚本?我可以创建一个包装命令的批处理文件。我想在CTRL + S
上触发它。但是,Visual Studio 2012没有宏。
JP Boodhoo已经在他的许多屏幕演员中完成了,但还没有分享实现。
仅供参考,我的rakefile
看起来像这样
require 'albacore'
desc 'Build Solution'
msbuild :Build do |msb|
msb.properties :configuration => :Release
msb.targets :Clean, :Build
msb.solution = 'ProjoBot.sln'
end
desc 'Run Unit Tests'
mspec :Test do |mspec|
mspec.command = 'Lib/Tools/MSpec/mspec-clr4.exe'
mspec.assemblies 'Src/Tests/ProjoBot.UnitSpecifications/bin/Release/ProjoBot.UnitSpecifications.dll'
end
task :default => [:Build, :Test]
答案 0 :(得分:1)
我使用外部工具运行执行默认Rake任务的批处理文件。
@ECHO OFF
rake
我将快捷键CTRL + S
分配给工具,这样,当我保存时,会触发rake任务!我希望这可以帮助那些想要做同样事情的人。
答案 1 :(得分:1)
可能有一些选项与命令行集成,不知道Visual Studio。
昨晚我正在玩Guard gem。你基本上安装了后卫和Guard rake plugin。
gem install guard
gem install guard-rake
你可以创建一个Guard“模板”,一个带有普通Rake任务的Guardfile
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)>
没有什么可以包含文件系统轮询触发的操作,但这并不意味着你无法建立自己的!我写了一个.\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
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'