Domanda

Sto cercando di costruire più progetti C # utilizzando rastrello e tonno bianco. Ci si sente come dovrei essere in grado di fare questo senza un ciclo, ma io non riesco a farlo funzionare. Quello che ho da fare è questo:

msbuild :selected_test_projects do |msb, args|
  @teststorun.each do |project| 
    msb.path_to_command = @net40Path
    msb.properties :configuration =>  :Release,
    msb.targets [ :Test]
    msb.solution = project
    msb.build
  end
end

preferirei fare qualcosa di più pulito, come questo

msbuild :selected_test_projects do |msb, args|
  msb.path_to_command = @net40Path
  msb.properties :configuration =>  :Release,
  msb.targets [ :Test]
  msb.solution = @teststorun
end
È stato utile?

Soluzione

A questo punto, non c'è supporto diretto nel compito MSBuild per la costruzione di molteplici solutions.There sono alcune opzioni disponibili, però. Si tratta per lo più verso il basso per quello che si sintassi come il migliore per fare questo, ma tutti comportano un ciclo di qualche tipo.

A proposito: tonno bianco v0.2.2 è stato appena rilasciato pochi giorni fa. E 'il default è 4 .net, e riduce il .path_to_command fino a .command. Dal momento che il valore predefinito, però, non è necessario specificare il .command all'uso. Userò questa sintassi per gli esempi, qui. È possibile leggere le note di rilascio aggiuntivi in ?? http://albacorebuild.net

Opzione # 1

Caricare l'elenco di soluzioni in un array e msbuild chiamata per ogni soluzione. questo aggiungerà il: build con più istanze di msbuild e quando si chiama il:. compito costruire, tutti loro verrà costruita

solutions = ["something.sln", "another.sln", "etc"]
solutions.each do |solution|
  #loops through each of your solutions and adds on to the :build task

  msbuild :build do |msb, args|
    msb.properties :configuration =>  :Release,
    msb.targets [:Test]
    msb.solution = solution
  end
end

chiamando rake build o specificando :build come una dipendenza in qualsiasi altro compito sarà costruire tutte le soluzioni.

Opzione # 2

l'opzione 2 è fondamentalmente lo stesso quello che ho appena mostrato ... tranne che si può chiamare la classe MSBuild direttamente al posto del compito msbuild

msb = MSBuild.new
msb.solution = ...
msb.properties ...
#other settings...

questo ti permette di creare un'attività in qualsiasi modo lo si desidera, e quindi è possibile eseguire il ciclo dove vuoi. Ad esempio:

task :build_all_solutions do
  solutions = FileList["solutions/**/*.sln"]
  solutions.each do |solution|
    build_solution solution
  end
end

def build_solution(solution)
  msb = MSBuild.new
  msb.properties :configuration =>  :Release,
  msb.targets [:Test]
  msb.solution = solution
  msb.execute # note: ".execute" replaces ".build" in v0.2.x of albacore
end

Ora, quando si chiama rake build_all_solutions o si aggiunge :build_all_solutions come una dipendenza da un altro compito, tutte le soluzioni saranno costruiti.

...

Ci sono probabilmente una dozzina di varianti che si possono fare, in base a ciò che ho mostrato qui. Tuttavia, essi non differiscono in modo significativo - solo alcuni modi diversi per trovare tutte le soluzioni, o ciclo tra di loro

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top