Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O primeiro guia desta série, Criar um sistema básico de projetos, parte 1, mostra como criar um sistema básico de projeto. Este guia baseia-se no sistema básico do projeto, adicionando um modelo Visual Studio, uma página de propriedades e outras funcionalidades. Deve completar o primeiro walkthrough antes de começar este.
Este guia mostra como criar um tipo de projeto que tenha a extensão do nome do ficheiro .myproj. Para completar o walkthrough, não precisa de criar a sua própria linguagem porque o walkthrough inspira-se no sistema de projetos Visual C# existente.
Este guia ensina como realizar estas tarefas:
Cria um modelo Visual Studio.
Implemente um modelo Visual Studio.
Crie um nó filho de tipo de projeto na caixa de diálogo Novo Projeto.
Ative a substituição de parâmetros no modelo Visual Studio.
Crie uma página de propriedades do projeto.
Observação
Os passos deste guia baseiam-se num projeto em C#. No entanto, exceto por detalhes específicos como extensões de nomes de ficheiro e código, pode usar os mesmos passos para um projeto em Visual Basic.
Criar um modelo Visual Studio
- Crie um sistema básico de projeto, a parte 1 mostra como criar um modelo básico de projeto e adicioná-lo ao sistema de projetos. Também mostra como registar este modelo no Visual Studio usando o ProvideProjectFactoryAttribute atributo, que escreve o caminho completo da pasta \Templates\Projects\SimpleProject\ no registo do sistema.
Ao usar um modelo Visual Studio (ficheiro .vstemplate ) em vez de um modelo básico de projeto, pode controlar como o modelo aparece na caixa de diálogo Novo Projeto e como os parâmetros do modelo são substituídos. Um ficheiro .vstemplate é um ficheiro XML que descreve como os ficheiros fonte devem ser incluídos quando um projeto é criado utilizando o modelo do sistema do projeto. O próprio sistema de projeto é construído recolhendo o ficheiro .vstemplate e os ficheiros-fonte num ficheiro.zip , sendo implementado copiando o ficheiro.zip para um local conhecido pelo Visual Studio. Este processo é explicado com mais detalhe mais tarde neste guia.
No Visual Studio, abra a solução SimpleProject que criou seguindo Criar um sistema de projeto básico, parte 1.
No ficheiro SimpleProjectPackage.cs , encontre o atributo ProvideProjectFactory. Substitua o segundo parâmetro (o nome do projeto) por null, e o quarto parâmetro (o caminho para a pasta do modelo do projeto) por ".\\NullPath", da seguinte forma.
[ProvideProjectFactory(typeof(SimpleProjectFactory), null, "Simple Project Files (*.myproj);*.myproj", "myproj", "myproj", ".\\NullPath", LanguageVsTemplate = "SimpleProject")]Adicione um ficheiro XML chamado SimpleProject.vstemplate à pasta \Templates\Projects\SimpleProject\ .
Substitua o conteúdo do SimpleProject.vstemplate pelo seguinte código.
<VSTemplate Version="2.0.0" Type="Project" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005"> <TemplateData> <Name>SimpleProject Application</Name> <Description> A project for creating a SimpleProject application </Description> <Icon>SimpleProject.ico</Icon> <ProjectType>SimpleProject</ProjectType> </TemplateData> <TemplateContent> <Project File="SimpleProject.myproj" ReplaceParameters="true"> <ProjectItem ReplaceParameters="true" OpenInEditor="true"> Program.cs </ProjectItem> <ProjectItem ReplaceParameters="true" OpenInEditor="false"> AssemblyInfo.cs </ProjectItem> </Project> </TemplateContent> </VSTemplate>Na janela de Propriedades, selecione os cinco ficheiros na pasta \Templates\Projects\SimpleProject\ e defina a Ação de Construção para ZipProject.
A <secção TemplateData> determina a localização e aparência do tipo de projeto SimpleProject na caixa de diálogo Novo Projeto , da seguinte forma:
O <elemento Nome> nomeia o modelo do projeto como ApplicationSimpleProject.
O <elemento Descrição> contém a descrição que aparece na caixa de diálogo Novo Projeto quando o modelo do projeto é selecionado.
O <elemento Ícone> especifica o ícone que aparece juntamente com o tipo de projeto SimpleProject.
O <elemento ProjectType> nomeia o tipo de projeto na caixa de diálogo Novo Projeto. Este nome substitui o parâmetro de nome do projeto do atributo ProvideProjectFactory.
Observação
O elemento <ProjectType> deve corresponder ao argumento
LanguageVsTemplatedo atributoProvideProjectFactoryno ficheiro SimpleProjectPackage.cs.A <secção TemplateContent> descreve estes ficheiros que são gerados quando um novo projeto é criado:
SimpleProject.myproj
Program.cs
AssemblyInfo.cs
Os três ficheiros têm
ReplaceParametersdefinido como verdadeiro, o que permite a substituição de parâmetros. O ficheiro Program.cs estáOpenInEditordefinido como true, o que faz com que o ficheiro seja aberto no editor de código quando um projeto é criado.Para mais informações sobre os elementos do esquema do modelo Visual Studio, consulte a referência do esquema do modelo Visual Studio.
Observação
Se um projeto tiver mais do que um modelo Visual Studio, cada modelo está numa pasta separada. Cada ficheiro nessa pasta deve ter a Ação de Compilação definida como ZipProject.
Adicionar um ficheiro .vsct mínimo
O Visual Studio tem de ser executado em modo de configuração para reconhecer um novo ou modificado modelo Visual Studio. O modo de configuração requer que um ficheiro .vsct esteja presente. Por isso, deve adicionar um ficheiro .vsct mínimo ao projeto.
Adicione um ficheiro XML chamado SimpleProject.vsct ao projeto SimpleProject.
Substitua o conteúdo do ficheiro SimpleProject.vsct pelo seguinte código.
<?xml version="1.0" encoding="utf-8" ?> <CommandTable xmlns="http://schemas.microsoft.com/VisualStudio/2005-10-18/CommandTable"> </CommandTable>Defina a Ação de Build deste ficheiro para VSCTCompile. Só pode fazer isto no ficheiro .csproj , não na janela de Propriedades . Certifique-se de que a Ação de Construção deste ficheiro está definida como Nenhum neste momento.
Clique com o botão direito no nó SimpleProject e depois selecione Editar SimpleProject.csproj.
No ficheiro .csproj, localize o item SimpleProject.vsct.
<None Include="SimpleProject.vsct" />Muda a ação de construção para VSCTCompile.
<VSCTCompile Include="SimpleProject.vsct" />Feche o ficheiro do projeto e o editor.
Guarde o nó SimpleProject e, no Explorador de Soluções , selecione Recarregar Projeto.
Analise os passos de construção do modelo Visual Studio
O sistema de construção de projetos VSPackage normalmente executa o Visual Studio em modo de configuração quando o ficheiro .vstemplate é alterado ou o projeto que contém o ficheiro .vstemplate é reconstruído. Podes acompanhar definindo o nível de verbosidade do MSBuild para Normal ou superior.
No painel Ferramentas>Opções, expanda a secção Todas as Definições>Projetos e Soluções>Construir e Executar.
Defina a opção de verbosidade da saída da build do projeto MSBuild para Normal.
No diálogo Opções de Ferramentas>, expanda a secçãoProjetos e Soluções>Construir e Executar.
Defina a opção de verbosidade da saída da build do projeto MSBuild para Normal e selecione OK.
- Reconstrua o projeto SimpleProject.
A etapa de construção para criar o ficheiro de projeto.zip deve assemelhar-se ao seguinte exemplo.
ZipProjects:
1> Zipping ProjectTemplates
1> Zipping <path>\SimpleProject\SimpleProject\obj\Debug\SimpleProject.zip...
1> Copying file from "<path>\SimpleProject\SimpleProject\obj\Debug\SimpleProject.zip" to "<%LOCALAPPDATA%>\Microsoft\VisualStudio\14.0Exp\ProjectTemplates\\\\SimpleProject.zip".
1> Copying file from "<path>\SimpleProject\SimpleProject\obj\Debug\SimpleProject.zip" to "bin\Debug\\ProjectTemplates\\\\SimpleProject.zip".
1> SimpleProject -> <path>\SimpleProject\SimpleProject\bin\Debug\ProjectTemplates\SimpleProject.zip
1>ZipItems:
1> Zipping ItemTemplates
1> SimpleProject ->
Implementar um modelo Visual Studio
Os templates do Visual Studio não contêm informação de caminho. Portanto, o ficheiro de template.zip deve ser implementado num local conhecido pelo Visual Studio. A localização da pasta ProjectTemplates é normalmente <%LOCALAPPDATA%>\Microsoft\VisualStudio\14.0Exp\ProjectTemplates.
Para implementar a fábrica do seu projeto, o programa de instalação deve ter privilégios de administrador. Implementa modelos no caminho de instalação do Visual Studio: ...\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates.
Teste um modelo Visual Studio
Teste a sua fábrica de projetos para ver se cria uma hierarquia de projeto usando o template Visual Studio.
Reiniciar a instância experimental do SDK do Visual Studio.
No Windows 7: No menu Iniciar , encontre a pasta Microsoft Visual Studio/Microsoft Visual Studio SDK/Ferramentas e depois selecione Reiniciar a instância Experimental do Microsoft Visual Studio.
Nas versões mais recentes do Windows: No ecrã inicial, digite Reiniciar a Instância Experimental da versão do Microsoft Visual Studio>.
Aparece uma janela de prompt de comandos. Quando vir as palavras , pressione qualquer tecla para continuar, selecione ENTER. Depois de a janela fechar, abra o Visual Studio.
Reconstrua o projeto SimpleProject e comece a depurar. A instância experimental aparece.
Na instância experimental, crie um projeto SimpleProject. Na caixa de diálogo Novo Projeto , selecione SimpleProject.
Deverias ver uma nova instância do SimpleProject.
Criar um nó filho do tipo projeto
Pode adicionar um nó filho a um nó de tipo de projeto na caixa de diálogo Novo Projeto. Por exemplo, para o tipo de projeto SimpleProject, poderás ter subnós para aplicações de linha de comando, aplicações de janela, aplicações web, e assim por diante.
Os nós filhos são criados alterando o ficheiro do projeto e adicionando nós filhos <OutputSubPath> aos elementos <ZipProject>. Quando um modelo é copiado durante a compilação ou implementação, cada nó filho torna-se uma subpasta da pasta de modelos do projeto.
Esta secção mostra como criar um nó filho da Consola para o tipo de projeto SimpleProject.
Renomear a pasta \Templates\Projects\SimpleProject\ para \Templates\Projects\ConsoleApp\.
Na janela de Propriedades, selecione os cinco ficheiros na pasta \Templates\Projects\ConsoleApp\ e certifique-se de que a Ação de Compilação está definida como ZipProject.
No ficheiro SimpleProject.vstemplate, adicione a linha seguinte no final da <secção TemplateData> , pouco antes da etiqueta de fecho.
<NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>Isto faz com que o modelo da Aplicação da Consola apareça tanto no nó filho da Consola como no nó pai SimpleProject, que está um nível acima do nó filho.
Guarde o ficheiro SimpleProject.vstemplate .
No ficheiro .csproj , adicione <OutputSubPath> a cada um dos elementos do ZipProject. Descarrega o projeto, como antes, e edita o ficheiro do projeto.
Localiza os <elementos do ZipProject> . A cada <elemento ZipProject> , adiciona um <elemento OutputSubPath> e dá-lhe o valor Console. ZipProject
<ZipProject Include="Templates\Projects\ConsoleApp\AssemblyInfo.cs"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\Program.cs"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\SimpleProject.myproj"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\SimpleProject.vstemplate"> <OutputSubPath>Console</OutputSubPath> </ZipProject> <ZipProject Include="Templates\Projects\ConsoleApp\SimpleProject.ico"> <OutputSubPath>Console</OutputSubPath> </ZipProject>Adicione este <PropertyGroup> ao ficheiro do projeto:
<PropertyGroup> <VsTemplateLanguage>SimpleProject</VsTemplateLanguage> </PropertyGroup>Guarda o ficheiro do projeto e recarrega o projeto.
Teste o tipo de nó filho do projeto
Teste o ficheiro de projeto modificado para verificar se o nó filho Consola aparece na caixa de diálogo de Novo Projeto.
Executa a ferramenta Reset do Microsoft Visual Studio Experimental Instance .
Reconstrua o projeto SimpleProject e comece a depurar. A instância experimental deve aparecer
No diálogo Novo Projeto, selecione o nó SimpleProject. O modelo de Aplicação de Consola deve aparecer no painel de Modelos .
Expanda o nó SimpleProject . O nó filho Console deve aparecer. O modelo de aplicação SimpleProject continua a aparecer no painel de Templates .
Selecione Cancelar e pare a depuração.
Parâmetros substitutos do modelo de projeto
-
Criando um sistema básico de projetos, a parte 1 mostrou como sobrescrever o
ProjectNode.AddFileFromTemplatemétodo para fazer um tipo básico de substituição de parâmetros de modelo. Esta secção ensina como usar os parâmetros mais sofisticados do modelo Visual Studio.
Quando crias um projeto usando um template do Visual Studio na caixa de diálogo Novo Projeto , os parâmetros do template são substituídos por strings para personalizar o projeto. Um parâmetro de modelo é um símbolo especial que começa e termina com um cifrão, por exemplo, $time$. Os dois parâmetros seguintes são especialmente úteis para permitir a personalização em projetos baseados no modelo:
$GUID[1-10]$ é substituído por um novo Guid. Pode especificar até 10 GUIDs únicos, por exemplo, $guid 1$.
$safeprojectname$ é o nome fornecido por um utilizador na caixa de diálogo do Novo Projeto , modificado para remover todos os caracteres e espaços inseguros.
Para uma lista completa de parâmetros do modelo, veja Parâmetros do modelo.
Para substituir parâmetros do modelo do projeto
No ficheiro SimpleProjectNode.cs , remova o
AddFileFromTemplatemétodo.No ficheiro \Templates\Projects\ConsoleApp\SimpleProject.myproj , localiza a <propriedade RootNamespace> e altera o seu valor para $safeprojectname$.
<RootNamespace>$safeprojectname$</RootNamespace>No ficheiro \Templates\Projects\SimpleProject\Program.cs , substitua o conteúdo do ficheiro pelo seguinte código:
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; // Guid namespace $safeprojectname$ { [Guid("$guid1$")] public class $safeprojectname$ { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }Reconstrua o projeto SimpleProject e comece a depurar. A instância experimental deve aparecer.
Crie uma nova aplicação SimpleProject Console. (No painel de tipos de projetos , selecione SimpleProject. Em modelos instalados no Visual Studio, selecione Aplicação de Consola.)
No projeto recém-criado, abram Program.cs. Deverá parecer-se com o seguinte (os valores GUID no teu ficheiro diferem):
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; // Guid namespace Console_Application1 { [Guid("00000000-0000-0000-00000000-00000000)"] public class Console_Application1 { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }
Criar uma página de propriedades do projeto
Pode criar uma página de propriedades para o tipo de projeto, para que os utilizadores possam visualizar e alterar propriedades em projetos baseados no seu modelo. Esta secção mostra-lhe como criar uma página de propriedades independente da configuração. Esta página básica de propriedades utiliza uma grelha de propriedades para mostrar as propriedades públicas que são expostas na sua classe de página de propriedades.
Derive a sua classe de página de propriedades a partir da SettingsPage classe base. A grelha de propriedades fornecida pela SettingsPage classe conhece a maioria dos tipos de dados primitivos e sabe como os exibir. Além disso, a SettingsPage classe sabe como persistir os valores das propriedades no ficheiro do projeto.
A página de propriedades que cria nesta secção permite-lhe alterar e guardar estas propriedades do projeto:
NomeDaAssembleia
Tipo de saída
RootNamespace.
No ficheiro SimpleProjectPackage.cs , adicione este
ProvideObjectatributo àSimpleProjectPackageclasse:[ProvideObject(typeof(GeneralPropertyPage))] public sealed class SimpleProjectPackage : ProjectPackageIsto regista a classe
GeneralPropertyPageda página de propriedade junto do COM.No ficheiro SimpleProjectNode.cs, adicione estes dois métodos substituídos na
SimpleProjectNodeclasse.protected override Guid[] GetConfigurationIndependentPropertyPages() { Guid[] result = new Guid[1]; result[0] = typeof(GeneralPropertyPage).GUID; return result; } protected override Guid[] GetPriorityProjectDesignerPages() { Guid[] result = new Guid[1]; result[0] = typeof(GeneralPropertyPage).GUID; return result; }Ambos os métodos retornam um array de GUIDs de páginas de propriedades. O GUID GeneralPropertyPage é o único elemento no array, por isso a caixa de diálogo Property Pages mostra apenas uma página.
Adicione um ficheiro de classe chamado GeneralPropertyPage.cs ao projeto SimpleProject.
Substitua o conteúdo deste ficheiro usando o seguinte código:
using System; using System.Runtime.InteropServices; using Microsoft.VisualStudio; using Microsoft.VisualStudio.Project; using System.ComponentModel; namespace SimpleProject { [ComVisible(true)] [Guid("6BC7046B-B110-40d8-9F23-34263D8D2936")] public class GeneralPropertyPage : SettingsPage { private string assemblyName; private OutputType outputType; private string defaultNamespace; public GeneralPropertyPage() { this.Name = "General"; } [Category("AssemblyName")] [DisplayName("AssemblyName")] [Description("The output file holding assembly metadata.")] public string AssemblyName { get { return this.assemblyName; } } [Category("Application")] [DisplayName("OutputType")] [Description("The type of application to build.")] public OutputType OutputType { get { return this.outputType; } set { this.outputType = value; this.IsDirty = true; } } [Category("Application")] [DisplayName("DefaultNamespace")] [Description("Specifies the default namespace for added items.")] public string DefaultNamespace { get { return this.defaultNamespace; } set { this.defaultNamespace = value; this.IsDirty = true; } } protected override void BindProperties() { this.assemblyName = this.ProjectMgr.GetProjectProperty("AssemblyName", true); this.defaultNamespace = this.ProjectMgr.GetProjectProperty("RootNamespace", false); string outputType = this.ProjectMgr.GetProjectProperty("OutputType", false); this.outputType = (OutputType)Enum.Parse(typeof(OutputType), outputType); } protected override int ApplyChanges() { this.ProjectMgr.SetProjectProperty("AssemblyName", this.assemblyName); this.ProjectMgr.SetProjectProperty("OutputType", this.outputType.ToString()); this.ProjectMgr.SetProjectProperty("RootNamespace", this.defaultNamespace); this.IsDirty = false; return VSConstants.S_OK; } } }A
GeneralPropertyPageclasse expõe as três propriedades públicas AssemblyName, OutputType e RootNamespace. Como o AssemblyName não tem um método definido, é apresentado como uma propriedade de apenas leitura. OutputType é uma constante enumerada, por isso aparece como uma lista suspensa.A
SettingsPageclasse base forneceProjectMgrpara persistir as propriedades. O métodoBindPropertiesutilizaProjectMgrpara recuperar os valores das propriedades persistentes e configurar as propriedades correspondentes. O métodoApplyChangesutilizaProjectMgrpara obter os valores das propriedades e persistir esses valores no ficheiro do projeto. O método do conjunto de propriedades defineIsDirtycomo true para indicar que as propriedades têm de ser preservadas. A persistência ocorre quando guardas o projeto ou a solução.Reconstrói a solução do SimpleProject e começa a depurar. A instância experimental deve aparecer.
Na instância experimental, crie uma nova Aplicação SimpleProject.
O Visual Studio chama a sua fábrica de projetos para criar um projeto usando o modelo Visual Studio. O novo ficheiro Program.cs é aberto no editor de código.
Clique com o botão direito no nó do projeto no Explorador de Soluções e depois selecione Propriedades. A caixa de diálogo Páginas de Propriedades é exibida.
Testar a página de propriedades do projeto
Agora podes testar se consegues modificar e alterar os valores das propriedades.
Na caixa de diálogo MyConsoleApplication Property Pages , altere o DefaultNamespace para MyApplication.
Selecione a propriedade OutputType e depois selecione Biblioteca de Classes.
Selecione Aplicare, em seguida, selecione OK.
Reabra a caixa de diálogo das Páginas de Propriedades e verifique se as suas alterações foram mantidas.
Fecha a instância experimental do Visual Studio.
Reabra a instância experimental.
Reabra a caixa de diálogo das Páginas de Propriedades e verifique se as suas alterações foram mantidas.
Fecha a instância experimental do Visual Studio.