首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rake/Albacore在每个项目中应用单独的AssemblyInfo版本?

如何使用Rake/Albacore在每个项目中应用单独的AssemblyInfo版本?
EN

Stack Overflow用户
提问于 2014-02-20 18:27:25
回答 1查看 190关注 0票数 1

我有一个包含多个项目的解决方案。一个请求是每个项目都有不同的版本。我以为我有一个解决方案,但对红宝石知之甚少,我不知道如何解决它,也不知道为什么会这样。下面是我的rakefile的相关部分:

代码语言:javascript
复制
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

一切都很好,但是每个项目都获得列表中第一个项目的版本。有趣的是,如果我稍微把它改为:

代码语言:javascript
复制
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

然后,每个项目获取列表中最后一个文件的版本。如何将版本设置为在每个项目的版本文件中找到的版本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-21 17:02:05

因此,如果我正确地阅读了您的问题,您将有两个项目,每个项目在某个特定项目的子文件夹中有一个单独的VERSION文件。就像这样..。

代码语言:javascript
复制
my-project/
  source/
    projectA/
      Properties/
        AssemblyInfo.cs
      VERSION
    projectB/
      Properties/
        AssemblyInfo.cs
      VERSION

您想要一个Rake/Albacore任务,它将对每个项目应用正确的版本。按照您的第一个任务的结构方式,您只创建一个任务,并且用该循环覆盖分配给它的属性!

代码语言:javascript
复制
assemblyinfo :assemblyinfo do |asm|  #=> one :version task
  projects.each do |proj|            #=> many iterations
    # ... assignment ...             #=> overwriting properties
  end
end

第二个任务定义,“轻微的调整”,实际上是一种意外的工作。每次都要通过projects循环定义整个任务,但使用相同的名称。你在这里碰到了一个鲜为人知的Rake功能,你可能没有意识到.具有相同名称的任务将相互附加。所以,你实际上是在用不同的身体做两个名字为1的任务。

代码语言:javascript
复制
projects.each do |proj|                #=> many iterations
  assemblyinfo :assemblyinfo do |asm|  #=> many tasks mapped to the same name
    # ... assignment ...               #=> separate properties
  end
end

为了更清楚地说明问题,我建议使用一个任务定义,在这个定义中,每个assemblyinfo任务都有自己的唯一名称,然后构建一个依赖于所有任务的version任务。

代码语言:javascript
复制
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") }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21916449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档