Как обновить несколько файлов AssemblyInfo.cs по отдельности с помощью задачи Albacore assemblyinfo? - PullRequest
3 голосов
/ 07 ноября 2011

У меня есть решение с рядом проектов. Я хотел бы обновить файл AssemblyInfo.cs в каждом проекте в отдельности. Большая часть информации в файлах будет одинаковой, но может быть одна или две вещи, которые я хочу отличать. Я не смог найти способ сделать это с помощью задачи Albacore assemblyinfo.

Тип синтаксиса, который я использую, будет

# I know this won't work but I would like to be able to call the assemblyinfo 
# task a number of times and each time pass in at least the input_filename
task :update_assemblyinfo_files do
  assemblyinfo '/src/myproj1/properties/assemblyinfo.cs'
  assemblyinfo '/src/myproj2/properties/assemblyinfo.cs'
end

assemblyinfo :assemblyinfo do |asm|
  asm.version = version
  asm.input_file = <an-input-parameter>
end

Ответы [ 3 ]

2 голосов
/ 30 декабря 2011

Идея может состоять в том, чтобы хранить ваши общие параметры assemblyinfo где-нибудь в вашем rakefile (или во внешнем файле, например, используя yaml), который может быть прочитан методом в rake, и затем сконфигурировать вашу задачу следующим образом:

task :update_assemblyinfo_files => [:update_a, :update_b, :update_c]

, а затем в каждой задаче обновления

assemblyinfo :update_a do |asm|
  common_info = get_common_assemblyinfo()
  asm.version = common_info[:version]
  asm.company_name = common_info[:company_name]
  asm.product_name = common_info[:product_name]
  asm.output_file = "your_file_path"
end

def get_common_assemblyinfo()
  #read your yaml here and return it
end
1 голос
/ 01 марта 2013

Эта задача будет проходить через каждый проект в вашем решении и обновлять каждый файл информации о сборке. В этом примере обновляется версия (при условии, что вы используете файл VERSION и version_bumper).

@solutionpath = "c:/mysolution"

desc "Updates each assembly version"
task :version do |asm|
  FileList["#{@solutionpath}**/Properties/AssemblyInfo.cs"].each { |assemblyfile|   
    asm = AssemblyInfo.new()
    asm.use(assemblyfile)
    asm.version = bumper_version.to_s
    asm.file_version = bumper_version.to_s
    asm.execute
  }
end
0 голосов
/ 29 сентября 2012

Давайте займемся этим по одному. Если у вас есть несколько AssemblyInfo.cs файлов, вы можете создать FileList, который захватит их все.

assembly_info_files = FileList['./source/**/AssemblyInfo.cs']

И динамически создавать задачу assemblyinfo для файла.

assembly_info_files.each do |file|
  assemblyinfo file do |asm|
    asm.input_file = file
    asm.version = version
  end
end

Но, я думаю, вы говорите, что у вас могут быть разные параметры для файла . Я рекомендую вам закодировать как можно больше этих свойств статически в отдельных файлах. Вам понадобится какой-то хэш хэшей файлов => {name => value}.

Если вы всегда переопределяете одни и те же свойства "property_A" и "property_B"

assembly_info_properties = {
  './source/ProjectA/AssemblyInfo.cs' => { 
    :copyright => '2011'
    :version => '1.0.0'
  },

  './source/ProjectB/AssemblyInfo.cs' => {
    :copyright => '2012'
    :version => '0.1.0'
  }
}

assembly_info_properties.each do |file,properties|
  assmeblyinfo file do |asm|
    asm.input_file = file
    asm.copyright = properties[:copyright]
    asm.version = properties[:version]
  end
end

Если вы переопределяете различные наборы свойств, используйте хэш хэшей и используйте общий custom_attributes

assembly_info_properties = {
  './source/ProjectA/AssemblyInfo.cs' => { 
    :Copyright => 'Someone Else (c) 2011'
  },

  './source/ProjectB/AssemblyInfo.cs' => {
    :Title => 'Custom Title'
  }
}

assembly_info_properties.each do |file,properties|
  assmeblyinfo file do |asm|
    asm.input_file = file
    asm.custom_attributes properties
  end
end
...