我正在使用rake脚本标记我的.NET项目中的AssemblyInfo.cs文件,但是有一个虚幻回车符(或换行符等)被引入,这会破坏编译。获取版本号的方法是:这个换行符来自哪里?
def get_version()
version = ''
IO.popen("#{SVNVERSION_APPLICATION} #{build_info.root_dir}") do |output|
output.readlines.each do |line|
version << line.gsub(/\:.*/, '')
end
end
result = version
end
如果有更好的方法可以做到这一点,请告诉我。我在这里大部分都是修补(这实际上是我工作过的第一个Ruby,所以请耐心等待)。正如你所看到的(我的正则表达式技能从来不是真正的忍者级别),我只是试图摆脱第一个冒号和后面的所有内容。 Svnversion返回诸如“64:67M
”之类的内容,我只对第一个数字感兴趣。
然后我标记文件这样:
contents = contents.gsub(/AssemblyVersion\(\"([\d.*]*)\"\)/, "AssemblyVersion(\"#{helper.build_info.build_number_template}\")")
当然,还有周围的这些位更多的代码。这只是发生了什么事情的肉。基本上,在我调用get_version的任务中,将版本号存储在助手对象上,该对象稍后用于将AssemblyInfo.cs文件读入“内容”并执行替换并将其写回的方法。
一切工作正常,除了在输出幻像换行符:
[assembly: AssemblyVersion("1.1.0.62
")]
[assembly: AssemblyFileVersion("1.1.0.62
")]
我已经尝试添加另一个.gsub设法过滤掉\ n和\ r没有运气,我已经试过.chomp等。它似乎总是把这个换行符放在结果文件中。
我失去了一些东西明显?
[编辑响应于第一个答案:]
下面是编辑AssemblyInfo.cs文件的方法,包括:
def replace_assembly_strings(file_path, helper)
if not (File.exists?(file_path) || File.writable?(file_path))
raise "the file_path \"#{file_path}\" can not be written to. Does it exist?"
end
path = Pathname.new(file_path)
contents = path.read
puts "AssemblyVersion(\"#{helper.build_info.build_number_template}\")"
contents = contents.gsub(/AssemblyVersion\(\"([\d.*]*)\"\)/, "AssemblyVersion(\"#{helper.build_info.build_number_template}\")")
contents = contents.gsub(/AssemblyFileVersion\(\"([\d.*]*)\"\)/, "AssemblyFileVersion(\"#{helper.build_info.build_number_template}\")")
contents = contents.gsub(/AssemblyCompany\(\"(.*)\"\)/, "AssemblyCompany(\"#{helper.build_info.company}\")")
contents = contents.gsub(/AssemblyCopyright\(\"(.*)\"\)/, "AssemblyCopyright(\"#{helper.build_info.copyright}\")")
File.open(file_path, 'w') {|f| f.write(contents)}
end
即puts
线输出AssemblyVersion("1.1.0.62")
但生成的文件显示AssemblyVersion("1.1.0.>")
在问候你的更新,它看起来像'helper.build_info.build_number_template'是给你不同的结果第一第二次你打电话给它。您可能有兴趣尝试调试此代码。这里是一个关于设置和使用调试器的链接http://pivotallabs.com/users/chad/blog/articles/366-ruby-debug-in-30-seconds-we-don-t-need-no- stinkin-gui-你也可以去旧学校,并继续使用打印语句(实际上,这是他们在我的学校仍然教授的内容)在这种情况下,如果你多次重复你的语句,会发生什么?或者在gsub之前和之后的p内容? – 2010-07-03 06:12:57
无论出于何种原因,它今天早上都有效。我想知道是否在我的Windows命令提示符上发生了一些奇怪的缓存,即使在编辑包含文件后,它也会从rake命令返回相同的结果。哦,无论哪种方式现在它的作品。谢谢您的帮助! – David 2010-07-06 12:06:12