我正在使用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