Erro do NuGet NU1018

Scenario

O projeto 'MyProject' está tentando restaurar estruturas duplicadas, que têm suporte apenas no resolvedor de dependência padrão quando o SDK do .NET é a versão 10.0.300 ou mais recente. Atualize o SDK do .NET ou remova RestoreUseLegacyDependencyResolver para usar esse recurso.

Questão

O arquivo de projeto tem várias TargetFrameworks entradas que resolvem para a mesma estrutura do NuGet. Esse cenário é conhecido como aliasing de estrutura, em que diferentes propriedades TargetFramework são mapeadas para a mesma estrutura subjacente.

Por exemplo, um arquivo de projeto como o seguinte define duas estruturas de destino que resolvem para a mesma net9.0 estrutura Do NuGet:

<PropertyGroup>
  <TargetFrameworks>net9.0-custom1;net9.0-custom2</TargetFrameworks>
</PropertyGroup>

O aliasing de estrutura só tem suporte no resolvedor de dependência padrão, que requer .NET SDK 10.0.300 ou posterior (SdkAnalysisLevel de 10.0.300 ou posterior). Quando o resolvedor de dependência herdado está ativo (porque a versão do SDK é mais antiga ou porque RestoreUseLegacyDependencyResolver está definida), o formato de arquivo de ativos não dá suporte a estruturas duplicadas e o NuGet gera esse erro.

Solução

Use uma das seguintes abordagens para resolver este erro:

  • Upgrade para .NET SDK 10.0.300 ou posterior, que usa o resolvedor de dependência padrão que dá suporte ao alias de estrutura.
  • Remova a RestoreUseLegacyDependencyResolver propriedade do arquivo de projeto ou Directory.Build.props, se ela estiver definida. Isso permite que o NuGet use o resolvedor de dependência padrão.
  • Remova entradas de estrutura duplicadas de sua TargetFrameworks propriedade para que cada estrutura de destino seja resolvida para uma estrutura exclusiva do NuGet.