¿Puede la tarea de Albacore Nuspec resolver todas las dependencias automáticamente?
Pregunta
¿Puede la tarea de Albacore Nuspec resolver todas las dependencias necesarias para una solución?Cuando tengo varios proyectos con dependencias cambiantes, se necesita mucho esfuerzo para mantener al día de RakeFile.¿Se puede automatizar esto?
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 solución manual sería pasar por los archivos de paquetes y resolver esto a mano.¿Alguien ha escrito algo automatizado?
Solución
Me doy cuenta de que esta es una pregunta antigua, pero al ver que no tiene una respuesta, esto podría ayudar a alguien a buscar lo mismo. Actualmente estoy trabajando en algunas tareas de rastrillo para automatizar aún más la creación de archivos NUSPEC de una manera convencional / autónoma, por lo que actualizaré este post más adelante con la solución final.
Para responder a la pregunta en cuestión, aquí hay una pequeña función de rubí que retirará las dependencias del archivo Paquetes.config para un proyecto dado en la solución.
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
y la clase de dependencia utilizada:
class Dependency
attr_accessor :Name, :Version
def new(name, version)
@Name = name
@Version = version
end
end
Este método lleva a una instancia de "proyecto", y agarra la dependencia / versiones del archivo PAQUETE.CONFIG para ese proyecto.
Como dije, publicaré una solución más completa pronto, pero este es un buen punto de partida para cualquier persona si lo necesitan.
Editar: Lo siento, me tomó mucho tiempo publicar la versión final de esto, pero aquí hay un enlace a la GIST que contiene el código de muestra que actualmente está utilizando para una serie de proyectos.
https://gist.github.com/4151627
Básicamente, envuelvo los datos en una clase de "proyecto" y rellené las dependencias de Package.config. Como bono, también agrega dependencias de las referencias de interprojectas (analiza el archivo de proyecto). Las clases / lógica están ahí, así como una tarea de Nuspec de muestra.
Otros consejos
Para estar seguro, no hay nada en el proyecto Albacore que hace eso ahora mismo.Sería interesante ver la solución de Mitchell sintonizada y tal vez enrollado. Voy a mover el código a una gana , abre un " problema " (mejora) y trabaja en ello en elLADO :)