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/
ouref/
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.