La commissione ALBACORE NUSPEC può risolvere automaticamente tutte le dipendenze?
Domanda
L'attività AlbaCore NUSPEC ha risolto tutte le dipendenze necessarie per una soluzione?Quando ho diversi progetti con le mutevoli dipendenze, ci vuole molto sforzo per mantenere aggiornato il rakefile.Può essere automatizzato?
desc 'create the nuget package'
nuspec do |nuspec|
nuspec.id = 'myprojectid'
nuspec.version = '1.2.3'
nuspec.authors = 'Jon Jones'
nuspec.description = 'my-project is a collection of utilties'
nuspec.title = 'my-project'
nuspec.dependency <magic here>
end
.
Una soluzione manuale sarebbe quella di passare attraverso i file dei pacchetti e risolverlo a mano.Qualcuno ha scritto qualcosa automatizzato?
Soluzione
Mi rendo conto che questa è una vecchia domanda, ma vedendo come non ha una risposta, questo potrebbe aiutare qualcuno a cercare la stessa cosa. Attualmente sto lavorando a alcuni compiti rake per automatizzare ulteriormente la creazione di file di NUSPEC in modo convenzionale / autonomo, quindi aggiornerò questo post più tardi con la soluzione finale.
Per rispondere alla domanda a portata di mano, ecco una piccola funzione rubino che tirerà le dipendenze dal file dei pacchetti.config per un determinato progetto nella soluzione.
def GetProjectDependencies(project)
path = "#{File::dirname project.FilePath}/packages.config"
packageDep = Array.new
if File.exists? path
packageConfigXml = File.read("#{File::dirname project.FilePath}/packages.config")
doc = REXML::Document.new(packageConfigXml)
doc.elements.each("packages/package") do |package|
dep = Dependency.new
dep.Name = package.attributes["id"]
dep.Version = package.attributes["version"]
packageDep << dep
end
end
packageDep
end
.
e la classe di dipendenza utilizzata:
class Dependency
attr_accessor :Name, :Version
def new(name, version)
@Name = name
@Version = version
end
end
.
Questo metodo prende un'istanza "progetto" e afferra la dipendenza / versioni dal file Package.config per quel progetto.
Come ho detto, pubblicherò presto una soluzione più completa, ma questo è un buon punto di partenza per chiunque se ne avessero bisogno.
Modifica: Scusa mi ci è voluto così tanto tempo per pubblicare la versione finale di questo, ma ecco un link con il gist contenente il codice di esempio che sto attualmente utilizzando per un numero di progetti. .
https://gist.github.com/4151627
Fondamentalmente, avvolgo i dati in una classe "Project" e popolano le dipendenze da pacchetti.config. Come bonus, aggiunge anche dipendenze dai riferimenti di interproject (Parses il file del progetto). Le classi / logiche sono lì, così come un compito di NUSPEC di esempio.
Altri suggerimenti
Per essere sicuro, non c'è niente nel progetto AlbaCore che lo fa adesso.Sarebbe interessante vedere la soluzione di Mitchell sintonizzata e forse laminata. Ho intenzione di spostare il codice in un gist , Apri un "<< problema " (miglioramento) e lavora su di esso sulSide :)