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?

Foi útil?

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 :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top