Modelo MVC personalizado
por Jacques Eloff
O lançamento da Atualização de Ferramentas do MVC 3 para Visual Studio 2010 introduziu um assistente de projeto separado para projetos MVC. A mudança foi impulsionada por dois fatores. Primeiro, a introdução de novos modelos no MVC 3 e o suporte para mecanismos de exibição adicionais, como o Razor, levam à superlotação da caixa de diálogo Novo Projeto no Visual Studio. Em segundo lugar, os clientes estavam solicitando pontos de extensibilidade e o novo assistente de projeto do MVC nos daria a oportunidade de responder a essas solicitações.
Adicionar modelos personalizados era um processo árduo que dependia do uso do registro para tornar novos modelos visíveis para o assistente de projeto do MVC. O autor de um novo modelo teve que encapsule-o dentro de um MSI para garantir que as entradas necessárias do Registro fossem criadas no momento da instalação. A alternativa era disponibilizar um arquivo ZIP que contém o modelo e fazer com que o usuário final criasse as entradas do Registro necessárias manualmente.
Nenhuma das abordagens mencionadas anteriormente é ideal, portanto, decidimos aproveitar algumas das infraestruturas existentes fornecidas pelas extensões VSIX para facilitar a criação, distribuição e instalação de modelos MVC personalizados a partir do MVC 4 para Visual Studio 2012. Alguns dos benefícios fornecidos por essa abordagem são:
- Uma extensão VSIX pode conter vários modelos que dão suporte a linguagens diferentes (C# e Visual Basic) e vários mecanismos de exibição (ASPX e Razor).
- Uma extensão VSIX pode ter como destino vários SKUs do Visual Studio, incluindo SKUs Expressas.
- A Galeria do Visual Studio facilita a distribuição da extensão para um público amplo.
- As extensões DO VSIX podem ser atualizadas, facilitando a criação de correções e atualizações para seus modelos personalizados.
Pré-requisitos
- Os usuários precisam estar familiarizados com a criação de modelos de projeto, incluindo a marcação necessária para arquivos vstemplate etc.
- Os usuários precisarão ter Visual Studio Professional e superior instalados. OS SKUs expressos não dão suporte à criação de projetos VSIX.
- SDK do Visual Studio 2012 instalado.
Exemplo
A primeira etapa é criar um novo projeto VSIX usando C# ou Visual Basic. Selecione Arquivo > Novo Projeto, clique em Extensibilidade no painel esquerdo e selecione o Projeto VSIX.
Depois que o projeto for criado, o designer VSIX será aberto.
O designer pode ser usado para editar algumas das propriedades gerais da extensão que serão mostradas aos usuários quando eles instalarem a extensão ou navegarem pelas extensões instaladas no Visual Studio (Extensões de Ferramentas > e Atualizações). Depois de concluir as informações gerais, clique na guia Instalar Destinos.
Essa guia é usada para especificar os SKUs e as versões do Visual Studio compatíveis com sua extensão. Marque a caixa de seleção Este VSIX está instalado para que todos os usuários habilitem instalações por computador do VSIX. Clique no botão Novo à direita para adicionar SKUs adicionais, como o VWD (Web Developer Express).
Se você pretende dar suporte a todos os SKUs Profissionais e superiores (Professional, Premium e Ultimate), você só precisa selecionar o SKU mínimo na família , Microsoft.VisualStudio.Pro. Lembre-se de salvar todas as alterações depois de concluir os Destinos de Instalação.
A guia Ativos é usada para adicionar todos os arquivos de conteúdo ao VSIX. Como o MVC requer metadados personalizados, você editará o XML bruto do arquivo de manifesto VSIX em vez de usar a guia Ativos para adicionar conteúdo. Comece adicionando o conteúdo do modelo ao projeto VSIX. É importante que a estrutura da pasta e o conteúdo espelho o layout do projeto. O exemplo a seguir contém quatro modelos de projeto que foram derivados do modelo de projeto MVC básico. Certifique-se de que todos os arquivos que compõem o modelo de projeto (tudo sob a pasta ProjectTemplates) sejam adicionados ao grupo de itens Content no arquivo de projeto VSIX e que cada item contenha os metadados CopyToOutputDirectory e IncludeInVsix , conforme mostrado no exemplo abaixo.
<Conteúdo Include="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicWeb.config">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
<IncludeInVSIX>true</IncludeInVSIX>
</Conteúdo>
Caso contrário, o IDE tentará compilar o conteúdo do modelo quando você compilar o VSIX e provavelmente verá um erro. Arquivos de código em modelos geralmente contêm parâmetros de modelo especiais usados pelo Visual Studio quando o modelo de projeto é instanciado e, portanto, não pode ser compilado no IDE.
Feche o designer VSIX e clique com o botão direito do mouse no arquivo source.extension.manifest no Gerenciador de Soluções e selecione Abrir com e escolha a opção Editor XML (Texto).
Crie um <elemento Assets> e adicione um <elemento Asset> para cada arquivo que deve ser incluído no VSIX. O atributo Type de cada <elemento Asset> deve ser definido como Microsoft.VisualStudio.Mvc.Template. Esse é um namespace personalizado que somente o assistente de projeto do MVC entende. Consulte a documentação do Esquema do VSIX 2.0 para obter informações adicionais sobre a estrutura e o layout do arquivo de manifesto.
Apenas adicionar os arquivos ao VSIX não é suficiente para registrar os modelos com o assistente do MVC. Você precisa fornecer informações como o nome do modelo, a descrição, os mecanismos de exibição com suporte e a linguagem de programação para o assistente do MVC. Essas informações são carregadas em atributos personalizados associados ao <elemento Asset> para cada arquivo vstemplate .
<Asset d:VsixSubPath="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx"
Type="Microsoft.VisualStudio.Mvc.Template"
d:Source="File"
Path="ProjectTemplates\MyMvcWebApplicationProjectTemplate.csaspx\BasicMvcWebApplicationProjectTemplate.11.csaspx.vstemplate"
ProjectType="MVC"
Language="C#"
ViewEngine="Aspx"
TemplateId="MyMvcApplication"
Title="Aplicativo Web Básico Personalizado"
Description="Um modelo personalizado derivado de um aplicativo Web MVC básico (Razor)"
Version="4.0"/>
Veja abaixo uma explicação dos atributos personalizados que devem estar presentes:
- ProjectType deve ser definido como MVC.
- A linguagem designa a linguagem de desenvolvimento compatível com o modelo. Os valores válidos são C# ou VB.
- ViewEngine designa o mecanismo de exibição compatível com o modelo, como Aspx ou Razor. Você pode especificar um valor personalizado para este campo.
- TemplateId é usado para agrupar os modelos. Se o valor corresponder a uma ID de modelo existente, ele substituirá os modelos registrados anteriormente com o assistente do MVC.
- Título designa a breve descrição exibida no assistente do MVC abaixo de cada modelo de projeto.
- A descrição designa uma descrição mais detalhada do modelo.
Depois de adicionar todos os arquivos ao manifesto e salvá-lo, você observará que a guia Ativos no designer exibirá todos os arquivos, mas não os atributos personalizados adicionados aos <elementos Asset> para os arquivos vstemplate .
Tudo o que resta agora é compilar o projeto VSIX e instalá-lo.
Verifique se todas as instâncias do Visual Studio estão fechadas no computador em que você pretende testar a extensão VSIX. O Visual Studio verifica se há novas extensões durante a inicialização, portanto, se o IDE estiver aberto durante a instalação de um VSIX, você precisará reiniciar o Visual Studio. Em Explorer, clique duas vezes no arquivo VSIX para iniciar o Instalador do VSIX, clique em Instalar e inicie o Visual Studio.
No menu, selecione Extensões de Ferramentas > e Atualizações para confirmar se a extensão foi instalada. Se o Instalador do VSIX relatou erros durante a instalação da extensão, você poderá exibir o log do Instalador do VSIX para obter mais informações. O log geralmente é criado na pasta %temp% do usuário que instalou a extensão, por exemplo , C:\Users\Bob\AppData\Local\Temp.
Depois de fechar a janela, você pode criar um projeto MVC 4 para ver se os novos modelos são mostrados no assistente do MVC.
Limitações
- O assistente do MVC não dá suporte a modelos personalizados localizados.
- O assistente não relatará erros se não conseguir localizar modelos personalizados. Se qualquer um dos atributos personalizados necessários estiver ausente, o modelo será simplesmente excluído do Assistente.