【发布时间】:2010-07-02 17:36:13
【问题描述】:
我正在使用 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在你第一次和第二次调用它时给你不同的结果。您可能有兴趣尝试调试此代码。这是一个关于设置和使用调试器的链接pivotallabs.com/users/chad/blog/articles/…你也可以去老学校继续使用打印语句(实际上,这是他们在我学校仍然教的)在这种情况下,如果你重复你的多次声明?还是 gsub 前后的 p 内容? -
不管出于什么原因,今天早上它可以工作了。我想知道我的 Windows 命令提示符是否发生了一些奇怪的缓存,即使在我编辑了包含文件之后,它也从 rake 命令返回了相同的结果。哦,好吧,无论哪种方式,它现在都有效。感谢您的帮助!