我有一个包含多个项目的解决方案。一个请求是为每个项目提供不同的版本。我以为我有一个解决方案,但不太了解ruby我不知道如何解决它或为什么会发生这种情况。以下是我的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
然后,每个项目都会获取列表中最后一个文件的版本。如何将版本设置为每个项目中VERSION文件中的版本?
答案 0 :(得分:0)
因此,如果我正确地阅读了您的问题,那么您有两个项目,每个项目在某个项目特定的子文件夹中都有一个单独的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
第二个任务定义,即“轻微调整”,实际上是偶然的。您每次通过项目循环定义整个任务,但名称相同。这就是你可能没有意识到的一个鲜为人知的Rake功能......具有相同名称的任务会相互附加。所以,你实际上是用一个名字和不同的身体做两个任务。
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") }