Compartilhar via


NuGet versus SDK como referência de projeto

Este artigo foi projetado para ajudar os desenvolvedores a escolher se devem empacotar seus softwares como um pacote NuGet ou como um SDK (software development kit). Especificamente, ele discute as diferenças entre os dois quando eles são referenciados em um projeto do Visual Studio.

  • nuGet é um sistema de gerenciamento de pacotes de software livre que simplifica o processo de incorporação de bibliotecas em um projeto. Para .NET (incluindo o .NET Core), o NuGet é o mecanismo compatível com a Microsoft para compartilhar código. O NuGet define como os pacotes para .NET são criados, hospedados e consumidos e fornece as ferramentas para cada uma dessas funções. No Visual Studio, você adiciona pacotes NuGet a um projeto usando a interface do usuário do Gerenciador de Pacotes.

  • Um SDK é uma coleção de arquivos que o Visual Studio trata como um único item de referência. A caixa de diálogo Gerenciador de Referência no Visual Studio lista todos os SDKs relevantes para o projeto atual quando você escolhe Adicionar Referência. Ao adicionar um SDK a um projeto, você pode acessar todo o conteúdo desse SDK através do IntelliSense, da janela Caixa de Ferramentas, dos designers, do Pesquisador de Objetos, do MSBuild, da implantação, da depuração e do empacotamento.

Qual mecanismo devo usar?

A tabela a seguir ajuda você a comparar os recursos de referência de um SDK com os recursos de referência do NuGet.

Característica Suporte ao SDK Notas do SDK Suporte ao NuGet Notas do NuGet
O mecanismo faz referência a uma entidade e, em seguida, todos os arquivos e funcionalidades estão disponíveis. S Você adiciona um SDK usando a caixa de diálogo do Gerenciador de Referência e todos os arquivos e funcionalidades estão disponíveis durante o fluxo de trabalho de desenvolvimento. S
O MSBuild consome automaticamente assemblies e arquivos de metadados do Windows (.winmd). S As referências no SDK são passadas automaticamente para o compilador. S
O MSBuild consome automaticamente os arquivos .h ou .lib. S O arquivo SDKName.props informa ao Visual Studio como configurar o diretório do Visual C++ e assim por diante, para consumo automático do arquivo .h ou .lib. N
O MSBuild consome automaticamente os arquivos .js ou .css. S No Gerenciador de Soluções, é possível expandir o nó de referência do SDK do JavaScript para mostrar arquivos .js ou .css individuais e, em seguida, gerar marcações <source include/> arrastando esses arquivos para seus arquivos de origem. O SDK dá suporte a F5 e à configuração automática do pacote. S
O MSBuild adiciona automaticamente o controle na caixa de ferramentas . S A Caixa de Ferramentas pode consumir SDKs e mostrar controles nas guias especificadas. N
O mecanismo dá suporte ao Instalador do Visual Studio para extensões (VSIX). S O VSIX tem um manifesto especial e uma lógica para criar pacotes do SDK S O VSIX pode ser inserido em outro programa de instalação.
O Object Browser enumera referências. S O Object Browser obtém automaticamente a lista de referências em SDKs e as enumera. N
Arquivos e links são adicionados automaticamente à caixa de diálogo do Gerenciador de Referências (links de ajuda, entre outros, são preenchidos automaticamente) S A caixa de diálogo do Gerenciador de Referência de enumera automaticamente os SDKs, juntamente com links de ajuda e a lista de dependências do SDK. N O NuGet fornece sua própria caixa de diálogo Gerenciar Pacotes do NuGet.
O mecanismo dá suporte a várias arquiteturas. S Os SDKs podem enviar várias configurações. O MSBuild consome os arquivos apropriados para cada configuração de projeto. N
O mecanismo dá suporte a várias configurações. S Os SDKs podem enviar várias configurações. Dependendo da arquitetura do projeto, o MSBuild consome os arquivos apropriados para cada arquitetura de projeto. N
O mecanismo pode especificar "não copiar". S Dependendo se os arquivos são soltos na pasta \redist ou \designtime, é possível controlar quais arquivos devem ser copiados no pacote do aplicativo de consumo. N Você declara quais arquivos copiar no manifesto de pacotes.
O conteúdo é exibido nos arquivos localizados. S Documentos XML localizados em SDKs são incluídos automaticamente para uma melhor experiência durante o design. N
O MSBuild dá suporte ao consumo de várias versões de um SDK simultaneamente. S O SDK dá suporte ao consumo de várias versões simultaneamente. N Isso não é uma referência. Você não pode ter mais de uma versão de arquivos NuGet em seu projeto de cada vez.
O mecanismo dá suporte à especificação de estruturas de destino aplicáveis, versões do Visual Studio e tipos de projeto. S A caixa de diálogo do Gerenciador de Referência do e a caixa de ferramentas mostram apenas os SDKs que se aplicam a um projeto, para que os usuários possam escolher mais facilmente os SDKs apropriados. Y (parcial) O Pivot é a estrutura de destino. Não há filtragem na interface do usuário. No momento da instalação, ele pode retornar um erro.
O mecanismo dá suporte à especificação de informações de registro para WinMDs nativos. S Você pode especificar a correlação entre o arquivo .winmd e o arquivo .dll no SDKManifest.xml. N
O mecanismo dá suporte à especificação de dependências em outros SDKs. S O SDK só notifica o usuário; o usuário ainda deve instalá-los e referenciá-los manualmente. S O NuGet os puxa automaticamente; o usuário não é notificado.
O mecanismo se integra aos conceitos da Microsoft Store, como manifesto do aplicativo e ID da Estrutura. S O SDK deve aprovar conceitos específicos da Store para que o empacotamento e o F5 funcionem corretamente com os SDKs disponíveis na Store. N
O mecanismo integra-se aos pipelines de depuração de aplicativo para aplicativos da Windows 8.x Store. S O SDK deve aprovar conceitos específicos da Store para que o empacotamento e F5 funcionem corretamente com os SDKs disponíveis na Store. S O conteúdo do NuGet torna-se parte do projeto. Não é necessário considerar nada especial em relação ao F5.
O mecanismo se integra aos manifestos do aplicativo. S O SDK deve aprovar conceitos específicos da Store para que o empacotamento e F5 funcionem corretamente com os SDKs disponíveis na Store. S O conteúdo do NuGet torna-se parte do projeto. Nenhuma consideração F5 especial é necessária.
O mecanismo implanta arquivos não referenciados (por exemplo, implantar a estrutura de teste na qual executar testes de aplicativos da Windows 8.x Store). S Se você colocar os arquivos na pasta \redist, os arquivos serão implantados automaticamente. S
O mecanismo adiciona automaticamente os SDKs da plataforma no IDE do Visual Studio. S Se você soltar o SDK do Windows 8 ou o SDK do Windows Phone em um local específico com um layout específico, o SDK será integrado automaticamente a todos os recursos do Visual Studio. N
O mecanismo dá suporte a um computador de desenvolvedor limpo. (Ou seja, não é necessária nenhuma instalação e a simples recuperação do controle do código-fonte funcionará.) N Como você referencia um SDK, é necessário verificar fazer check-in na sua solução e no SDK separadamente. Você pode verificar o SDK nos dois locais padrão fora do registro a partir dos quais o MSBuild itera os SDKs (para obter detalhes, consulte Criando um Kit de Desenvolvimento de Software). Como alternativa, se um local personalizado consistir nos SDKs, você poderá especificar o seguinte código no arquivo de projeto:

<PropertyGroup>
  <SDKReferenceDirectoryRoot>
  C:\MySDKs
  </SDKReferenceDirectoryRoot>
</PropertyGroup>

Em seguida, faça check-in dos SDKs nesse local.
S Você pode conferir a solução e o Visual Studio reconhece e atua imediatamente nos arquivos.
Você pode ingressar em uma grande comunidade existente de autores de pacotes. N/A A comunidade é nova. S
Você pode ingressar em uma grande comunidade existente de consumidores de pacotes. N/A A comunidade é nova. S
Você pode ingressar em um ecossistema de parceiros (galerias personalizadas, repositórios e assim por diante). N/A Os repositórios disponíveis incluem o Visual Studio Marketplace, o Centro de Download da Microsoft e a Microsoft Store. S
O mecanismo se integra a servidores de build de integração contínua para criação e consumo de pacotes. S O SDK deve passar o local com check-in (propriedade SDKReferenceDirectoryRoot) na linha de comando para o MSBuild. S
O mecanismo dá suporte a versões de pacote estáveis e de pré-lançamento. S O SDK dá suporte à adição de referências a várias versões. S
O mecanismo dá suporte à atualização automática para pacotes instalados. S Se for enviado como VSIX ou parte das atualizações automáticas do Visual Studio, o SDK fornecerá notificações automáticas. S
O mecanismo contém um arquivo .exe autônomo para criar e consumir pacotes. S O SDK contém MSBuild.exe. S
Os pacotes podem ser verificados no controle de versão. S Não é possível fazer check-in fora do nó Documentos, o que significa que o check-in dos SDKs da Extensão não pode ser feito. O tamanho do SDK de Extensão pode ser grande. S
Você pode usar uma interface do PowerShell para criar e consumir pacotes. Y (consumo), N (criação) Nenhuma ferramenta para criar um SDK. Consumo está sendo executado o MSBuild na linha de comando. S
É possível usar um pacote de símbolos para o suporte à depuração. S Se você soltar arquivos .pdb no SDK, os arquivos serão selecionados automaticamente. S
O mecanismo dá suporte a atualizações automáticas do gerenciador de pacotes. N/A O SDK é revisado com o MSBuild. S
O mecanismo dá suporte a um formato de manifesto leve. S SDKManifest.xml dá suporte a muitos atributos, mas um subconjunto pequeno geralmente é necessário. S
O mecanismo está disponível para todas as edições do Visual Studio. S O SDK dá suporte a todas as edições do Visual Studio. S O NuGet dá suporte a todas as edições do Visual Studio.