Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os modelos de projeto e item do Visual Studio geralmente precisam garantir que determinados pacotes sejam instalados quando um projeto ou item é criado. Por exemplo, o modelo ASP.NET MVC 3 instala jQuery, Modernizr e outros pacotes.
Para dar suporte a isso, os autores de modelo podem instruir o NuGet a instalar os pacotes necessários, em vez de bibliotecas individuais. Os desenvolvedores podem atualizar facilmente esses pacotes posteriormente.
Para saber mais sobre como criar modelos em si, consulte Como criar modelos de projeto ou criar modelos de projeto e item personalizados.
O restante desta seção descreve as etapas específicas a serem tomadas ao criar um modelo para incluir corretamente pacotes NuGet.
Samples
O exemplo Preinstalled-Packages está disponível no repositório NuGet/Samples no GitHub.
Adicionando pacotes a um modelo
Quando um modelo é instanciado, um assistente de modelo é invocado para carregar a lista de pacotes a serem instalados junto com informações sobre onde encontrar esses pacotes. Os pacotes podem ser inseridos no VSIX, inseridos no modelo ou localizados no disco rígido local, nesse caso, você usa uma chave do Registro para referenciar o caminho do arquivo. Detalhes sobre esses locais são dados posteriormente nesta seção.
Os pacotes pré-instalados funcionam usando assistentes de modelo. Um assistente especial é invocado quando o modelo é instanciado. O assistente carrega a lista de pacotes que precisam ser instalados e passa essas informações para as APIs apropriadas do NuGet.
Etapas para incluir pacotes em um modelo:
No arquivo
vstemplate, adicione uma referência ao assistente de modelo do NuGet adicionando o elementoWizardExtension.<WizardExtension> <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> </WizardExtension>NuGet.VisualStudio.Interop.dllé um assembly que contém apenas a classeTemplateWizard, que é um simples wrapper que invoca a implementação real emNuGet.VisualStudio.dll. A versão do assembly nunca será alterada para que os modelos de projeto/item continuem funcionando com novas versões do NuGet.Adicione a lista de pacotes a serem instalados no projeto:
<WizardData> <packages> <package id="jQuery" version="1.6.2" /> </packages> </WizardData>O assistente dá suporte a vários
<package>elementos para dar suporte a várias fontes de pacote. Os atributosideversionsão obrigatórios, o que significa que uma versão específica de um pacote será instalada mesmo que uma versão mais recente esteja disponível. Isso impede que as atualizações de pacote quebrem o modelo, deixando a decisão de atualizar o pacote para o desenvolvedor que utiliza o modelo.Especifique o repositório em que o NuGet pode encontrar os pacotes, conforme descrito nas seções a seguir.
Repositório de pacotes VSIX
A abordagem de implantação recomendada para modelos de projeto/item do Visual Studio é uma extensão VSIX , pois permite que você empacote vários modelos de projeto/item juntos e permite que os desenvolvedores descubram facilmente seus modelos usando o GERENCIADOr de Extensões do VS ou a Galeria do Visual Studio. As atualizações para a extensão também são fáceis de implantar usando o mecanismo de atualização automática do Gerenciador de Extensões do Visual Studio.
O VSIX em si pode servir como a origem dos pacotes exigidos pelo modelo:
Modifique o elemento
<packages>no arquivo.vstemplateda seguinte maneira:<packages repository="extension" repositoryId="MyTemplateContainerExtensionId"> <!-- ... --> </packages>O atributo
repositoryespecifica o tipo de repositório comoextension, enquantorepositoryIdé o identificador exclusivo do próprio VSIX (este é o valor do atributoIDno arquivo de extensãovsixmanifest, consulte Referência do Esquema de Extensão VSIX 2.0).Coloque seus
nupkgarquivos em uma pasta chamadaPackagesno VSIX.Adicione os arquivos de pacote necessários como
<Asset>novsixmanifestarquivo (consulte referência do esquema de extensão VSIX 2.0):<Asset Type="Moq.4.0.10827.nupkg" d:Source="File" Path="Packages\Moq.4.0.10827.nupkg" d:VsixSubPath="Packages" />Observe que você pode entregar pacotes no mesmo VSIX que seus modelos de projeto ou colocá-los em um VSIX separado se isso fizer mais sentido para o seu cenário. No entanto, não faça referência a nenhum VSIX sobre o qual você não tenha controle, pois as alterações nessa extensão podem interromper seu modelo.
Repositório de pacotes de modelo
Se você estiver distribuindo apenas um modelo de projeto/item e não precisar empacotar vários modelos juntos, poderá usar uma abordagem mais simples, mas mais limitada, que inclui pacotes diretamente no arquivo ZIP do modelo de projeto/item:
Modifique o elemento
<packages>no arquivo.vstemplateda seguinte maneira:<packages repository="template"> <!-- ... --> </packages>O
repositoryatributo tem o valortemplatee orepositoryIdatributo não é necessário.Coloque pacotes na pasta raiz do arquivo ZIP do modelo de projeto/item.
Vale ressaltar que usar esta abordagem em um VSIX que contém vários modelos leva a um excesso desnecessário quando um ou mais pacotes são comuns aos modelos. Nesses casos, use o VSIX como o repositório , conforme descrito na seção anterior.
Caminho da pasta especificado pelo Registro
Os SDKs instalados usando uma MSI podem instalar pacotes NuGet diretamente no computador do desenvolvedor. Isso os torna imediatamente disponíveis quando um projeto ou modelo de item é usado, em vez de ter que extraí-los durante esse tempo. ASP.NET modelos usam essa abordagem.
Fazer com que o MSI instale pacotes no computador. Você pode instalar apenas os
.nupkgarquivos ou instalá-los junto com o conteúdo expandido, o que salva uma etapa adicional quando o modelo é usado. Nesse caso, siga a estrutura de pasta padrão do NuGet na qual os.nupkgarquivos estão na pasta raiz e, em seguida, cada pacote tem uma subpasta com o par id/version como o nome da subpasta.Escreva uma chave do Registro para identificar o local do pacote:
- Localização da chave: para toda a máquina
HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\NuGet\Repository; ou, se por usuário, os modelos e pacotes instalados, como alternativa, useHKEY_CURRENT_USER\SOFTWARE\NuGet\Repository - Nome da chave: use um nome exclusivo para você. Por exemplo, os modelos ASP.NET MVC 4 para o VS 2012 usam
AspNetMvc4VS11. - Valores: o caminho completo para a pasta de pacotes.
- Localização da chave: para toda a máquina
No elemento do
.vstemplatearquivo, adicione o atributorepository="registry"e especifique o nome da chave do Registro no atributokeyName.Se você tiver descompactado previamente seus pacotes, use o
isPreunzipped="true"atributo.(NuGet 3.2+) Se você quiser forçar uma compilação em tempo de design após a instalação do pacote, adicione o atributo
forceDesignTimeBuild="true".Como otimização, adicione
skipAssemblyReferences="true"porque o próprio modelo já inclui as referências necessárias.<packages repository="registry" keyName="AspNetMvc4VS11" isPreunzipped="true"> <package id="EntityFramework" version="5.0.0" skipAssemblyReferences="true" /> <-- ... --> </packages>
Práticas recomendadas
Declare uma dependência no VSIX do NuGet adicionando uma referência a ela em seu manifesto VSIX:
<Reference Id="NuPackToolsVsix.Microsoft.67e54e40-0ae3-42c5-a949-fddf5739e7a5" MinVersion="1.7.30402.9028"> <Name>NuGet Package Manager</Name> <MoreInfoUrl>http://learn.microsoft.com/nuget/</MoreInfoUrl> </Reference> <!-- ... -->Exigir que modelos de projeto/item sejam salvos na criação, incluindo
<PromptForSaveOnCreation>true</PromptForSaveOnCreation>no.vstemplatearquivo.Os modelos não incluem um arquivo
packages.confige não incluem nenhuma referência ou conteúdo que seria adicionado quando os pacotes NuGet fossem instalados.