remover a restauração do pacote nuget da solução

148

Adicionei o recente recurso de restauração de pacote de nuget a uma solução usando 'Ativar restauração de pacote NuGet': http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

No entanto, ele quebrou meu servidor de compilação e eu não tive tempo para corrigi-lo, então eu queria removê-lo. Até onde eu sei, não há opção, por isso removi manualmente a seguinte linha de todos os meus arquivos * .csproj:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

O problema agora é que toda vez que meus arquivos * .csproj são retirados ou abertos minha solução, a linha é automaticamente adicionada novamente, interrompendo minha compilação se eu acidentalmente fazer o check-in :(

Alguma idéia de como removê-lo permanentemente?

ATUALIZAÇÃO: apesar da resposta abaixo, ela continua voltando ao abrir a solução, alguém com o mesmo problema?

Wiebe Tijsma
fonte
2
Você não pode simplesmente reverter o changeset no controle Source?
Betty
Bem, foi um grande conjunto de alterações, mas, graças ao seu comentário, dei uma olhada, e parece que ele também adicionou uma pasta .nuget no caminho da solução, excluiu isso também para ver se resolve o problema
Wiebe Tijsma
Você conseguiu corrigir o servidor de construção? (e é TeamCity?), porque a linha projeto de importação você cita acima é o que está causando o meu TeamCity constrói a falhar
Baldy
@Baldy Não estamos usando TFS Construir e eu realmente não procurar uma solução, apenas removeu (ainda pensando em mergulhar em-lo mais tarde)
Wiebe Tijsma
3
Eu criei um problema para a equipe do NuGet para corrigir esse problema. Por favor, vá-se-voto-lo em nuget.codeplex.com/workitem/3756
deadlydog

Respostas:

214

Eu não parecia muito bem, há outra propriedade adicionada aos arquivos do projeto:

<RestorePackages>true</RestorePackages>

Só é necessário remover isso e todas essas linhas manualmente de todos os arquivos * .csproj:

  <Import Project="$(SolutionDir)\.nuget\nuget.targets" />

ATUALIZAR:

Acontece que é um bugger persistente, se você estiver editando manualmente os arquivos do projeto, feche a solução e exclua todas as linhas do projeto de uma só vez ; caso contrário, elas serão adicionadas novamente assim que o projeto for recarregado ...

UPDATE2:

Exclua também a pasta .nuget da raiz da solução

UPDATE3:

Uma versão posterior do NuGet adiciona outra seção que você precisa remover:

 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

Update4

Dentro da pasta NuGet.Targetslocalizada .nuget, há outra seção que é adicionada a novos projetos ... mude para false.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>
Wiebe Tijsma
fonte
7
Descobri que também há um <Import Project="$(SolutionDir)\.nuget\nuget.targets" />no final do arquivo .csproj que precisa ser removido manualmente.
TimDog
6
HA! se afasta lentamente :)
TimDog
5
Essa coisa tem me atormentado também. Se seus projetos estiverem em muitas soluções diferentes, o recurso de restauração de pacotes causará muitos problemas.
Damian
7
"Certifique-se de fechar a solução" é realmente de grande importância aqui, pois o VS2010 parece armazenar em cache os arquivos csproj / msbuild (sem precisar de certas modificações). Não notei esse comportamento no VS2012, mas isso me afetou bastante ao modificar esses arquivos no VisualStudio.
Xavier Decoster
4
Eu criei um problema para a equipe do NuGet para corrigir esse problema. Por favor, vá-se-voto-lo em nuget.codeplex.com/workitem/3756
deadlydog
48

Para desativar a restauração do pacote Nuget:

  1. Excluir pasta .nuget
  2. Remova linhas específicas de todos os arquivos .csproj

Linhas a serem removidas:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<RestorePackages>true</RestorePackages>

Nota: Certifique-se de fazer todas as alterações de uma só vez antes de recarregar a solução, caso contrário, elas serão adicionadas novamente.

Isso se baseia no seguinte artigo: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Além disso, convém verificar se essa opção está desabilitada: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

angularsen
fonte
Eu criei um problema para a equipe do NuGet para corrigir esse problema. Por favor, vá-se-voto-lo em nuget.codeplex.com/workitem/3756
deadlydog
1
Obrigado, para mim era apenas disabeling essa opção
Maarten Kieft
Eu usei a ferramenta IFix com grande sucesso na limpeza de repositórios com muitos projetos. Basicamente, automatiza essas etapas. visualstudiogallery.msdn.microsoft.com/…
angularsen
A pasta .nuget está oculta e você precisa removê-la do diretório e não apenas do projeto.
Erik Bergstedt
8

Não é essa configuração aqui?

Opções ... -> Nuget Package Manager -> [desmarque] Permitir que o Nuget baixe pacotes ausentes

insira a descrição da imagem aqui

Estou usando o Visual Studio Professional + Resharper 8.2

orad
fonte
Excluí a pasta packages e limpei o cache do pacote para corrigir meu problema. Obrigado!
Tresto 19/06
1
Não, ele não atualizar os arquivos de proj depois - para que o problema retorna - mas bom para fazê-lo aqui também :-)
schmoopy
A janela de saída mostra isso durante a construção: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'é apenas uma confirmação de que esse deve ser o caminho a seguir.
Muçulmano Ben Dhaou
1
Isso não está relacionado ao Nuget Package Restore. As versões antigas do VS tinham um item de menu de contexto para projetos intitulados "Habilitar a restauração do pacote Nuget", que criava uma .nuget/pasta e modificava a sua .csprojpara referenciar um .targetsarquivo. Você deveria comprometer o nuget.exeseu VCS (eww, resolvendo o problema que a pepita resolve!) E a feiura assim. Atualmente, msbuild /restoreexiste e o pacote interno do VS é restaurado. O OP está perguntando como remover a maneira antiga e ruim de fazer as coisas - e não como desativar o suporte correto à restauração de pacotes internos do VS.
binki
5

As soluções atualmente usando a restauração de pacotes MSBuild-Integrated podem ser migradas para a Restauração Automática de Pacotes. Pelo que entendi, isso deve ajudar aqueles que estão enfrentando problemas de criação de IC. (Por favor, corrija-me se eu estiver enganado).

Consulte o documento no site nuget: Migrando soluções integradas ao MSBuild para usar a restauração automática de pacotes em http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Há informações para converter com e sem o TFS.

David Ebbo também postou algumas informações em http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

James Bradt
fonte
3

O NuGet tem uma postagem no blog sobre a migração para a restauração automática de pacotes: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Há um script do PowerShell mencionado na postagem do blog que cuidará da remoção automática das linhas necessárias (e recursivamente): https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

A oferta direta de uma opção Desativar restauração do pacote NuGet está marcada como Não será corrigida: https://nuget.codeplex.com/workitem/1883

Nitin Agarwal
fonte
2

Segui a solução aceita sem sucesso usando 2012. Porém, isso funcionou,

  1. Feche completamente o VS
  2. Atualize <RestorePackages>true</RestorePackages>para <RestorePackages>false</RestorePackages>e exclua a <Import Project="$(SolutionDir)\.nuget\nuget.targets" />linha
  3. Também rebatizou o nuget.exeparanuget.exe.NotExe
Daryl
fonte
2

Para qualquer um que ainda precise limpar um projeto usando a restauração de pacote NuGet antiga, a ferramenta IFix disponível aqui automatiza o processo.

Basta executar o instalador ( IFixserá adicionado a PATH) e, em seguida, execute o seguinte:

IFix nugetrestore --fix

Você pode executá-lo no modo de verificação primeiro para ver o que será limpo:

IFix nugetrestore --check
Simon Fox
fonte
1

Eu tive o mesmo problema. O que acabei fazendo: 1) entre em cada arquivo .csproj do projeto na solução, abra-o no bloco de notas e depois remova a parte do xml e salve-a.

2) Em seguida, removi todos os arquivos package.config de toda a solução.

3) Depois tive que remover as pastas .nuget e package.

Neste ponto, eu tinha uma solução completamente livre de NuGet.

4) Em seguida, referenciei manualmente todas as DLLs necessárias e cliquei em compilar e a solução funcionou como um campeão sem que os pacotes NuGet fossem necessários.

Andy30acre
fonte
1

Vá para o diretório da solução em que você possui [$(SolutionDir)\.nuget\nuget.targets] .nugetpastas e nuget.targetsarquivos, exclua a pasta e altere as linhas de remoção do csproj pela última vez.

O problema não voltará a incomodá-lo novamente.

arvind
fonte
1

Remova o arquivo packages.config da sua solução.

Latência
fonte
0

Ativei acidentalmente essa opção de "restauração de pacotes" ao abrir meu projeto no VS2012 RC e comecei a receber erros parecidos com:

"Erro 1 Não foi possível localizar 'C: \ FolderX \ SomeProject.nuget \ nuget.exe'"

Para corrigir o erro, segui as instruções acima, abra cada arquivo de projeto no bloco de notas e remova a linha RestorePackage.

Dmitry Lyalin
fonte
0

Consegui resolver esse problema seguindo estas etapas:

1) certifique-se de fazer um backup de todas as alterações nos arquivos com saída atual.

2) exclua fisicamente a pasta da solução do seu C: \ (caminho mapeado para o TFS).

3) obtenha as últimas novidades do TFS para sua solução.

4) copie (se houver) suas alterações do backup que você fez na etapa 1.

espero que ajude !

Rajesh
fonte
-2

Encontrei exatamente o mesmo problema e tentei remover todas as tags .nuget e RestorePackage dos arquivos do projeto, mas um projeto simplesmente não recarregava, não importando o quanto eu a examinasse minuciosamente nas tags .nuget e RestorePackages. Eu acho que há algumas referências ocultas a isso em algum lugar.

No final, foi mais fácil copiar os arquivos e criar um novo projeto e importá-lo para a solução.

Peter
fonte
-8

Nuget é uma merda. Apenas remova nugets e remova ou comente os elementos do pacote packages.config no diretório raiz dos projetos nos quais isso é um problema. Use referências diretas em alguma pasta lib.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>
Igor N
fonte
É péssimo, como qualquer outro produto, se você não souber usá-lo e não fizer um esforço para entendê-lo.
Wiebe Tijsma
Isso é verdade, mas, na minha opinião, cutucar não dá a você controle suficiente sobre seu projeto. Além disso, a GUI do Nuget precisa de algumas atualizações sérias. 1. Não é intuitivo, 2. É difícil gerenciar o pacote 3. É difícil desativar a restauração 4. Faz o download de pacotes desnecessários 5. Às vezes não é capaz de restaurar pacakges
Igor N
Eu concordo até certo ponto, embora eu ache realmente melhor não ter nenhum gerenciador de pacotes. Parece que eles estão trabalhando sobre os melhoramentos GUI graves para NuGet 3.0: blog.nuget.org/20141112/nuget-3.0-preview.html
Wiebe Tijsma