我有一个包含多个项目的解决方案。一个请求是每个项目都有不同的版本。我以为我有一个解决方案,但对红宝石知之甚少,我不知道如何解决它,也不知道为什么会这样。下面是我的rakefile的相关部分:
projects = ["ProjectOne", "ProjectTwo"]
assemblyinfo :assemblyinfo do |asm|
projects.each do | proj |
bumper_file proj + "/VERSION"
asm.version = bumper_version.to_s
asm.file_version = bumper_version.to_s
asm.product_name = proj
asm.output_file = proj + "/Properties/AssemblyInfo.cs"
end
end一切都很好,但是每个项目都获得列表中第一个项目的版本。有趣的是,如果我稍微把它改为:
projects.each do | proj |
bumper_file proj + "/VERSION"
assemblyinfo :assemblyinfo do |asm|
asm.version = bumper_version.to_s
asm.file_version = bumper_version.to_s
asm.product_name = proj
asm.output_file = proj + "/Properties/AssemblyInfo.cs"
end
end然后,每个项目获取列表中最后一个文件的版本。如何将版本设置为在每个项目的版本文件中找到的版本?
发布于 2014-02-21 17:02:05
因此,如果我正确地阅读了您的问题,您将有两个项目,每个项目在某个特定项目的子文件夹中有一个单独的VERSION文件。就像这样..。
my-project/
source/
projectA/
Properties/
AssemblyInfo.cs
VERSION
projectB/
Properties/
AssemblyInfo.cs
VERSION您想要一个Rake/Albacore任务,它将对每个项目应用正确的版本。按照您的第一个任务的结构方式,您只创建一个任务,并且用该循环覆盖分配给它的属性!
assemblyinfo :assemblyinfo do |asm| #=> one :version task
projects.each do |proj| #=> many iterations
# ... assignment ... #=> overwriting properties
end
end第二个任务定义,“轻微的调整”,实际上是一种意外的工作。每次都要通过projects循环定义整个任务,但使用相同的名称。你在这里碰到了一个鲜为人知的Rake功能,你可能没有意识到.具有相同名称的任务将相互附加。所以,你实际上是在用不同的身体做两个名字为1的任务。
projects.each do |proj| #=> many iterations
assemblyinfo :assemblyinfo do |asm| #=> many tasks mapped to the same name
# ... assignment ... #=> separate properties
end
end为了更清楚地说明问题,我建议使用一个任务定义,在这个定义中,每个assemblyinfo任务都有自己的唯一名称,然后构建一个依赖于所有任务的version任务。
projects.each do |proj|
name = File.join(proj, "Properties/AssemblyInfo.cs")
bumper_file = File.join(proj, "VERSION")
assemblyinfo name do |asm|
asm.output_file = asm
asm.version = asm.file_version = bumper_version.to_s
asm.product_name = proj
end
end
desc "Version every project in the solution"
task :version => projects.map { |proj| File.join(proj, "Properties/AssemblyInfo.cs") }https://stackoverflow.com/questions/21916449
复制相似问题