Explicação passo a passo: Parte 1 - Criando um sistema básico de projeto
No Visual Studio, os projetos são os recipientes que os desenvolvedores usam para organizar arquivos código-fonte e outros ativos que aparecem no Solution Explorer. Projetos permitem organizar, desenvolver, depurar e implantar o código-fonte e criar referências para serviços da Web, bancos de dados e outros recursos.
Normalmente, os projetos são especificados pelo conteúdo de um arquivo de projeto, por exemplo, um arquivo. csproj para um projeto do Visual C#. Você pode criar seu próprio tipo de projeto que tenha sua própria extensão de nome de arquivo de projeto. Para obter mais informações sobre os tipos de projeto, consulte Tipos de projeto.
Esta explicação passo a passo ensina como criar um tipo de projeto que tem o .myproj de extensão de nome de arquivo de projeto. Para concluir a explicação passo a passo, você não precisará criar seu próprio idioma, pois emprestada de explicação passo a passo do sistema de projeto Visual C# existente.
Dica
Para uma amostra de ponta a ponta de um sistema de projetos de linguagem completa, consulte o exemplo de IronPython um mergulho no Exemplos de extensibilidade de Visual Studio.
Esta explicação passo a passo ensina como realizar essas tarefas:
Crie um tipo de projeto básico.
Crie um modelo de projeto básico.
Registre o modelo de projeto com Visual Studio.
Criar uma instância do projeto, abrindo o Novo projeto caixa de diálogo e, em seguida, usando o seu modelo.
Crie uma fábrica de projeto para o seu sistema de projeto.
Crie um nó do projeto para o seu sistema de projeto.
Adicione ícones personalizados para o sistema do projeto.
Implementar a substituição de parâmetros do modelo básico.
Dica
As etapas nesta explicação baseiam-se em um projeto C#.No entanto, exceto para obter informações específicas, como extensões de nome de arquivo e o código, você pode usar as mesmas etapas para um projeto de Visual Basic.
Pré-requisitos
Para concluir este passo a passo, você deve instalar o SDL do Visual Studio 2010.
Dica
Para obter mais informações sobre o SDK de Visual Studio, consulte Ampliando a visão geral de Visual Studio.Para descobrir como fazer o download do SDK do Visual Studio, consulte Visual Studio extensibilidade Developer Center no site do MSDN.
Locais para o modelo de projeto de pacote de Visual Studio
O modelo de projeto do pacote de Visual Studio pode ser encontrado em três locais diferentes de Novo projeto caixa de diálogo:
Em Visual Basic extensibilidade. O idioma padrão do projeto é Visual Basic.
Em C# extensibilidade. O idioma padrão do projeto é C#.
Em outra extensibilidade de tipos de projeto. O idioma padrão do projeto é C#, mas o VB e C++ estão disponíveis.
Criando um tipo de projeto básico
Tipos de projeto, assim como a maioria das extensões de Visual Studio, são implementados por VSPackages. Para obter mais informações sobre os VSPackages, consulte Explicações passo a passo para personalizar Visual Studio usando VSPackages. Para criar um tipo de projeto, você deve primeiro criar um VSPackage.
Para criar um VSPackage
Crie um projeto VSPackage chamado SimpleProject.
Sobre o Select a Programming Language , selecione Visual C# e gerar um novo arquivo de chave para assinar o conjunto.
Sobre o Selecionar opções de teste , desmarque ambas as opções e, em seguida, em Concluir.
O modelo cria um projeto VSPackage com as configurações que você especificou.
Criando um modelo de projeto básico
Agora, você pode modificar esse VSPackage básica para implementar o novo tipo de projeto de .myproj. Para criar um projeto com base no tipo de projeto .myproj, Visual Studio deve saber quais arquivos, recursos e referências para adicionar o novo projeto. Para fornecer essa informação, coloca os arquivos de projeto em uma pasta de modelo de projeto. Em seguida, quando um usuário usa o tipo de projeto em .myproj a Novo projeto caixa de diálogo para criar um projeto, os arquivos são copiados para o novo projeto.
Para criar um modelo de projeto básico
Em Solution Explorer, com o botão direito do SimpleProject nó do projeto, aponte para Adde, em seguida, clique em Nova pasta. O nome da pasta modelos de.
No modelos de pasta, adicione uma pasta chamada projetos.
No projetos pasta, adicione uma pasta chamada SimpleProject.
Com o botão direito do SimpleProject pasta, aponte para Adde, em seguida, clique em Novo Item. Adicionar um arquivo de ícone denominado SimpleProject.ico. Clique em Add para abrir o editor de ícone.
Verifique o ícone distinto. Esse ícone aparecerá na Novo projeto caixa de diálogo posteriormente na explicação passo a passo.
O ícone de salvar e fechar o editor de ícone.
No SimpleProject pasta, adicione um classe item chamado Program. cs. Clique em Add para abrir o editor de código.
Substitua o código existente, usando as seguintes linhas.
using System; using System.Collections.Generic; using System.Text; namespace $nameSpace$ { public class $className$ { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }
Dica
Os arquivos no modelo de projeto podem conter parâmetros do modelo que podem ser modificados por programação quando os arquivos são copiados para um novo projeto.Posteriormente na explicação passo a passo, você pode aprender a fazer isso para os parâmetros do modelo, nameSpace $$ e $className$.
Salve o arquivo e feche o editor de código.
No Propriedades pasta, copie AssemblyInfo. cs e cole-o a Projects\SimpleProject pasta.
No Propriedades janela, defina a Build Action de AssemblyInfo. cs para Nenhum.
Em Solution Explorer, com o botão direito do SimpleProject pasta, aponte para Adde, em seguida, clique em Novo Item. Adicionar um arquivo XML chamado item SimpleProject.myproj. Clique em Add para abrir o editor de XML.
Dica
A extensão de nome de arquivo para todos os projetos desse tipo é .myproj.Se você desejar alterá-la, você em todos os lugares mencionado na explicação deverá alterá-la.
Substitua o conteúdo existente, usando as seguintes linhas.
<Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{99999999-9999-9999-9999-999999999999}</ProjectGuid> <OutputType>Exe</OutputType> <RootNamespace>MyRootNamespace</RootNamespace> <AssemblyName>MyAssemblyName</AssemblyName> <EnableUnmanagedDebugging>false</EnableUnmanagedDebugging> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <DebugSymbols>true</DebugSymbols> <OutputPath>bin\Debug\</OutputPath> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <DebugSymbols>false</DebugSymbols> <OutputPath>bin\Release\</OutputPath> </PropertyGroup> <ItemGroup> <Reference Include="mscorlib" /> <Reference Include="System" /> <Reference Include="System.Data" /> <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> <Compile Include="AssemblyInfo.cs"> <SubType>Code</SubType> </Compile> <Compile Include="Program.cs"> <SubType>Code</SubType> </Compile> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project>
Salve o arquivo e feche o editor de XML.
No Propriedades janela, defina a Build Action de Program. cs, SimpleProject.ico e SimpleProject.myproj para conteúdoe definir suas respectivas incluir na VSIX propriedades para True.
Este modelo de projeto descreve um projeto C# Visual basic que tenha uma configuração de depuração e de uma configuração de lançamento. O projeto inclui dois arquivos de origem, AssemblyInfo. cs e Program. cs e assembly várias referências. Quando um projeto é criado a partir do modelo, o valor de ProjectGuid é substituído automaticamente por um novo GUID.
Em Solution Explorer, expandida modelos de pasta deverá aparecer como segue:
Modelos
Projects
SimpleProject
AssemblyInfo. cs
Program. cs
SimpleProject.ico
SimpleProject.myproj
Criando uma fábrica de projeto estrutural
Você deve informar o local da pasta de modelo do projeto Visual Studio. Para fazer isso, adicione um atributo à classe VSPackage que implementa a fábrica de projeto, para que o local do modelo é gravado no registro do sistema quando o VSPackage é construído. Comece criando uma fábrica de projeto básico que é identificada por uma GUID de fábrica do projeto. Use o ProvideProjectFactoryAttribute atributo para conectar-se a fábrica de projeto para a classe SimpleProjectPackage.
Para criar uma fábrica de projeto estrutural
Abra Guids.cs no editor de código.
Sobre o Ferramentas menu, clique em Criar GUID.
Crie um GUID para sua fábrica de projeto ou use no exemplo a seguir. Adicione o GUID para o GuidList. O GUID deve estar no formato de Guid e na forma de seqüência. O código resultante deve se parecer com o exemplo a seguir.
static class GuidList { public const string guidSimpleProjectPkgString = "96bf4c26-d94e-43bf-a56a-f8500b52bfad"; public const string guidSimpleProjectCmdSetString = "72c23e1d-f389-410a-b5f1-c938303f1391"; public const string guidSimpleProjectFactoryString = "471EC4BB-E47E-4229-A789-D1F5F83B52D4"; public static readonly Guid guidSimpleProjectCmdSet = new Guid(guidSimpleProjectCmdSetString); public static readonly Guid guidSimpleProjectFactory = new Guid(guidSimpleProjectFactoryString); };
Salve o arquivo e feche o editor.
Em Solution Explorer, com o botão direito do SimpleProject nó do projeto, aponte para Adde, em seguida, clique em Novo Item. Adicionar um classe chamado SimpleProjectFactory.cs. Clique em Add para abrir o editor de código.
Adicione o seguinte usando a instrução após a outra usando instruções.
using System.Runtime.InteropServices;
Adicione um atributo de Guid para a classe SimpleProjectFactory. O valor do atributo é a fábrica de projeto novo GUID.
[Guid(GuidList.guidSimpleProjectFactoryString)] class SimpleProjectFactory
Recrie a solução e verifique se ele foi compilado sem erros.
Agora você pode registrar o seu modelo de projeto.
Para registrar o modelo de projeto
Abra SimpleProjectPackage.cs no editor de código.
Adicionar um ProvideProjectFactoryAttribute de atributo para a classe SimpleProjectPackage, da seguinte maneira.
[ProvideProjectFactory( typeof(SimpleProjectFactory), "Simple Project", "Simple Project Files (*.myproj);*.myproj", "myproj", "myproj", @"Templates\Projects\SimpleProject", LanguageVsTemplate = "SimpleProject")] [Guid(GuidList.guidSimpleProjectPkgString)] public sealed class SimpleProjectPackage : Package
Recrie a solução e verifique se ele foi compilado sem erros.
Reconstrução registra o modelo de projeto.
O atributo ProvideProjectFactory tem a seguinte sintaxe.
public ProvideProjectFactoryAttribute( Type factoryType, string name, string displayProjectFileExtensionsResourceID, string defaultProjectExtension, string possibleProjectExtensions, string projectTemplatesDirectory)
Os parâmetros defaultProjectExtension e possibleProjectExtensions estão definidas para a extensão de nome de arquivo do projeto (.myproj). O projectTemplatesDirectory parâmetro for definido como o caminho relativo da pasta modelos. Durante a compilação, esse caminho será convertido para uma compilação completa e adicionado ao registro para registrar o sistema de projeto.
Examinando o registro de modelo
Durante a compilação, Visual Studio cria um arquivo chamado SimpleProject.pkgdef que inclui as informações necessárias para usar o modelo. Este é um arquivo oculto na pasta \bin\debug do projeto. Abra o arquivo para verificar que o conteúdo é semelhante a esta:
[$RootKey$\InstalledProducts\SimpleProjectPackage]
@="#110"
"Package"="{f202a1d5-9bf7-424c-a261-d7d2ab364560}"
"PID"="1.0"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\Packages\{f202a1d5-9bf7-424c-a261-d7d2ab364560}]
@="Company.SimpleProject.SimpleProjectPackage, SimpleProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cf624da7ef057ca0"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Company.SimpleProject.SimpleProjectPackage"
"CodeBase"="$PackageFolder$\SimpleProject.dll"
[$RootKey$\Menus]
"{f202a1d5-9bf7-424c-a261-d7d2ab364560}"=", Menus.ctmenu, 1"
[$RootKey$\Projects\{471ec4bb-e47e-4229-a789-d1f5f83b52d4}]
@="SimpleProjectFactory"
"DisplayName"="Simple Project"
"DisplayProjectFileExtensions"="Simple Project Files (*.myproj);*.myproj"
"Package"="{f202a1d5-9bf7-424c-a261-d7d2ab364560}"
"DefaultProjectExtension"="myproj"
"PossibleProjectExtensions"="myproj"
"ProjectTemplatesDir"="$PackageFolder$\Templates\Projects\SimpleProject"
"Language(VsTemplate)"="SimpleProject"
[$RootKey$\NewProjectTemplates\TemplateDirs\{f202a1d5-9bf7-424c-a261-d7d2ab364560}\/1]
@="Simple Project"
"SortPriority"=dword:00000064
"TemplatesDir"="$PackageFolder$\Templates\Projects\SimpleProject"
Observe que os GUIDs em seu arquivo será diferentes. Eles coincidirá com os GUIDs da Guids.cs para o seu projeto.
O registro de modelo de teste.
Registro de modelo informa Visual Studio o local da pasta do modelo de projeto para que Visual Studio possa exibir o nome do modelo e o ícone no Novo projeto caixa de diálogo.
Para testar o registro de modelo
No Visual Studio, pressione F5 para iniciar uma ocorrência experimental do Visual Studio.
Sobre o arquivo , aponte para novae, em seguida, clique em projeto.No Novo projeto caixa de diálogo, selecione o tipo de projeto SimpleProject.
O ícone de SimpleProject aparece sob modelos instalados do Visual Studio.
Feche a instância experimental do Visual Studio.
Agora você tem uma fábrica de projeto que possa demonstrar o registro. No entanto, ele ainda não é possível criar um projeto. O pacote de projeto e a fábrica de projeto trabalham juntos para criar e inicializar um projeto.
Inicializando a fábrica de projeto
Para implementar a conexão entre o pacote do projeto e a fábrica de projeto, execute estas tarefas:
A solução, adicionar links para os arquivos de código-fonte para o Microsoft.VisualStudio.Package estrutura de projeto. Essa estrutura é uma extensão da estrutura de pacote gerenciado (MPF). A estrutura do projeto é fornecida apenas como código-fonte.
Derive SimpleProjectPackage from Microsoft.VisualStudio.Package.ProjectPackage.
Criar um SimpleProjectFactory e registrá-la Visual Studio usando o Microsoft.VisualStudio.Package.RegisterProjectFactory método.
Derive SimpleProjectPackage from Microsoft.VisualStudio.Package.ProjectPackage.
Passar para o SimpleProjectFactory construtor uma referência para o SimpleProjectPackage. Esta referência é armazenada em cache para configuração de um site do provedor de serviço mais tarde. Para obter mais informações sobre serviços, consulte Serviços.
Para inicializar a fábrica de projeto
Em Solution Explorer, com o botão direito do SimpleProject nó e depois clique em Unload Project.
Com o botão direito do SimpleProject nó e depois clique em Editar SimpleProject.csproj.
Localize os arquivos de origem do projeto gerenciado seguindo esse link. Copie esses arquivos para uma pasta local chamada, por exemplo, C:\MyLocalFolder\Project
No editor de XML, adicione o seguinte ProjectBasePath elemento após o RegisterWithCodebase elemento. Não quebrar a linha que contém o ProjectBasePath elemento.
<RegisterWithCodebase>true</RegisterWithCodebase> <ProjectBasePath>C:\MyLocalFolder\Project</ProjectBasePath>
Adicione o seguinte Import elemento após o existente Import elementos.
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" /> <Import Project="$(ProjectBasePath)\ProjectBase.Files" />
Salve o arquivo de projeto e feche o editor.
Com o botão direito do SimpleProject nó e, em seguida, clique Reload Project. Solution Explorer agora deve exibir um ProjectBase pasta.
Com o botão direito do referências nó e adicione o seguinte.NET referências.
EnvDTE (caminho de instalação do Visual Studio\Common7\IDE\PublicAssemblies\EnvDTE.dll)
Microsoft.VisualStudio.Designer.Interfaces
No arquivo SimpleProjectPackage.cs, adicione o seguinte using a instrução após a existente using instruções.
using Microsoft.VisualStudio.Package;
Derivar o SimpleProjectPackage de classe de Microsoft.VisualStudio.Package.ProjectPackage.
public sealed class SimpleProjectPackage : ProjectPackage
Adicione a seguinte linha para o SimpleProjectPackage.Initialize método, logo após base.Initialize.
base.Initialize(); this.RegisterProjectFactory(new SimpleProjectFactory(this));
Em SimpleProjectFactory.cs, adicione o seguinte using a instrução após a existente using instruções.
using Microsoft.VisualStudio.Package;
Derivar o SimpleProjectFactory de classe de ProjectFactory.
class SimpleProjectFactory : ProjectFactory
Adicione o seguinte método fictício para a SimpleProjectFactory classe. Você irá implementar esse método em uma seção posterior.
protected override ProjectNode CreateProject() { return null; }
Adicione o campo e o construtor para seguir o SimpleProjectFactory classe. Isso SimpleProjectPackage referência é armazenadas em cache em um campo particular para que ele pode ser usado na definição de um site do provedor de serviço.
private SimpleProjectPackage package; public SimpleProjectFactory(SimpleProjectPackage package) : base(package) { this.package = package; }
Recrie a solução e verifique se ele foi compilado sem erros.
A implementação de fábrica do projeto de teste.
Teste se o construtor para a implementação de fábrica do projeto é chamado.
Para testar a implementação de fábrica do projeto
No arquivo SimpleProjectFactory.cs, defina um ponto de interrupção na linha seguinte a SimpleProjectFactory construtor.
this.package = package;
Pressione F5 para iniciar uma ocorrência experimental do Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
No Novo projeto caixa de diálogo, selecione o SimpleProject tipo de projeto e, em seguida, clique em OK.A execução pára no ponto de interrupção.
Desmarque o ponto de interrupção.
Pressione SHIFT + F5 para parar a depuração.
Estendendo a classe de nó do projeto
Agora você pode implementar a SimpleProjectNode classe, que deriva do ProjectNode classe. O ProjectNode classe base trata as seguintes tarefas de criação do projeto:
Copia o arquivo de modelo de projeto, SimpleProject.myproj, para a nova pasta de projeto. A cópia é renomeada de acordo com o nome que consta do Novo projeto caixa de diálogo. O ProjectGuid o valor da propriedade é substituído por um novo GUID.
Percorre os elementos do MSBuild do arquivo de modelo do projeto, SimpleProject.myproj e procurará Compile elementos. Para cada Compile arquivo de destino, copia o arquivo para a nova pasta de projeto.
O derivado SimpleProjectNode classe controla essas tarefas:
Permite que os ícones para nós de projeto e arquivo em Solution Explorer a ser criado ou selecionada.
Permite substituições de parâmetro de modelo de projeto adicional a ser especificado.
Estender a classe de nó do projeto
Com o botão direito do SimpleProject nó do projeto, aponte para Adde, em seguida, clique em Novo Item. Adicionar um classe chamado SimpleProjectNode.cs. Clique em Add para abrir o editor de código.
Substitua o código existente com o seguinte código.
using System; using System.Collections.Generic; using Microsoft.VisualStudio.Package; namespace Company.SimpleProject { public class SimpleProjectNode : ProjectNode { private SimpleProjectPackage package; public SimpleProjectNode(SimpleProjectPackage package) { this.package = package; } public override Guid ProjectGuid { get { return GuidList.guidSimpleProjectFactory; } } public override string ProjectType { get { return "SimpleProjectType"; } } public override void AddFileFromTemplate( string source, string target) { this.FileTemplateProcessor.UntokenFile(source, target); this.FileTemplateProcessor.Reset(); } } }
Isso SimpleProjectNode implementação de classe tem esses métodos de substituição:
ProjectGuid, que retorna a GUID de fábrica do projeto.
ProjectType, que retorna o nome localizado do tipo de projeto.
AddFileFromTemplate, que copia arquivos selecionados da pasta modelo para o projeto de destino. Além disso, esse método é implementado em uma seção posterior.
O SimpleProjectNode construtor, como o SimpleProjectFactory armazena em cache do construtor, um SimpleProjectPackage referência em um campo particular para uso posterior.
Para conectar-se a SimpleProjectFactory de classe para o SimpleProjectNode classe, você deve criar uma nova SimpleProjectNode na SimpleProjectFactory.CreateProject método e armazenar em cache em um campo particular para uso posterior.
Para conectar-se a classe de fábrica do projeto e a classe de nó
No arquivo SimpleProjectFactory.cs, adicione o seguinte using a instrução após a existente using instruções.
using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
Substituir o SimpleProjectFactory.CreateProject método usando o código a seguir.
protected override ProjectNode CreateProject() { SimpleProjectNode project = new SimpleProjectNode(this.package); project.SetSite((IOleServiceProvider) ((IServiceProvider)this.package).GetService( typeof(IOleServiceProvider))); return project; }
Recrie a solução e verifique se ele foi compilado sem erros.
A classe de nó do projeto de teste.
Teste sua fábrica de projeto para ver se ele cria uma hierarquia de projetos.
Para testar a classe de nó do projeto
Pressione F5 para iniciar uma ocorrência experimental do Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
No Novo projeto caixa de diálogo, em modelos instalados do Visual Studio, selecione SimpleProject.
Selecione Create Directory for Solutione o tipo de MyProject na nome caixa.
Digite um local para a solução, por exemplo, ., D:\.
Clique em OK.
Visual Studio deve chamar sua fábrica de projeto para criar um projeto.
Feche a instância experimental do Visual Studio.
Adicionar um ícone de nó de projeto personalizado
O ícone do nó de projeto na seção anterior é um ícone padrão. Você pode alterá-lo para um ícone personalizado.
Para adicionar um ícone do nó de projeto personalizado
Com o botão direito do recursos pasta, aponte para Adde, em seguida, clique em Novo Item. Adicionar um Arquivo de Bitmap chamado SimpleProjectNode.bmp. Clique em Add para abrir o editor de bitmap.
No Propriedades windows, reduzir o bitmap para 16 por 16 pixels. Verifique o bitmap distinto.
No Propriedades janela, alterar o ação de compilação do bitmap para Embedded Resource.
Em SimpleProjectNode.cs, adicione o seguinte using instruções após o existente using instruções.
using System.Drawing; using System.Windows.Forms;
Adicione o seguinte campo estático e o construtor para o SimpleProjectNode classe.
private static ImageList imageList; static SimpleProjectNode() { imageList = Utilities.GetImageList( typeof(SimpleProjectNode).Assembly.GetManifestResourceStream( "Company.SimpleProject.Resources.SimpleProjectNode.bmp")); }
Adicione a seguinte propriedade ao início do SimpleProjectNode classe.
internal static int imageIndex; public override int ImageIndex { get { return imageIndex; } }
Substitua o construtor de instância usando o código a seguir.
public SimpleProjectNode(SimpleProjectPackage package) { this.package = package; imageIndex = this.ImageHandler.ImageList.Images.Count; foreach (Image img in imageList.Images) { this.ImageHandler.AddImage(img); } }
Durante a construção estática, SimpleProjectNode recupera o bitmap de nó de projeto os recursos de manifesto do assembly e armazena-os em um campo particular para uso posterior. Observe a sintaxe da GetManifestResourceStream caminho da imagem. Para ver os nomes dos recursos manifesto incorporados em um assembly, use o Assembly.GetManifestResourceNames método. Quando esse método é aplicado para o SimpleProject assembly, os resultados devem ser da seguinte maneira:
Company.SimpleProject.Resources.Resources
Microsoft.VisualStudio.Package.Project.Resources
Company.SimpleProject.VSPackage.Resources
Resources.imagelis.bmp
Microsoft.VisualStudio.Package.DontShowAgainDialog.Resources
Microsoft.VisualStudio.Package.SecurityWarningDialog.Resources
Company.SimpleProject.Resources.SimpleProjectNode.bmp
Durante a construção da instância, o ProjectNode carrega de classe base Resources.imagelis.bmp, no qual são bitmaps incorporados de 16 x 16 comumente usados a partir de Resources\imagelis.bmp. Esta lista de bitmap é disponibilizada para SimpleProjectNode como ImageHandler.ImageList. SimpleProjectNodeacrescenta o bitmap de nó do projeto à lista. O deslocamento do bitmap de nó do projeto na lista de imagens é armazenadas em cache para uso posterior, como o valor do público ImageIndex propriedade. Visual Studio usa essa propriedade para determinar qual bitmap para exibir como ícone do nó do projeto.
Testando o ícone do nó de projeto personalizado
Teste sua fábrica de projeto para ver se ele cria uma hierarquia de projetos que tem o ícone do nó de projeto personalizado.
Para testar o ícone do nó de projeto personalizado
Exclua a solução MyProject.
Pressione F5 para iniciar uma ocorrência experimental do Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
No Novo projeto caixa de diálogo, em modelos instalados do Visual Studio, selecione SimpleProject.
Selecione Create Directory for Solutione o tipo de MyProject na nome caixa.
Digite um local para a solução, por exemplo, ., D:\.
Clique em OK.
Visual Studio deve criar um projeto. Observe que o SimpleProjectNode.bmp é usado como ícone do nó do projeto.
Abra o Program. cs no editor de código. Você deve ver o código-fonte que se parece com o código a seguir.
using System; using System.Collections.Generic; using System.Text; namespace $nameSpace$ { public class $className$ { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }
Observe que os parâmetros de modelo $nameSpace$ e $className$ não tem novos valores. Você pode implementar a substituição de parâmetros de modelo na próxima seção.
Pressione SHIFT + F5 para parar a depuração.
Substituindo os parâmetros do modelo
Em uma seção anterior, você registrou o modelo de projeto com Visual Studio usando o ProvideProjectFactory atributo. Registrar o caminho de uma pasta de modelo dessa maneira permite que você ative a substituição de parâmetros do modelo básico, substituindo e expandindo a ProjectNode.AddFileFromTemplate classe. Para obter mais informações, consulte Nova geração de projeto: Sob o capô, parte dois.
Para substituir os valores dos parâmetros $nameSpace de modelo $ e $className$ no modelo do arquivo Program. cs, você deve adicionar código para o AddFileFromTemplate classe.
Para substituir os parâmetros do modelo
No arquivo SimpleProjectPackage.cs, adicione o seguinte using a instrução após a existente using instruções.
using System.IO;
Substituir o AddFileFromTemplate método usando o código a seguir.
public override void AddFileFromTemplate( string source, string target) { string nameSpace = this.FileTemplateProcessor.GetFileNamespace(target, this); string className = Path.GetFileNameWithoutExtension(target); this.FileTemplateProcessor.AddReplace("$nameSpace$", nameSpace); this.FileTemplateProcessor.AddReplace("$className$", className); this.FileTemplateProcessor.UntokenFile(source, target); this.FileTemplateProcessor.Reset(); }
Definir um ponto de interrupção no método, logo após o className instrução de atribuição.
As instruções de atribuição determinam valores razoáveis para um espaço para nome e um novo nome de classe. Os dois ProjectNode.FileTemplateProcessor.AddReplace chamadas de método substituir os valores de parâmetro de modelo correspondente usando esses novos valores.
A substituição de parâmetros do modelo de teste.
Teste sua fábrica de projeto para ver se ele cria uma hierarquia de projetos com o ícone do nó de projeto personalizado.
Para testar a substituição de parâmetro de modelo
Exclua a solução MyProject.
Pressione F5 para iniciar uma ocorrência experimental do Visual Studio.
No menu File, aponte para New, e em seguida, clique em Project.
No Novo projeto caixa de diálogo, em modelos instalados do Visual Studio, selecione SimpleProject.
Selecione Create Directory for Solutione o tipo de MyProject na nome caixa.
Digite um local para a solução, por exemplo, ., D:\.
Clique em OK.
A execução para no ponto de interrupção no método AddFileFromTemplate.
Examine os valores para o nameSpace e className parâmetros.
nameSpacerecebe o valor de <RootNamespace> elemento no arquivo de modelo de projeto \Templates\Projects\SimpleProject\SimpleProject.myproj. Nesse caso, o valor é "MyRootNamespace".
classNamerecebe o valor do nome de arquivo fonte da classe, sem a extensão de nome de arquivo. Nesse caso, o primeiro arquivo a serem copiados para a pasta de destino é AssemblyInfo. cs; Portanto, o valor do nome da classe é "AssemblyInfo".
Remova o ponto de interrupção e pressione F5 para continuar a execução.
Visual Studio deve concluir a criação de um projeto.
Abra o Program. cs no editor de código. Você deve ver o código-fonte que se parece com o código a seguir.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyRootNamespace { public class Program { static void Main(string[] args) { Console.WriteLine("Hello VSX!!!"); Console.ReadKey(); } } }
Observe que o espaço para nome é "MyRootNamespace" e o nome da classe agora está "Programa".
Na instância experimental do Visual Studio, pressione F5. O novo projeto deve compilar, executar e exibir "Olá VSX!!!" na janela do console.
Parabéns! Você implementou um sistema básico de projeto gerenciado.
Consulte também
Conceitos
Dentro do SDK do Visual Studio
Outros recursos
Explicações passo a passo para personalizar Visual Studio usando VSPackages