Compartilhar via


Aviso do NuGet NU5128

Cenário 1

Algumas estruturas de destinos declaradas no grupo de dependências do nuspec e na pasta lib/ref não têm correspondências exatas na outra localização. Consulte a lista de ações abaixo:

  • Adicione um grupo de dependências para .NETStandard2.0 ao arquivo nuspec

Problema

O diretório lib/<tfm>/ ou ref/<tfm>/ no pacote contém pelo menos um arquivo para o Target Framework Moniker (TFM) especificado na mensagem de aviso. No entanto, não existe nenhum grupo de dependência para esse TFM no arquivo nuspec. Isso pode fazer com que os consumidores do pacote acreditem que o pacote não é compatível com o TFM, mesmo que o pacote não tenha dependências. Se o pacote tiver dependências não declaradas, o projeto que estiver usando o pacote enfrentará erros de tempo de execução.

Solução

  • Executar o destino do pacote do NuGet no projeto

Se possível, use o destino do pacote MSBuild do NuGet, pois ele corresponde automaticamente TFMs de assembly com grupos de dependência das estruturas de destino do projeto. Observe que seu projeto deve usar PackageReference para suas próprias dependências do NuGet. Se o projeto usar packages.config, você precisará usar nuget.exe pack e o arquivo nuspec.

  • Arquivo nuspec editado manualmente

Se você estiver usando um arquivo nuspec personalizado, recomendamos que cada TFM para o qual as assemblies lib/ ou ref/ existam tenha um grupo de dependências correspondente, mesmo que as dependências sejam as mesmas do próximo TFM compatível. Por exemplo, se um pacote contém assemblies netstandard1.0 e netstandard2.0 as dependências são as mesmas para ambos, recomendamos que ambos os TFMs sejam listados como grupos de dependência com itens de dependência duplicados.

Observe que o identificador do TFM usado nos caminhos de assembly usa um formato diferente do identificador do TFM usado em grupos de dependência. A mensagem de aviso especifica o nome correto a ser usado no grupo de dependências. Se o pacote não tiver dependências para essa estrutura de destino, use um grupo vazio. Por exemplo:

<package>
  <metadata>
    ...
    <dependencies>
      <group targetFramework=".NETFramework4.7.2" />
    </dependencies>
  </metadata>
  ...
</package>
  • Remover os arquivos lib/ ou ref/

Se você não deseja que seu pacote seja compatível com o TFM relatado, modifique seu projeto de forma que nenhum arquivo lib/<tfm>/ ou ref/<tfm>/ esteja no pacote para esse TFM. Por exemplo, se o aviso diz para adicionar um grupo de dependências para .NETFramework4.7.2 ao nuspec, remova todos o os arquivos lib/net472/* e ref/net472/* pacote.

Cenário 2

Algumas estruturas de destinos declaradas no grupo de dependências do nuspec e na pasta lib/ref não têm correspondências exatas na outra localização. Consulte a lista de ações abaixo:

  • Adicione assemblies lib ou ref para a estrutura de destino netstandard2.0

Problema

O arquivo nuspec tem um grupo de dependência para o Target Framework Moniker (TFM) relatado, mas não existem assemblies para esse TFM em lib/ ou ref/. Se houver assemblies para um TFM compatível, o pacote ainda será instalado, mas as dependências podem estar incorretas para assemblies usados em tempo de compilação e podem fazer com que o projeto falhe em tempo de execução.

Solução

  • Executar o destino do pacote do NuGet no projeto

Se possível, use o destino do pacote MSBuild do NuGet, pois ele corresponde automaticamente TFMs de assembly com grupos de dependência das estruturas de destino do projeto. Observe que seu projeto deve usar PackageReference para suas próprias dependências do NuGet. Se o projeto usar packages.config, você precisará usar nuget.exe pack e o arquivo nuspec.

  • Editar manualmente o arquivo nuspec

Adicione o TFM relatado como um Target Framework adicional para o qual seu projeto compila e adicione os assemblies ao pacote. Se você estiver usando um projeto estilo SDK para vários TFMs de destino múltiplo, os destinos do pacote MSBuild do NuGet poderão adicionar automaticamente assemblies na pasta lib/<tfm>/ correta e criar grupos de dependências com os TFMs e dependências corretos. Se você estiver usando um projeto de estilo não SDK, provavelmente precisará criar um arquivo de projeto adicional para o TFM adicional e modificar seu arquivo nuspec para copiar os assemblies de saída no local correto do pacote.

  • Adicionar um arquivo _._ vazio

Se o pacote não contiver assemblies, como um metapacote, considere adicionar um arquivo _._ vazio aos diretórios lib/<tfm>/ dos TFMs listados na mensagem de aviso. Por exemplo, se o aviso solicitar a adição de assemblies para a estrutura de destino netstandard2.0, crie um arquivo lib/netstandard2.0/_._ vazio no pacote.

  • Remover o grupo de dependências

Se você usar um arquivo nuspec personalizado, remova o grupo de dependências do TFM relatado, deixando apenas grupos de dependência para TFMs para os quais existem arquivos lib/<tfm>/ ou ref/<tfm>/.

  • Remover todas as dependências de pacotes que não estão relacionados a assemblies

Se o pacote não contiver nenhum arquivo lib/ ou ref/ e não for um meta-pacote, ele provavelmente não terá as dependências de que o consumidor do pacote precisa. Se você estiver empacotando com o destino MSBuild Pack do NuGet, poderá definir <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking> em qualquer PropertyGroup no arquivo de projeto. Se você estiver usando um arquivo nuspec personalizado, remova o elemento <dependencies>.

  • Outros cenários

Esse aviso foi adicionado durante o desenvolvimento do NuGet 5.3 e primeiro estava disponível no .NET Core SDK 3.0 Preview 9. NuGet/Home#8583 rastreia um problema em que o aviso era gerado em muitos cenários. Você pode usar a propriedade MSBuild NoWarn (adicionar <NoWarn>$(NoWarn);NU5128</NoWarn> a qualquer PropertyGroup no arquivo de projeto). Se você tiver vários projetos afetados, poderá usar Directory.Build.targets para adicionar NoWarn automaticamente a todos os projetos.