A criação de um pacotes NuGet comuns …

A criação de um pacotes NuGet comuns …

A criação de um pacotes NuGet comuns ...

Tenho visto que há maneiras de apontar um local pacote comum (talvez no nível raiz do projeto, estamos usando controle de origem TFS) com o lançamento 2.1 do NuGet, consulte as notas de versão. Eu estou usando NuGet v2.7

Mas eu tentei adicionar nuget.config arquivos sem ver qualquer efeito deste. Pacotes ainda estão armazenadas na pasta de solução. Existe alguma coisa que eu perdi? Parece haver diferentes estruturas do nó XML para adicionar ao arquivo nuget.config, dependendo de quem é responder a essa pergunta: Schwarzie sugere em outro segmento Stackoverflow:

As notas de lançamento para NuGet 2.1 (ver link acima) sugere o seguinte formato:

Eu não sei qual destes, ou qualquer, ou ambas irão trabalhar no final. Eu tentei tanto a nível solução. o arquivo nuget.config pode ser colocado no nível raiz do projeto TFS, ou deve estar no diretório solução? Parece que NuGet lê e aplica as configurações desses arquivos em uma determinada ordem, por que não faria sentido para adicioná-los em vários níveis, em que um arquivo nuget.config no nível de solução seria substituir um no nível raiz do projeto TFS. isso pode ser esclarecido?

Eu preciso remover todos os pacotes instalados antes que essas referências vai funcionar? Eu adoraria se alguém poderia fornecer um passo-a-passo para mover-se do uso NuGet específicas de solução para uma pasta pacote comum onde os projectos que pertencem a várias soluções podem encontrar os seus pacotes NuGet necessários.

perguntou 22 de agosto ’13 em 9:18

Eu tenho uma situação semelhante com fontes de pacotes externos e internos com projetos referenciados em mais de uma solução. Eu só tenho esta trabalhando com uma de nossas bases de código hoje e parece estar trabalhando com as estações de trabalho do desenvolvedor e nosso servidor de compilação. O processo abaixo tem esse cenário em mente (embora não deve ser difícil de se adaptar a ter a pasta de pacotes comuns mais onde).

  • codebase
  • projeto A
  • projeto B
  • projeto C
  • soluções
  • solução 1
  • solução 2
  • solução 3
  • Pacotes (este é o único comum compartilhada por todas as soluções)

Este processo é um pouco mais fácil agora do que quando eu originalmente abordado este e pensei que era hora de atualizar isso. Em geral, o processo é o mesmo apenas com menos passos. O resultado é um processo que resolve ou fornece o seguinte:

  • Tudo o que precisa de ser comprometida com controle de código fonte é visível e monitorados na solução
  • Instalação de novos pacotes ou atualização de pacotes usando o Gerenciador de Pacotes no Visual Studio usará o caminho do repositório correto
  • Após a configuração inicial, nenhuma pirataria de arquivos csproj
  • Nenhuma modificação de estação de trabalho desenvolvedor (Código é construir pronto no check-out)

Existem algumas desvantagens potenciais para estar ciente de (eu não experimentá-los ainda, YMMV). Ver a resposta e comentários abaixo do Benol.

Adicionar NuGet.Config

Você vai querer criar um arquivo NuGet.Config na raiz da \ Solutions \ pasta. Certifique-se de que este é um arquivo codificado UTF-8 que você criar, se você não tem certeza de como fazer isso, use File-gt Visual Studio; Nova gt; menu Arquivo e, em seguida, escolher o modelo de arquivo XML. Adicionar a NuGet.Config o seguinte:

Para a configuração repositoryPath, você pode especificar um caminho absoluto ou caminho relativo (recomendado), utilizando o $ token. O token de $ base em onde o NuGet.Config está localizado (A $ token é, na verdade, em relação ao um nível abaixo a localização do NuGet.Config). Então, se eu tenho \ Solutions \ NuGet.Config e eu quero \ Solutions \ Pacotes de que eu precisaria para especificar $ \ .. \ Pacotes como o valor.

Em seguida, você vai querer adicionar uma pasta de solução para você solução chamada algo como "NuGet" (-Clique direito sobre sua solução, Add-gt; Nova pasta Solution). Pastas de solução são pastas virtuais que só existem na solução Visual Studio e não irá criar uma pasta real na unidade (e você pode fazer referência a arquivos de qualquer lugar). Botão direito do mouse em seu "NuGet" pasta de solução e, em seguida Add-gt; Item Existente e selecione \ Solutions \ NuGet.Config.

A razão pela qual estamos fazendo isso é para que seja visível na solução e deve ajudar com a certeza de que está devidamente comprometidos com o seu controle de código fonte. Você pode querer fazer este passo para cada solução em sua base de código que está a participar com os seus projetos compartilhados.

Ao colocar o arquivo NuGet.Config em \ Solutions \ acima de quaisquer arquivos .sln, estamos aproveitando o fato de que NuGet irá recursivamente navegar a estrutura da pasta para cima do "diretório de trabalho atual" procurando por um arquivo NuGet.Config de usar. o "diretório de trabalho atual" significa um par de coisas diferentes aqui, um é o caminho de execução de NuGet.exe eo outro é a localização do arquivo .sln.

A comutação sua pasta de pacotes

Em primeiro lugar, eu recomendo que você passar por cada uma das suas pastas de solução e excluir qualquer \ Packages \ pastas que existem (você vai precisar para fechar Visual Studio primeiro). Isto torna mais fácil para ver onde NuGet está colocando o seu \ Packages \ pasta recém-configurado e garante que todos os links para o mal \ Packages \ pasta vai falhar e pode, então, ser corrigido.

Abra a sua solução no Visual Studio e lançar uma Reconstruir tudo. Ignorar todos os erros de construção que você irá receber, este é esperado neste momento. Isto deve lançar o pacote NuGet recurso de restauração no início do processo de construção entanto. Verifique se o seu \ Solutions \ Packages \ pasta foi criada no local que você deseja. Se não tem, reveja sua configuração.

Agora, para cada projeto em sua solução que você vai querer:

  1. Clique com o botão direito do mouse sobre o projeto e selecione Descarregar Projeto
  2. Clique com o botão direito do mouse sobre o projeto e selecione Edit your-xxx.csproj
  3. Encontrar todas as referências a \ Packages \ e atualizá-los para o novo local.
    • A maioria destes será lt; HintPathgt; referências, mas não todos eles. Por exemplo, WebGrease e Microsoft.Bcl.Build terá configurações de caminho separado que precisam ser atualizados.
    • Salve o .csproj e, em seguida, clique com o botão direito do mouse no projeto e selecione Reload Projeto

    Uma vez que todos os seus arquivos csproj foram atualizados, lançar outra Reconstruir tudo e você não deve ter mais construir erros sobre referências ausentes. Neste ponto você está feito, e agora têm NuGet configurado para usar uma pasta Pacotes compartilhada.

    Em primeiro lugar o aspecto a ter em mente é que nuget.config não controla todas as configurações de caminho no sistema de pacotes NuGet. Isto foi particularmente confuso para descobrir. Especificamente, o problema é que msbuild e Visual Studio (chamar msbuild) não usar o caminho no nuget.config mas está substituindo-lo no arquivo nuget.targets.

    Preparação do Meio ambiente

    Em primeiro lugar, gostaria de passar a pasta de sua solução e remover todos os pacotes \ \ pastas que existem. Isso ajudará a garantir que todos os pacotes são visivelmente instalar para a pasta correta e para ajudar a descobrir quaisquer referências mau caminho ao longo de suas soluções. Em seguida, gostaria de fazer se você tem a última extensão do Visual Studio NuGet instalado. Também gostaria de ter certeza de que o mais recente nuget.exe instalado em cada solução. Abra um prompt de comando e vá para cada US $ (SolutionDir) \ .nuget \ pasta e execute o seguinte comando:

    Definir caminho da pasta pacote comum para NuGet

    Abra cada $ (SolutionDir) \ .nuget \ NuGet.Config e adicione o seguinte dentro do lt; configurationgt; seção:

    Nota: Você pode usar um caminho absoluto ou um caminho relativo. Tenha em mente, se você estiver usando um caminho relativo com $ que é relativo ao um nível abaixo a localização do NuGet.Config (acredito que este é um bug).

    Definir caminho da pasta pacote comum para MSBuild e Visual Studio

    Abra cada $ (SolutionDir) \ .nuget \ NuGet.targets e modificar a seção seguinte (note que para não-Windows, há uma outra seção abaixo):

    Actualizar a ser PackagesDir

    Nota: O GetFullPath irá resolver o nosso caminho relativo para um caminho absoluto.

    Restaurar todos os pacotes NuGet na pasta comum

    Abra um prompt de comando e Goto cada $ (SolutionDir) \ .nuget e execute o seguinte comando:

    Neste ponto, você deve ter um único \ packages \ pasta no seu local comum e nenhum em qualquer uma das suas pastas de solução. Se não, então verificar seus caminhos.

    Corrigindo referências de projeto

    Abra cada arquivo .csproj em um editor de texto e encontrar quaisquer referências para \ pacotes e atualizá-los para o caminho correto. A maioria destes será lt; HintPathgt; referências, mas não todos eles. Por exemplo, WebGrease e Microsoft.Bcl.Build terá configurações de caminho separado que precisam ser atualizados.

    Construa a sua solução

    Abra a sua solução no Visual Studio e lançar uma compilação. Se ele se queixar sobre os pacotes que precisam ser restaurados em falta, não assuma que o pacote está faltando e precisa ser restaurado (erro pode ser enganosa). Poderia ser um caminho ruim em um dos seus arquivos csproj. Verifique se primeiro antes de restaurar o pacote.

    Tem um erro de compilação sobre pacotes faltando?

    Se você já verificou que os caminhos em seus arquivos csproj estão corretas, então você tem duas opções para tentar. Se este é o resultado da atualização do código de controle de código fonte, então você pode tentar verificar uma cópia limpa e então construir isso. Isso funcionou para um dos nossos desenvolvedores e eu acho que houve um artefato no arquivo .suo ou algo similar. A outra opção é para forçar manualmente um pacote de restauração usando a linha de comando na pasta .nuget da solução em questão:

    • Excluir a pasta .nuget (no disco e em solução)
    • Coloque um arquivo NuGet.Config em uma pasta pai comum de todas as soluções
    • Excluir todas as pastas pacotes existentes
    • Vá através de todos os arquivos csproj e alterar HintPaths para apontar para a nova localização
    • Lucro

    No meu caso, eu queria colocar todos os pacotes em .packages. por isso a minha NuGet.Config parecia abaixo.

    Note-se que existem algumas coisas “estranhas” que podem acontecer, mas eu acho que eles são suportável:

    • Se você ‘Update’ um pacote a partir de uma solução, ele vai rapidamente apagar a versão mais antiga da pasta de pacotes (não é possível saber se você tem outra solução que está apontando lá). Isso não me incomoda bastante, assim como a outra solução só vai restaurar quando necessário.
    • Se você tentar adicionar pacote de clique com o botão direito do mouse sobre-solução, se o pacote já está presente em outra solução, ele vai ver que ele está lá e mostrar-lhe o ‘sinal verde’ em vez do botão ‘instalar’. Eu costumo instalar a partir de clique com o botão direito do mouse no projeto, então isso não me incomoda em nada.

    aviso Legal. Eu apenas tentei isso hoje, eu não tenho nenhuma experiência de longo prazo para apoiá-la!

    respondeu 18 de dezembro ’13 às 14:32

    Aqui está o conteúdo do meu arquivo:

    Então, todos os pacotes de ir para o "C: \ Projects \ nugetpackages" pasta, não importa onde a solução é.

    Em todas as suas soluções, basta apagar existente "pacotes" pastas. Em seguida, construir sua solução, e NuGet irá restaurar automaticamente os pacotes que estão faltando no diretório novo, centralizado especificado.

    Atualizando a minha experiência com o NuGet 2.8.3. Era relativamente simples. Tudo se foi pacote permitiu restaurar a partir de solução botão direito do mouse. Editado NuGet.Config e acrescentou estas linhas:

    Em seguida, reconstruída a solução, ele baixou todos os pacotes para minha pasta desejada e referências atualizadas automaticamente. Eu fiz o mesmo para todos os meus outros projetos, onde apenas pacotes incrementais foram baixados e pacotes existentes foram referenciados. Daí um repositório de pacotes comum para todos os projectos como foi definido.

    respondeu 09 de novembro ’14 em 05:56

    Criar arquivo de nuget.config na raiz do repositório.

    Isso fará com que todos os pacotes vão para a pasta de pacotes em nível de seu arquivo nuget.config.

    Agora você pode ir para cada console NuGet .SLN com o comando ‘-reinstall-package update’

    Se você tiver como múltiplos repositório no mesmo nível eo que compartilham a mesma pasta do pacote através deles tentar uso caminho a percorrer uma pasta para cima.

    Mas desta forma você causar que os pacotes NuGet referência csproj está apontando uma pasta do lado de fora você repositorys caminho.

    respondeu 02 de outubro ’15 em 18:08

    Isto é como você iria dirigir pacotes para um caminho relativo para a pasta .nuget:

    Por exemplo, se a sua solução (ficheiro.SLN) reside em C: \ Projects \ MySolution, quando você habilita restaurar pacote NuGet, a pasta .nuget é criado da seguinte forma: C: \ Projects \ MySolution.nuget e os pacotes serão baixados para um diretório da seguinte forma: C: \ Projects \ MySolution \ Dependências

    NOTA: Por alguma razão (desconhecido), toda vez que eu atualizar o "repositoryPath", Eu tenho que fechar e reabrir a solução para que as alterações entrem em vigor

    respondeu 13 de maio ’15 at 1:00

    Note-se que há uma barra ausente na marca de configuração de fechamento. – Moo 11 jun ’15 em 20:14

    Graças @Moo, fixo! – dotnetguy 12 jun ’15 em 01:39

    Apenas hardlink / pacotes para o local compartilhado desejado. Em seguida, seu projeto não será quebrado por outros usuários, que não têm um local especial pacotes.

    respondeu 23 de janeiro em 19:36

    no servidor TFS este é um bom corte, um bom raciocínio – divinci 18 de maio em 09:37

    Para qualquer solução significativa, as respostas acima ficará aquém. Muito simplesmente, um complexo de estrutura de espaço de trabalho do TFS com diferentes caminhos relativos, ramificando, projetos compartilhados etc. fazer um único repositório central impossível.

    Usando ($ SolutionDir) é um passo na direcção certa, mas a mão de codificação o arquivo csproj com ($ SolutionDir) se tornaria muito tedioso em uma base de código com centenas de pacotes que são atualizados regularmente (atualização toda vez que ocorre, o HintPath ele será substituído com um novo caminho relativo). O que acontece se você tem que executar Update-Package -Reinstall.

    Há uma grande solução chamada NugetReferenceHintPathRewrite. Ele automatiza a injeção de ($ SolutionDir) nos HintPaths apenas anteriores para construir (sem realmente alterar o arquivo csproj). Eu imagino que poderia ser facilmente incorporado em sistemas de compilação automatizados

    respondeu 08 de agosto em 21:11

    posts relacionados

    • Algumas soluções para as mais comuns …

      Use marcas maiores, como Trojan Magnum, Maxx, Pleasure Plus ou Durex. Estas marcas maiores podem caber qualquer pessoa, independentemente do tamanho, uma vez que o anel na base não é qualquer maior. Coloque uma gota de …

    • Corredores de joelho uma causa comum de …

      Quais são os sintomas de corredores do joelho? O joelho não bloquear ou ceder, mas sofredores podem não ter confiança na articulação. Qualquer coisa que a perna é dobrar e esticar pode ser dolorosa, …

    • Erupções em crianças – Infância comum …

      Existem várias erupções em crianças que podem ocorrer. As causas destas erupções infância são bastante amplo. Esta página discute brevemente algumas das erupções mais comuns da infância. Os vírus são um …

    • Problemas de próstata, sintomas comuns da prostatite.

      Se você tiver problemas da próstata, ou problemas de saúde dos homens relacionados, como micção frequente ou dolorosa, consulte o seu médico logo que possível. Stan só descobri que um amigo tem de próstata …

    • Coceira na pele Red erupções 7 Comum …

      Independentemente do seu tipo de pele, as chances são que você teve um, vermelho, erupção cutânea irregular coceira em um momento ou outro. É como o sinal internacional de irritação da pele. Se ele não está afetando sua vida diária …

    • Pacotes e preços, preços de pacotes de fotografia de casamento.

      Pacote A | $ 1.395 – Até 8 horas de Fotografia. – Todas as fotografias de alta resolução editada de seu casamento inteiro com liberação de direitos autorais em um flash drive de 8GB. – $ 100 impressão de crédito. – Foto on-line …