Как мне обновить несколько файлов AssemblyInfo.cs по отдельности с помощью задачи Albacore assemblyinfo?

#.net #rake #albacore

#.net #грабли #albacore

Вопрос:

У меня есть решение с несколькими проектами. Я хотел бы обновить 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
  

Ответ №1:

Идея может заключаться в том, чтобы сохранить ваши общие параметры 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
  

Ответ №2:

Эта задача повторит каждый проект в вашем решении и обновит каждый файл информации о сборке. В этом примере он обновляет версию (при условии, что вы используете файл ВЕРСИИ и 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
  

Ответ №3:

Давайте рассмотрим это постепенно. Если у вас есть несколько 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
  

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

Если вы всегда переопределяете одни и те же свойства «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