Compartilhar via


PackageDownload

A partir do Visual Studio 2017 e do .NET SDK 1.0.0, a funcionalidade PackageReference do NuGet foi adicionada.

O PackageReference permite que você gerencie suas dependências de pacotes diretamente no arquivo de projeto. Quando você executa a restauração, as dependências transitivas são resolvidas automaticamente e as referências aplicáveis são escolhidas para cada pacote no gráfico do projeto.

No NuGet versão 5.3, um recurso complementar chamado PackageDownload foi introduzido para projetos estilo SDK do .NET que permite baixar o pacote sem incluir seus arquivos no projeto.

Especificação de PackageDownload

O PackageDownload é um recurso utilitário para todos os projetos estilo SDK do .NET e funciona em conjunto com o PackageReference.

Os itens PackageDownload oferecem suporte atributos diferentes em comparação com o PackageReference. Somente os atributos listados na tabela abaixo são compatíveis.

Atributos Descrição Exemplo
Versão Apenas versões exatas, delimitadas por [], são aceitas. Várias versões podem ser especificadas separadas por ; [1.0.0], [1.0.0];[2.0.0]

Os pacotes adquiridos via PackageDownload passarão pelo mesmo processo de instalação que os pacotes adquiridos via PackageReference. Isso significa que as assinaturas de pacote são validadas, o mapeamento de origem do pacote é considerado. Todos os pacotes PackageDownload recém-adquiridos serão instalados na pasta de pacotes global.

Recurso PackageReference PackageDownload
Seleção de ativos de pacotes Assemblies de pacotes são adicionados automaticamente ao projeto e podem ser usados para compilação e runtime Nenhum ativo do pacote está incluído no projeto.
Dependências Resolvidas automaticamente e niveladas para uma única versão Não consideradas
pack Incluído na especificação do pacote Não incluído na especificação do pacote.
Transitividade Os itens PackageReference são propagados automaticamente para projetos dependentes Itens de PackageDownload são ignorados por projetos dependentes
Versão Intervalos de versão, como 1.0.0 ou [1.0.0, ), são aceitos. Exatamente 1 versão é permitida. Somente versões exatas são aceitas. Mais de 1 versão pode ser baixada.
dotnet list package Todas as dependências estão incluídas. Os pacotes PackageDownload não são mostrados pelo dotnet list package.

Devido ao fato de que o PackageDownload não está vinculado ao projeto de forma alguma além da aquisição, várias versões do mesmo pacote podem ser baixadas.

Limitações do PackageDownload

Considerando que este é um recurso avançado com aplicabilidade limitada, ele não tem um suporte de ferramentas equivalente ao PackageReference.

  • Não há nenhuma funcionalidade do Visual Studio ou dotnet.exe para modificar itens do PackageDownload. Você só pode alterá-los manualmente em seus arquivos de projeto.
  • Os comandos add, remove e list do dotnet não levam em consideração itens do PackageDownload.
  • Os itens do PackageDownload não fazem parte do arquivo de bloqueio de pacotes.

Aplicações do PackageDownload

A aplicação principal do PackageDownload é baixar pacotes que não seguem a estrutura tradicional de pacotes NuGet e carregam principalmente dependências de tempo de compilação.

Idealmente, todas as suas dependências são expressas através de PackageReference, mas em cenários onde isso não é possível, ou muitas vezes ainda não é prático, você pode usar esse recurso para simplesmente download pacotes em um determinado local de uma maneira semelhante ao que poderia ser feito por meio de um arquivo packages.config não vinculado a um projeto.

Exemplo:


<Project Sdk="Microsoft.Build.NoTargets/1.0.80"> <!-- This is not a project we want to build. -->

    <PropertyGroup>
        <RestorePackagesPath>packages/</RestorePackagesPath> <!-- Changes the global packages folder-->
        <MSBuildProjectExtensionsPath>$(RestorePackagesPath)obj/</MSBuildProjectExtensionsPath> <!-- It's still PackageReference, so project intermediates are still created. -->
        <TargetFramework>net5.0</TargetFramework> <!-- This is not super relevant, as long as your SDK version supports it. -->
        <DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder> <!-- If a package is resolved to a fallback folder, it may not be downloaded.-->
        <AutomaticallyUseReferenceAssemblyPackages>false</AutomaticallyUseReferenceAssemblyPackages> <!-- We don't want to build this project, so we do not need the reference assemblies for the framework we chose.-->
    </PropertyGroup>

    <ItemGroup>
        <PackageDownload Include="MySpecialPackage" version="[6.0.0]" />
    </ItemGroup>

</Project>