2010-06-24 108 views
2

我正在用rake构建一个新的.NET项目,使用神话般的albacore gem。我的组织仍在使用NAnt,并且有很多人希望在构建脚本执行时看到日志文件。如何将转储到STDOUT的msbuild任务输出保存到日志文件中?如何将我的msbuild输出结果从rake中输出到日志文件

+0

你如何运行你的rake任务?从CI服务器?从命令行?要么 ? – 2010-06-25 17:05:12

+0

嗨德里克 - 现在,我从命令行运行,很快我们就会把它连接到哈德森。我们已经说服人们,如果没有物理日志文件执行rake,哈德森将会很好。我想通过使用我的msbuild和nunit任务上的“.parameters”选项来记录输出,我满足了对日志文件的渴望。我很喜欢长鳍金枪鱼!你们做得很好。 – dalesmithtx 2010-06-25 20:00:05

+0

很酷。是的,我发现没有真正需要从哈德森日志文件,因为哈德森捕获所有的STDOUT到它自己的日志。但如果你需要命令行,我想你可以将STDOUT重定向到一个文件中:rake >> build.log – 2010-06-26 01:23:40

回答

3

我想出了一个解决方案。我们并不需要为我们的CI服务器(hudson)建立日志文件,但是当物理文件检查构建在本地运行时,尤其是当我们正在执行签入舞蹈和构建失败。

幸运的是,长鳍金枪鱼足够聪明地创建一个“.parameters”选项,它可以与任何命令行工具任务一起使用,以添加该任务未明确处理的参数。因此,例如,您可以向msbuild任务添加一个参数,以指定MSBuild的日志文件。而且它会有点像这样:

BUILD_REPORTS = 'BuildReports' 
MSBUILD_EXE = "C:/Windows/Microsoft.NET/Framework/v4.0.30319/msbuild.exe" 

directory BUILD_REPORTS 

CLEAN.include BUILD_REPORTS 

task :default => [:build] 

desc "Build the solution" 
msbuild :build => BUILD_REPORTS do |msb| 
    msb.properties :configuration => :Debug 
    msb.path_to_command = MSBUILD_EXE 
    msb.targets :Clean, :Build 
    msb.solution = "./mysolution.sln" 
    msb.parameters "/l:FileLogger,Microsoft.Build;logfile=" + log_file("build") 
end 

def log_file(log_file_name) 
    BUILD_REPORTS + log_file_name + ".log" 
end 

我们的Rakefile比稍微复杂一点,因为它有做多的东西,但你的想法。