Aviso do NuGet NU1605
Exemplo 1
Detectado downgrade de pacote: “PackageB” de 4.0.0 para 3.5.0. Faça referência ao pacote diretamente do projeto para selecionar uma versão diferente.
"Project" -> "PackageA" 4.0.0 -> "PackageB" (>= 4.0.0)
"Project" -> "PackageB" (>= 3.5.0)
Problema
Um pacote de dependência especificou uma restrição de versão em uma versão mais alta de um pacote do que a de restauração finalmente resolvida. Isso ocorre por causa da regra direct-dependency-wins: ao resolver pacotes, a versão do pacote direto no subgráfico substituirá a dos pacotes distantes com a mesma ID.
Solução
Para o projeto que exibe o aviso de restauração, adicione uma referência de pacote à versão superior do pacote.
No exemplo acima, você alteraria a referência do pacote para PackageB
4.0.0:
"PackageA" 4.0.0 -> "PackageB" 4.0.0
"PackageB" 4.0.0
Exemplo 2
Detectado downgrade de pacote: “PackageC” de 2.0.0 para 1.1.0. Faça referência ao pacote diretamente do projeto para selecionar uma versão diferente.
"Project" -> "PackageA" 1.0.0 -> "PackageB" 2.0.0 ->"PackageC" (>= 2.0.0)
"Project" -> "PackageA" 1.0.0 -> "PackageC" (>= 1.1.0)
Problema
Um pacote de dependência especificou uma restrição de versão em uma versão mais alta de um pacote do que a de restauração finalmente resolvida. Isso ocorre por causa da regra direct-dependency-wins: ao resolver pacotes, o NuGet tenta honrar a intenção do autor do pacote.
O autor de PackageA
sofreu downgrade explicitamente de PackageC
2.0.0 para PackageC
1.1.0.
Solução
Para o projeto que exibe o aviso de restauração, adicione uma referência de pacote à versão superior do pacote.
No exemplo acima, você alteraria a referência do pacote para PackageC
2.0.0:
"PackageA" 4.0.0 -> "PackageB" 4.0.0
"PackageB" 4.0.0
Exemplo 3
Downgrade de pacote detectado: System.IO.FileSystem.Primitives de 4.3.0 para 4.0.1. Faça referência ao pacote diretamente do projeto para selecionar uma versão diferente.
Project -> System.IO.FileSystem 4.0.1 -> runtime.win.System.IO.FileSystem 4.3.0 -> System.IO.FileSystem.Primitives (>= 4.3.0)
Project -> System.IO.FileSystem 4.0.1 -> System.IO.FileSystem.Primitives (>= 4.0.1)
Problema
Determinadas combinações de pacotes fornecidos com o .NET Core 1.0 e 1.1 não são compatíveis entre si quando são referenciados juntos em um projeto do .NET Core 3.0 ou superior e um RuntimeIdentifier é especificado. Os pacotes problemáticos geralmente começam com System.
ou Microsoft.
, e têm números de versão entre 4.0.0 e 4.3.1. Nesse caso, a mensagem de downgrade terá um pacote começando com runtime.<RID>
na cadeia de dependência.
Solução
Para contornar esse problema, adicione o seguinte PackageReference:
<PackageReference Include="Microsoft.NETCore.Targets" Version="3.0.0" PrivateAssets="all" />
Você pode optar por usar a correspondência version
da versão principal do seu SDK.
Exemplo 4
Downgrade de pacote detectado: Microsoft.NETCore.App, de 2.1.8 para 2.1.0. Faça referência ao pacote diretamente do projeto para selecionar uma versão diferente.
test -> mvc -> Microsoft.NETCore.App (>= 2.1.8)
test -> Microsoft.NETCore.App (>= 2.1.0)
Problema
O projeto mvc especificou uma restrição em uma versão de um pacote mais recente do que a restauração resolveu finalmente. Isso ocorre por causa da regra direct-dependency-wins: ao resolver pacotes, a versão do pacote diretamente referenciado no gráfico substituirá a do pacote distante com a mesma ID.
Solução
Esse erro específico (com o pacote Microsoft.NETCore.App) é aprimorado atualizando o SDK do .NET Core para 2.2.100 ou posterior. Microsoft.NETCore.App é um pacote de referência automática que o SDK do .NET Core, antes da versão 3.0.100, escolhe trazer automaticamente. Confira também roll forward de runtime de implantação autossuficiente.
Observação
Embora o NU1605 seja considerado um aviso pelas ferramentas do NuGet, o SDK do .NET opta por tratar esse aviso como um erro por meio do WarningsAsErrors
.
Seu projeto pode estar atualizando esse aviso para um erro definindo TreatWarningsAsErrors
como true
.
Embora não seja recomendado, pois é mais provável que você encontre problemas de tempo de execução, você pode optar por suprimir esse aviso.
Dica
Solução alternativa: NuGetSolver é uma extensão do Visual Studio desenvolvida pela Microsoft DevLabs, criada para ajudar na resolução de conflitos de dependência. Ela automatiza o processo de identificação e solução desses problemas. Para obter mais detalhes, visite a página NuGetSolver no Visual Studio Marketplace. Gostaríamos muito de ouvir seus comentários sobre sua experiência.