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.