A tarefa Albacore nuspec pode resolver todas as dependências automaticamente?
Pergunta
A tarefa Albacore nuspec pode resolver todas as dependências necessárias para uma solução?Quando tenho vários projetos com dependências variáveis, é preciso muito esforço para manter o rakefile atualizado.Isso pode ser automatizado?
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
Uma solução manual seria percorrer os arquivos dos pacotes e resolver isso manualmente.Alguém escreveu algo automatizado?
Solução
Sei que esta é uma pergunta antiga, mas como não tem resposta, isso pode ajudar alguém que procura a mesma coisa.Atualmente estou trabalhando em algumas Rake Tasks para automatizar ainda mais a criação de arquivos nuspec de forma convencional/autônoma, então atualizarei este post mais tarde com a solução final.
Para responder à pergunta em questão, aqui está uma pequena função Ruby que extrairá dependências do arquivo packages.config para um determinado projeto na solução.
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 a classe Dependency usada:
class Dependency
attr_accessor :Name, :Version
def new(name, version)
@Name = name
@Version = version
end
end
Este método recebe uma instância de "projeto" e captura as dependências/versões do arquivo package.config desse projeto.
Como falei, em breve postarei uma solução mais completa, mas esse é um bom ponto de partida para qualquer pessoa que precisar.
EDITAR: Desculpe, demorei tanto para postar a versão final disso, mas aqui está um link para a essência que contém o código de exemplo que estou usando atualmente para vários projetos.
https://gist.github.com/4151627
Basicamente, eu envolvo os dados em uma classe "Projeto" e preencho as dependências do package.config.Como bônus, ele também adiciona dependências de referências entre projetos (analisa o arquivo do projeto).As classes/lógica estão lá, bem como um exemplo de tarefa nuspec.
Outras dicas
Na verdade, não há nada no projecto Albacore que faça isso neste momento.Seria interessante ver a solução de Mitchell ajustada e talvez implementada.Vou mover o código para uma essência, abra um "emitir" (aprimoramento), e trabalhe nisso paralelamente :)