Tenho a seguinte convenção para a maioria dos meus projetos:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Você notará que eu não mantenho bibliotecas externas dentro da pasta de origem. Também estou muito interessado em usar o NuGet, mas não quero essas bibliotecas externas dentro da pasta de origem. O NuGet tem uma configuração para alterar o diretório em que todos os pacotes são carregados?
.net
visual-studio
nuget
nuget-package
TheCloudlessSky
fonte
fonte
Respostas:
Agora é possível controlar em qual pasta os pacotes estão instalados.
http://nuget.codeplex.com/workitem/215
Edit: Veja o comentário de Phil Haack em 10 de dezembro de 2010 às 23:45 (no item de trabalho / no link acima). O suporte é parcialmente implementado na 1.0, mas não está documentado.
De acordo com @dfowler: Adicione um arquivo nuget.config ao lado da solução com este:
Há um pacote de pepitas para criar a substituição da pasta do pacote.
Atualização para a versão 2.1
Como comentou Azat, agora existe documentação oficial sobre como controlar os locais dos pacotes. As notas de versão do 2.1 especificam a seguinte configuração em um arquivo nuget.config (consulte as notas de versão para obter uma descrição dos locais válidos para colocar os arquivos de configuração e como o modelo de configuração hierárquica funciona):
Isso alteraria a pasta packages para o nível de configuração em que você colocou o arquivo (solução se você o colocar no diretório da solução, projeto no diretório do projeto e assim por diante). Observe que as notas de versão afirmam:
fonte
Isto não funcionou para mim:
isso funcionou para mim:
fonte
Ok, para o bem de qualquer pessoa que esteja lendo este post - eis o que eu entendo da miríade de respostas acima:
O arquivo nuget.config na pasta .nuget é relativo a essa pasta. Isso é importante porque se a sua nova pasta for algo como '../Packages' que a colocará onde sempre sai da caixa. Como @ bruce14 afirma, você deve fazer '../../Packages'
Não foi possível obter o nuget mais recente (2.8.5) para encontrar uma pasta de pacotes fora do local padrão sem ativar a restauração do pacote. Portanto, depois de ativar a restauração do pacote, o seguinte deve ser adicionado ao arquivo nuget.config dentro da pasta .nuget para alterar o local:
(Isso é importante) Se você fizer QUALQUER alteração no local da pasta do pacote, dentro dos arquivos nuget.config, deverá reiniciar o visual studio ou fechar / recarregar a solução para que as alterações tenham efeito.
fonte
Uma solução para o Nuget 3.2 no Visual Studio 2015 é:
Usando barra para a pasta pai. Salve o arquivo acima (nuget.config) na pasta da solução.
A referência está disponível aqui
fonte
../lib
Isso é uma barra para a frente, não uma barra para trás. O que você quer dizer?A solução proposta nas notas de versão para 2.1 não funciona pronta para uso. Eles esqueceram de mencionar que há código:
o que impede que ele funcione. Para corrigir isso, você precisa modificar o arquivo NuGet.targets e remover o parâmetro 'OutputDirectory':
Então agora, se você adicionar a configuração 'repositoryPath' em algum lugar no NuGet.config (consulte as notas de versão para obter uma descrição dos locais válidos para colocar os arquivos de configuração), ele restaurará todos os pacotes em um único local, mas ... Seu .csproj ainda contém dicas para montagens escritas como caminhos relativos ...
Ainda não entendo por que eles foram difíceis, em vez de alterar o PackageManager, para adicionar caminhos de dica em relação ao PackagesDir. É assim que faço manualmente para ter diferentes locais de pacotes localmente (na minha área de trabalho) e no agente de compilação.
fonte
Além da resposta de Shane Kms, se você ativou o Nuget Package Restore, edite o NuGet.config localizado na pasta .nuget da seguinte maneira:
Observe o ".. \" extra, que segue da pasta .nuget e não da pasta da solução.
fonte
Nenhuma dessas respostas estava funcionando para mim (Nuget 2.8.6), por falta de algumas dicas, tentará adicioná-las aqui, pois pode ser útil para outras pessoas.
Depois de ler as seguintes fontes:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Parece que
Por exemplo
Você também pode usar o comando NuGet para garantir que a sintaxe esteja correta assim:
fonte
Para projetos .NET Core e Visual Studio 2017, eu era capaz de restaurar todos os pacotes para o caminho relativo, fornecendo esta configuração:
Com base na minha experiência, a pasta lib foi criada no mesmo nível em que o Nuget.config foi encontrado, independentemente do arquivo sln. Eu testei e o comportamento é o mesmo para restauração de linha de comando dotnet e reconstrução do Visual Studio 2017
fonte
globalPackagesFolder
chave da pasta do pacote do meu projeto. Eu tentei adicionar um único pacote comdotnet add package MyPackage
.nuget.exe
baixou toda a estrutura de 83 pacotes .NET para essa pasta. Não era isso que eu pretendia. Eu só queria meu MyPackage único na minha pasta de pacote local, controlada por fonte.O arquivo de configuração na resposta aceita funciona para mim no VS2012. No entanto, para mim, só funciona quando faço o seguinte:
Se eu seguir essas etapas, posso usar uma pasta de pacotes compartilhados.
fonte
Para alterar o caminho para projetos usando PackageReference em vez de packages.config, você precisa usar
globalPackagesFolder
De https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
Coloquei o Nuget.config ao lado do meu arquivo de solução e ele funcionou.
fonte
Mais um pequeno detalhe que eu acabei de descobrir. (Isso pode ser tão básico que alguns não o mencionaram, mas foi importante para a minha solução.) A pasta "packages" termina na mesma pasta que o arquivo .sln.
Nós movemos nosso arquivo .sln e, em seguida, corrigimos todos os caminhos internos para encontrar os vários projetos e pronto! Nossa pasta de pacotes acabou onde queríamos.
fonte
ATUALIZAÇÃO para o VS 2017:
Parece que as pessoas da equipe Nuget finalmente começaram a usar o Nuget, o que os ajudou a encontrar e consertar várias coisas importantes. Então agora (se não me engano, como ainda não foi migrado para o VS 2017), o abaixo não é mais necessário. Você deve poder definir o "repositoryPath" como uma pasta local e ele funcionará. Mesmo você pode deixá-lo como um local de restauração padrão movido das pastas da solução para o nível da máquina. Mais uma vez - eu ainda não testei sozinho
VS 2015 e versões anteriores
Apenas uma dica para outras respostas (especificamente isso ):
O local da pasta Pacote NuGet pode ser alterado via configuração, mas o VisualStudio ainda faz referência a assemblies nesta pasta relativamente:
Para solucionar isso (até uma solução melhor), usei o comando subst para criar uma unidade virtual que aponta para um novo local da pasta Packages:
Agora, ao adicionar um novo pacote NuGet, a referência do projeto usa sua localização absoluta:
Nota:
fonte
<HintPath>$(SolutionDir)\packages\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
em vez de usarsubst
Apenas atualizando com o Nuget 2.8.3. Para alterar a localização dos pacotes instalados, ativei a restauração de pacotes com o botão direito do mouse na solução. Editou o NuGet.Config e adicionou estas linhas:
Em seguida, reconstruiu a solução, baixou todos os pacotes para a pasta desejada e atualizou as referências automaticamente.
fonte
A maneira mais consistente é usar usando
nuget config
para definir corretamente a configuração:https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings
fonte