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.

Novo projeto

Depois que o projeto for criado, o designer VSIX será aberto.

Metadados do Project Designer

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.

A captura de tela mostra a guia Instalar Destinos do Project Designer.

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).

Adicionar novo destino de instalação

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 captura de tela mostra a guia Instalar Destinos do Project Designer com identificadores e intervalos de versão especificados.

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.

Gerenciador de Soluções

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).

Abrir com caixa de diálogo

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 .

Ativos do Project Designer

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.

Instalador do VSIX

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.

Extensões e Atualizações

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.

Novo projeto ASP.NET MVC 4

Limitações

  1. O assistente do MVC não dá suporte a modelos personalizados localizados.
  2. 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.