Crear un sistema básico del proyecto, parte 1Creating a Basic Project System, Part 1

En Visual Studio, los proyectos son los contenedores que los desarrolladores usan para organizar los archivos de código fuente y otros activos.In Visual Studio, projects are the containers that developers use to organize source code files and other assets. Proyectos aparecen como elementos secundarios de las soluciones en el el Explorador de soluciones.Projects appear as children of solutions in the Solution Explorer. Los proyectos permiten organizar, compilar, depurar, implementar el código fuente y crear referencias a servicios Web, bases de datos y otros recursos.Projects let you organize, build, debug, and deploy source code and create references to Web services, databases, and other resources.

Los proyectos se definen en archivos de proyecto, por ejemplo, un archivo .csproj para un proyecto de Visual C#.Projects are defined in project files, for example a .csproj file for a Visual C# project. Puede crear su propio tipo de proyecto que tiene su propia extensión de nombre de archivo de proyecto.You can create your own project type that has your own project file name extension. Para obtener más información acerca de los tipos de proyecto, vea tipos de proyecto.For more information about project types, see Project Types.

Nota

Si necesita extender Visual Studio con un tipo de proyecto personalizado, se recomienda aprovechar la sistema de proyectos de Visual Studio (vsp) que tiene una serie de ventajas con respecto a la creación de un sistema de proyectos desde el principio:If you need to extend Visual Studio with a custom project type, we strongly recommend leveraging the Visual Studio Project System (VSPS) which has a number of advantages over building a project system from scratch:

  • Incorporación más fácil.Easier onboarding. Incluso en un sistema de proyectos básico requiere decenas de miles de líneas de código.Even a basic project system requires tens of thousands of lines of code. Aprovechamiento VSPS reduce el costo de incorporación a unos pocos clics antes de que esté listo para personalizarlo según sus necesidades.Leveraging VSPS reduces the onboarding cost to a few clicks before you are ready to customize it to your needs.
  • Mantenimiento más sencillo.Easier maintenance. Mediante el aprovechamiento de VSPS, sólo necesitará mantener sus propios escenarios.By leveraging VSPS, you only need to maintain your own scenarios. Que administramos de la conservación de toda la infraestructura del sistema de proyecto de.We handle the upkeep of all of the project system infrastructure.

    Si necesita destinadas a versiones de Visual Studio anteriores a Visual Studio 2013, no podrá aprovechar VSPS en una extensión de Visual Studio.If you need to target versions of Visual Studio older than Visual Studio 2013, you will not be able to leverage VSPS in a Visual Studio extension. Si es así, en este tutorial es un buen lugar para empezar a trabajar.If that is the case, this walkthrough is a good place to get started.

En este tutorial se muestra cómo crear un tipo de proyecto que tiene la .myproj de extensión de nombre de archivo de proyecto.This walkthrough shows you how to create a project type that has the project file name extension .myproj. En este tutorial toma prestado desde el sistema de proyecto de Visual C# existente.This walkthrough borrows from the existing Visual C# project system.

Nota

Para obtener más ejemplos de proyectos de extensión, vea muestras de VSSDK.For more examples of extension projects, see VSSDK Samples.

En este tutorial se enseña cómo realizar estas tareas:This walkthrough teaches how to accomplish these tasks:

  • Crear un tipo básico del proyecto.Create a basic project type.

  • Crear una plantilla de proyecto básico.Create a basic project template.

  • Registre la plantilla de proyecto con Visual Studio.Register the project template with Visual Studio.

  • Crear una instancia del proyecto, abra el nuevo proyecto cuadro de diálogo y, a continuación, usar la plantilla.Create a project instance by opening the New Project dialog box and then using your template.

  • Crear un generador de proyectos para el sistema de proyectos.Create a project factory for your project system.

  • Crear un nodo de proyecto para el sistema de proyectos.Create a project node for your project system.

  • Agregar iconos personalizados para el sistema del proyecto.Add custom icons for the project system.

  • Implementar la sustitución de parámetros de plantilla básica.Implement basic template parameter substitution.

Requisitos previosPrerequisites

A partir de Visual Studio 2015, no instale el SDK de Visual Studio desde el centro de descarga.Starting in Visual Studio 2015, you do not install the Visual Studio SDK from the download center. Se incluye como una característica opcional en el programa de instalación de Visual Studio.It is included as an optional feature in Visual Studio setup. También puede instalar el SDK de VS más adelante.You can also install the VS SDK later on. Para obtener más información, consulte instalar el SDK de Visual Studio.For more information, see Installing the Visual Studio SDK.

También debe descargar el código fuente de la Managed Package Framework for Projects.You must also download the source code for the Managed Package Framework for Projects. Extraiga el archivo en una ubicación que sea accesible a la solución que se va a crear.Extract the file to a location that is accessible to the solution you are going to create.

Crear un tipo de proyecto básicoCreating a Basic Project Type

Cree un proyecto de C# VSIX denominado SimpleProject.Create a C# VSIX project named SimpleProject. (Archivo, nuevo, proyecto y, a continuación, proyecto VSIX en Visual C#, extensibilidad,).(File, New, Project and then Visual C#, Extensibility, VSIX Project). Agregar una plantilla de elemento de proyecto de paquete de Visual Studio (en el Explorador de soluciones, haga clic en el nodo del proyecto y seleccione Agregar / nuevo elemento, a continuación, vaya a extensibilidad / paquete de Visual Studio).Add a Visual Studio Package project item template (on the Solution Explorer, right-click the project node and select Add / New Item, then go to Extensibility / Visual Studio Package). Asignar nombre al archivo SimpleProjectPackage.Name the file SimpleProjectPackage.

Crear una plantilla de proyecto básicoCreating a Basic Project Template

Ahora, puede modificar este básica de VSPackage para implementar el nuevo tipo de proyecto .myproj.Now, you can modify this basic VSPackage to implement the new .myproj project type. Para crear un proyecto que se basa en el tipo de proyecto .myproj, Visual Studio debe saber qué archivos, recursos y referencias a agregar al nuevo proyecto.To create a project that is based on the .myproj project type, Visual Studio has to know which files, resources, and references to add to the new project. Para proporcionar esta información, coloque los archivos de proyecto en una carpeta de plantilla de proyecto.To provide this information, put project files in a project template folder. Cuando un usuario usa el proyecto .myproj para crear un proyecto, los archivos se copian en el nuevo proyecto.When a user uses the .myproj project to create a project, the files are copied to the new project.

Para crear una plantilla de proyecto básicoTo create a basic project template

  1. Agregue tres carpetas al proyecto, uno en la otra: Templates\Projects\SimpleProject.Add three folders to the project, one under the other: Templates\Projects\SimpleProject. (En el Explorador de soluciones, haga clic en el SimpleProject nodo de proyecto, seleccione agregary, a continuación, haga clic en nueva carpeta.(In Solution Explorer, right-click the SimpleProject project node, point to Add, and then click New Folder. Asigne a la carpeta el nombre Templates.Name the folder Templates. En el plantillas carpeta, agrega una carpeta denominada Projects.In the Templates folder, add a folder named Projects. En el proyectos carpeta, agrega una carpeta denominada SimpleProject.)In the Projects folder, add a folder named SimpleProject.)

  2. En el Templates\Projects\SimpleProject carpeta, agregar un archivo de imagen de mapa de bits que se usará como el icono denominado SimpleProject.ico.In the Templates\Projects\SimpleProject folder, add a Bitmap Image file to use as the icon named SimpleProject.ico. Al hacer clic en agregar, se abrirá el editor de icono.When you click Add, the icon editor opens.

  3. Hacer que el icono distintivo.Make the icon distinctive. Este icono se mostrará en el nuevo proyecto cuadro de diálogo más adelante en el tutorial.This icon will appear in the New Project dialog box later in the walkthrough.

    Icono de proyecto simpleSimple Project Icon

  4. El icono Guardar y cerrar el editor de iconos.Save the icon and close the icon editor.

  5. En el Templates\Projects\SimpleProject carpeta, agregue un clase elemento denominado Program.cs.In the Templates\Projects\SimpleProject folder, add a Class item named Program.cs.

  6. Reemplace el código existente con las líneas siguientes.Replace the existing code with the following lines.

    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();
            }
        }
    }
    

    Importante

    Esto no es la forma final del código Program.cs; los parámetros de reemplazo se tratarán en un paso posterior.This is not the final form of the Program.cs code; the replacement parameters will be dealt with in a later step. Es posible que vea errores de compilación, pero siempre que el archivo BuildAction es contenido, podrá compilar y ejecutar el proyecto como de costumbre.You may see compile errors, but as long as the file's BuildAction is Content, you should be able to build and run the project as usual.

  7. Guarde el archivo.Save the file.

  8. Copie el archivo AssemblyInfo.cs de la propiedades carpeta a la Projects\SimpleProject carpeta.Copy the AssemblyInfo.cs file from the Properties folder to the Projects\SimpleProject folder.

  9. En el Projects\SimpleProject carpeta agregar un archivo XML denominado SimpleProject.myproj.In the Projects\SimpleProject folder add an XML file named SimpleProject.myproj.

    Nota

    La extensión de nombre de archivo para todos los proyectos de este tipo es .myproj.The file name extension for all projects of this type is .myproj. Si desea cambiarlo, debe cambiarlo everywhere se menciona en el tutorial.If you want to change it, you must change it everywhere it is mentioned in the walkthrough.

  10. Reemplace el contenido existente con las líneas siguientes.Replace the existing content with the following lines.

    <?xml version="1.0" encoding="utf-8" ?>  
    <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
      <PropertyGroup>  
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>  
        <SchemaVersion>2.0</SchemaVersion>  
        <ProjectGuid></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>  
    
  11. Guarde el archivo.Save the file.

  12. En el propiedades ventana, establezca el acción de compilación de AssemblyInfo.cs, Program.cs, SimpleProject.ico y SimpleProject.myproj a contenidoy establezca sus Incluir en VSIX propiedades True.In the Properties window, set the Build Action of AssemblyInfo.cs, Program.cs, SimpleProject.ico, and SimpleProject.myproj to Content, and set their Include in VSIX properties to True.

    Esta plantilla de proyecto describe un proyecto básico de Visual C# que tiene una configuración de depuración y una configuración de lanzamiento.This project template describes a basic Visual C# project that has both a Debug configuration and a Release configuration. El proyecto incluye archivos de origen de dos, AssemblyInfo.cs y Program.cs y ensamblado varias referencias.The project includes two source files, AssemblyInfo.cs and Program.cs, and several assembly references. Cuando se crea un proyecto de la plantilla, el valor de ProjectGuid se sustituye automáticamente por un nuevo GUID.When a project is created from the template, the ProjectGuid value is automatically replaced by a new GUID.

    En el Explorador de soluciones, el expandido plantillas carpeta debería aparecer como sigue:In Solution Explorer, the expanded Templates folder should appear as follows:

Templates  
   Projects  
      SimpleProject  
         AssemblyInfo.cs  
         Program.cs  
         SimpleProject.ico  
         SimpleProject.myproj  

Crear un generador del proyecto básicoCreating a Basic Project Factory

Debe indicar a Visual Studio la ubicación de la carpeta de plantilla de proyecto.You must tell Visual Studio the location of your project template folder. Para ello, agregue un atributo a la clase de VSPackage que implementa el generador de proyectos para que la ubicación de plantillas se escribe en el registro del sistema cuando se compila el VSPackage.To do this, add an attribute to the VSPackage class that implements the project factory so that the template location is written to the system registry when the VSPackage is built. Empiece por crear un generador de básico del proyecto que se identifica mediante un generador GUID de proyecto.Start by creating a basic project factory that is identified by a project factory GUID. Use la ProvideProjectFactoryAttribute atributo para conectar el generador de proyectos a la clase SimpleProjectPackage.Use the ProvideProjectFactoryAttribute attribute to connect the project factory to the SimpleProjectPackage class.

Para crear un generador de básico del proyectoTo create a basic project factory

  1. Crear GUID para el generador de proyectos (en el herramientas menú, haga clic en crear GUID), o utilizar uno en el ejemplo siguiente.Create GUIDs for your project factory (on the Tools menu, click Create GUID), or use the one in the following example. Agregue los GUID a la clase SimpleProjectPackage cerca de la sección con ya definido PackageGuidString.Add the GUIDs to the SimpleProjectPackage class near the section with the already defined PackageGuidString. El GUID deben estar en formato GUID y forma de cadena.The GUIDs must be in both GUID form and string form. El código resultante debe parecerse al ejemplo siguiente.The resulting code should resemble the following example.

        public sealed class SimpleProjectPackage : Package
        {  
            ...
            public const string SimpleProjectPkgString = "96bf4c26-d94e-43bf-a56a-f8500b52bfad";  
            public const string SimpleProjectFactoryString = "471EC4BB-E47E-4229-A789-D1F5F83B52D4";  
    
            public static readonly Guid guidSimpleProjectFactory = new Guid(SimpleProjectFactoryString);  
        }  
    
  2. Agregar una clase a la parte superior SimpleProject carpeta denominada SimpleProjectFactory.cs.Add a class to the top SimpleProject folder named SimpleProjectFactory.cs.

  3. Agregue las siguientes instrucciones using:Add the following using statements:

    using System.Runtime.InteropServices;  
    using Microsoft.VisualStudio.Shell;  
    
  4. Agregue un atributo de Guid para la clase SimpleProjectFactory.Add a Guid attribute to the SimpleProjectFactory class. El valor del atributo es el nuevo generador GUID de proyecto.The value of the attribute is the new project factory GUID.

    [Guid(SimpleProjectPackage.SimpleProjectFactoryString)]  
    class SimpleProjectFactory  
    {  
    }  
    

    Ahora puede registrar la plantilla de proyecto.Now you can register your project template.

Para registrar la plantilla de proyectoTo register the project template

  1. En SimpleProjectPackage.cs, agregue un ProvideProjectFactoryAttribute atributo a la clase SimpleProjectPackage, como se indica a continuación.In SimpleProjectPackage.cs, add a ProvideProjectFactoryAttribute attribute to the SimpleProjectPackage class, as follows.

    [ProvideProjectFactory(    typeof(SimpleProjectFactory),     "Simple Project",   
        "Simple Project Files (*.myproj);*.myproj", "myproj", "myproj",   
        @"Templates\Projects\SimpleProject",     LanguageVsTemplate = "SimpleProject")]  
    [Guid(SimpleProjectPackage.PackageGuidString)]  
    public sealed class SimpleProjectPackage : Package  
    
  2. Volver a generar la solución y compruebe que se compila sin errores.Rebuild the solution and verify that it builds without errors.

    Volver a generar, registra la plantilla de proyecto.Rebuilding registers the project template.

    Los parámetros defaultProjectExtension y possibleProjectExtensions se establecen en la extensión de nombre de archivo de proyecto (.myproj).The parameters defaultProjectExtension and possibleProjectExtensions are set to the project file name extension (.myproj). El projectTemplatesDirectory parámetro se establece en la ruta de acceso relativa de la carpeta de plantillas.The projectTemplatesDirectory parameter is set to the relative path of the Templates folder. Durante la compilación, se convierte a una compilación completa esta ruta de acceso y se agrega al registro para registrar el sistema del proyecto.During the build, this path will be converted to a full build and added to the registry to register the project system.

Probar el registro de plantillaTesting the Template Registration

Registro de plantilla indica a Visual Studio la ubicación de la carpeta de plantilla de proyecto para que Visual Studio puede mostrar el nombre de la plantilla y el icono en el nuevo proyecto cuadro de diálogo.Template registration tells Visual Studio the location of your project template folder so that Visual Studio can display the template name and icon in the New Project dialog box.

Para probar el registro de plantillaTo test the template registration

  1. Presione F5 para iniciar la depuración de una instancia experimental de Visual Studio.Press F5 to start debugging an experimental instance of Visual Studio.

  2. En la instancia experimental, cree un nuevo proyecto de su tipo de proyecto recién creado.In the experimental instance, create a new project of your newly-created project type. En el nuevo proyecto cuadro de diálogo, debería ver SimpleProject en plantillas instaladas.In the New Project dialog box, you should see SimpleProject under Installed templates.

    Ahora tiene un generador del proyecto que se ha registrado.Now you have a project factory that is registered. Sin embargo, aún no puede crear un proyecto.However, it cannot yet create a project. El paquete del proyecto y el generador de proyecto funcionan conjuntamente para crear e inicializar un proyecto.The project package and project factory work together to create and initialize a project.

Agregue el código de Managed Package FrameworkAdd the Managed Package Framework code

Implementar la conexión entre el paquete del proyecto y el generador de proyectos.Implement the connection between the project package and the project factory.

  • Importe los archivos de código fuente de Managed Package Framework.Import the source-code files for the Managed Package Framework.

    1. Descargue el proyecto SimpleProject (en el Explorador de soluciones, seleccione el nodo del proyecto y en el menú contextual, haga clic en descargar el proyecto.) y abra el archivo de proyecto en el editor XML.Unload the SimpleProject project (in Solution Explorer, select the project node and on the context menu click Unload Project.) and open the project file in the XML editor.

    2. Agregue los siguientes bloques en el archivo de proyecto (justo encima del <importación > bloques).Add the following blocks to the project file (just above the <Import> blocks). Establezca ProjectBasePath en la ubicación del archivo ProjectBase.files en el código de Managed Package Framework que acaba de descargar.Set ProjectBasePath to the location of the ProjectBase.files file in the Managed Package Framework code you just downloaded. Es posible que deba agregar una barra diagonal inversa a la ruta de acceso.You might have to add a backslash to the pathname. Si no lo hace, se puede producir un error en el proyecto se encuentra el código de Managed Package Framework.If you do not, the project might fail to find the Managed Package Framework code.

      <PropertyGroup>  
           <ProjectBasePath>your path here\</ProjectBasePath>  
           <RegisterWithCodebase>true</RegisterWithCodebase>  
        </PropertyGroup>  
        <Import Project="$(ProjectBasePath)\ProjectBase.Files" />  
      

      Importante

      No olvide la barra diagonal inversa al final de la ruta de acceso.Don't forget the backslash at the end of the path.

    3. Vuelva a cargar el proyecto.Reload the project.

    4. Agregue referencias a los siguientes ensamblados:Add references to the following assemblies:

      • Microsoft.VisualStudio.Designer.Interfaces (en <instalación VSSDK > \VisualStudioIntegration\Common\Assemblies\v2.0)Microsoft.VisualStudio.Designer.Interfaces (in <VSSDK install>\VisualStudioIntegration\Common\Assemblies\v2.0)

      • WindowsBaseWindowsBase

      • Microsoft.Build.Tasks.v4.0Microsoft.Build.Tasks.v4.0

Para inicializar el generador de proyectosTo initialize the project factory

  1. En el archivo SimpleProjectPackage.cs, agregue las siguientes using instrucción.In the SimpleProjectPackage.cs file, add the following using statement.

    using Microsoft.VisualStudio.Project;  
    
  2. Derivar la SimpleProjectPackage clase Microsoft.VisualStudio.Package.ProjectPackage.Derive the SimpleProjectPackage class from Microsoft.VisualStudio.Package.ProjectPackage.

    public sealed class SimpleProjectPackage : ProjectPackage  
    
  3. Registrar el generador de proyectos.Register the project factory. Agregue la línea siguiente a la SimpleProjectPackage.Initialize método, justo después base.Initialize.Add the following line to the SimpleProjectPackage.Initialize method, just after base.Initialize.

    base.Initialize();  
    this.RegisterProjectFactory(new SimpleProjectFactory(this));  
    
  4. Implementa la propiedad abstracta ProductUserContext:Implement the abstract property ProductUserContext:

    public override string ProductUserContext  
        {  
            get { return ""; }  
    }  
    
  5. En SimpleProjectFactory.cs, agregue las siguientes using instrucción después existente using instrucciones.In SimpleProjectFactory.cs, add the following using statement after the existing using statements.

    using Microsoft.VisualStudio.Project;  
    
  6. Derivar la SimpleProjectFactory clase ProjectFactory.Derive the SimpleProjectFactory class from ProjectFactory.

    class SimpleProjectFactory : ProjectFactory  
    
  7. Agregue el siguiente método ficticio para el SimpleProjectFactory clase.Add the following dummy method to the SimpleProjectFactory class. Este método se implementará en una sección posterior.You will implement this method in a later section.

    protected override ProjectNode CreateProject()  
    {  
        return null;  
    }  
    
  8. Agregue el siguiente campo y constructor para el SimpleProjectFactory clase.Add the following field and constructor to the SimpleProjectFactory class. Esto SimpleProjectPackage referencia se almacena en caché en un campo privado para que se puede utilizar en la configuración de un sitio de proveedor de servicio.This SimpleProjectPackage reference is cached in a private field so that it can be used in setting a service provider site.

    private SimpleProjectPackage package;  
    
    public SimpleProjectFactory(SimpleProjectPackage package)  
        : base(package)  
    {  
        this.package = package;  
    }  
    
  9. Volver a generar la solución y compruebe que se compila sin errores.Rebuild the solution and verify that it builds without errors.

Probar la implementación del generador de proyectoTesting the Project Factory Implementation

Comprobar si se llama al constructor de la implementación del generador de proyectos.Test whether the constructor for your project factory implementation is called.

Para probar la implementación del generador de proyectoTo test the project factory implementation

  1. En el archivo SimpleProjectFactory.cs, establezca un punto de interrupción en la línea siguiente en el SimpleProjectFactory constructor.In the SimpleProjectFactory.cs file, set a breakpoint on the following line in the SimpleProjectFactory constructor.

    this.package = package;  
    
  2. Presione F5 para iniciar una instancia experimental de Visual Studio.Press F5 to start an experimental instance of Visual Studio.

  3. En la instancia experimental, comience a crear un nuevo proyecto. En el nuevo proyecto cuadro de diálogo, seleccione la SimpleProject tipo de proyecto y, a continuación, haga clic en Aceptar.In the experimental instance, start to create a new project.In the New Project dialog box, select the SimpleProject project type and then click OK. La ejecución se detiene en el punto de interrupción.Execution stops at the breakpoint.

  4. Desactive el punto de interrupción y detener la depuración.Clear the breakpoint and stop debugging. Puesto que aún no hemos creado un nodo de proyecto, el código de creación del proyecto todavía produce excepciones.Since we have not created a project node yet, the project creation code still throws exceptions.

Extender la clase de nodo de proyectoExtending the Project Node Class

Ahora puede implementar la SimpleProjectNode (clase), que se deriva de la ProjectNode clase.Now you can implement the SimpleProjectNode class, which derives from the ProjectNode class. La ProjectNode clase base controla las siguientes tareas de creación del proyecto:The ProjectNode base class handles the following tasks of project creation:

  • Copia el archivo de plantilla de proyecto, SimpleProject.myproj, en la nueva carpeta de proyecto.Copies the project template file, SimpleProject.myproj, to the new project folder. Se cambia el nombre de la copia de acuerdo con el nombre especificado en el nuevo proyecto cuadro de diálogo.The copy is renamed according to the name that is entered in the New Project dialog box. La ProjectGuid valor de propiedad se sustituye por un nuevo GUID.The ProjectGuid property value is replaced by a new GUID.

  • Recorre los elementos de MSBuild del archivo de plantilla del proyecto, SimpleProject.myproj y busca Compile elementos.Traverses the MSBuild elements of the project template file, SimpleProject.myproj, and looks for Compile elements. Para cada Compile archivo de destino, copia el archivo a la nueva carpeta de proyecto.For each Compile target file, copies the file to the new project folder.

    La clase derivada SimpleProjectNode clase administra estas tareas:The derived SimpleProjectNode class handles these tasks:

  • Habilita los iconos para los nodos de proyecto y el archivo en el Explorador de soluciones que deben crearse o seleccionado.Enables icons for project and file nodes in Solution Explorer to be created or selected.

  • Permite sustituciones de parámetros de plantilla de proyecto adicionales que se especifique.Enables additional project template parameter substitutions to be specified.

Para extender la clase de nodo de proyectoTo extend the project node class

  1. Agregue una clase denominada SimpleProjectNode.cs.Add a class named SimpleProjectNode.cs.

  2. Reemplace el código existente por el siguiente código.Replace the existing code with the following code.

    using System;  
    using System.Collections.Generic;  
    using Microsoft.VisualStudio.Project;  
    
    namespace SimpleProject  
    {  
        public class SimpleProjectNode : ProjectNode  
        {  
            private SimpleProjectPackage package;  
    
            public SimpleProjectNode(SimpleProjectPackage package)  
            {  
                this.package = package;  
            }  
            public override Guid ProjectGuid  
            {  
                get { return SimpleProjectPackage.guidSimpleProjectFactory; }  
            }  
            public override string ProjectType  
            {  
                get { return "SimpleProjectType"; }  
            }  
    
            public override void AddFileFromTemplate(  
                string source, string target)  
            {  
                this.FileTemplateProcessor.UntokenFile(source, target);  
                this.FileTemplateProcessor.Reset();  
            }  
        }  
    }  
    

    Esto SimpleProjectNode implementación de la clase tiene estos métodos invalidados:This SimpleProjectNode class implementation has these overridden methods:

  • ProjectGuid, que devuelve el GUID del generador de proyectos.ProjectGuid, which returns the project factory GUID.

  • ProjectType, que devuelve el nombre localizado del tipo de proyecto.ProjectType, which returns the localized name of the project type.

  • AddFileFromTemplate, que copia archivos seleccionados de la carpeta de plantillas para el proyecto de destino.AddFileFromTemplate, which copies selected files from the template folder to the destination project. Además, este método se implementa en una sección posterior.This method is further implemented in a later section.

    El SimpleProjectNode constructor, como el SimpleProjectFactory almacena en memoria caché en el constructor, un SimpleProjectPackage referencia en un campo privado para su uso posterior.The SimpleProjectNode constructor, like the SimpleProjectFactory constructor, caches a SimpleProjectPackage reference in a private field for later use.

    Para conectar el SimpleProjectFactory clase a la SimpleProjectNode (clase), debe crear instancias de un nuevo SimpleProjectNode en el SimpleProjectFactory.CreateProject método y almacenarla en la caché en un campo privado para su uso posterior.To connect the SimpleProjectFactory class to the SimpleProjectNode class, you must instantiate a new SimpleProjectNode in the SimpleProjectFactory.CreateProject method and cache it in a private field for later use.

Para conectarse a la clase de generador de proyecto y la clase de nodoTo connect the project factory class and the node class

  1. En el archivo SimpleProjectFactory.cs, agregue las siguientes using instrucción:In the SimpleProjectFactory.cs file, add the following using statement:

    using IOleServiceProvider =    Microsoft.VisualStudio.OLE.Interop.IServiceProvider;  
    
  2. Reemplace el SimpleProjectFactory.CreateProject método utilizando el código siguiente.Replace the SimpleProjectFactory.CreateProject method by using the following code.

    protected override ProjectNode CreateProject()  
    {  
        SimpleProjectNode project = new SimpleProjectNode(this.package);  
    
        project.SetSite((IOleServiceProvider)        ((IServiceProvider)this.package).GetService(            typeof(IOleServiceProvider)));  
        return project;  
    }  
    
  3. Volver a generar la solución y compruebe que se compila sin errores.Rebuild the solution and verify that it builds without errors.

Probar la clase de nodo de proyectoTesting the Project Node Class

Probar el generador de proyectos para ver si crea una jerarquía de proyectos.Test your project factory to see whether it creates a project hierarchy.

Para probar la clase de nodo de proyectoTo test the project node class

  1. Presione F5 para iniciar la depuración.Press F5 to start debugging. En la instancia experimental, cree un nuevo SimpleProject.In the experimental instance, create a new SimpleProject.

  2. Visual Studio debe llamar a la fábrica de proyecto para crear un proyecto.Visual Studio should call your project factory to create a project.

  3. Cierre la instancia experimental de Visual Studio.Close the experimental instance of Visual Studio.

Agregar un icono de nodo de proyecto personalizadasAdding a Custom Project Node Icon

El icono de nodo de proyecto en la sección anterior es un icono predeterminado.The project node icon in the earlier section is a default icon. Se puede cambiar a un icono personalizado.You can change it to a custom icon.

Para agregar un icono de nodo de proyecto personalizadasTo add a custom project node icon

  1. En el recursos carpeta, agregue un archivo de mapa de bits denominado SimpleProjectNode.bmp.In the Resources folder, add a bitmap file named SimpleProjectNode.bmp.

  2. En el propiedades windows, reducir el mapa de bits a 16 por 16 píxeles.In the Properties windows, reduce the bitmap to 16 by 16 pixels. Hacer que el mapa de bits distintos.Make the bitmap distinctive.

    Comando de proyecto simpleSimple Project Comm

  3. En el propiedades ventana, cambiar la acción de compilación del mapa de bits a recurso incrustado.In the Properties window, change the Build action of the bitmap to Embedded Resource.

  4. En SimpleProjectNode.cs, agregue las siguientes using instrucciones:In SimpleProjectNode.cs, add the following using statements:

    using System.Drawing;  
    using System.Windows.Forms;  
    
  5. Agregue el siguiente campo estático y el constructor para la SimpleProjectNode clase.Add the following static field and constructor to the SimpleProjectNode class.

    private static ImageList imageList;  
    
    static SimpleProjectNode()  
    {  
        imageList =        Utilities.GetImageList(            typeof(SimpleProjectNode).Assembly.GetManifestResourceStream(                "SimpleProject.Resources.SimpleProjectNode.bmp"));  
    }  
    
  6. Agregue la siguiente propiedad al principio de la SimpleProjectNode clase.Add the following property to the beginning of the SimpleProjectNode class.

    internal static int imageIndex;  
       public override int ImageIndex  
       {  
           get { return imageIndex; }  
       }  
    
  7. Reemplace el constructor de instancia con el código siguiente.Replace the instance constructor with the following code.

    public SimpleProjectNode(SimpleProjectPackage package)  
    {  
        this.package = package;  
    
        imageIndex = this.ImageHandler.ImageList.Images.Count;  
    
        foreach (Image img in imageList.Images)  
        {  
            this.ImageHandler.AddImage(img);  
        }  
    }  
    

    Durante la construcción estática, SimpleProjectNode recupera el mapa de bits de nodo de proyecto de los recursos de manifiesto de ensamblado y lo almacena en caché en un campo privado para su uso posterior.During static construction, SimpleProjectNode retrieves the project node bitmap from the assembly manifest resources and caches it in a private field for later use. Observe la sintaxis de la GetManifestResourceStream ruta de acceso de imagen.Notice the syntax of the GetManifestResourceStream image path. Para ver los nombres de los recursos de manifiesto incrustados en un ensamblado, utilice la GetManifestResourceNames método.To see the names of the manifest resources embedded in an assembly, use the GetManifestResourceNames method. Cuando este método se aplica a la SimpleProject ensamblado, los resultados deben ser como sigue:When this method is applied to the SimpleProject assembly, the results should be as follows:

  • SimpleProject.Resources.resourcesSimpleProject.Resources.resources

  • VisualStudio.Project.resourcesVisualStudio.Project.resources

  • SimpleProject.VSPackage.resourcesSimpleProject.VSPackage.resources

  • Resources.imagelis.bmpResources.imagelis.bmp

  • Microsoft.VisualStudio.Project.DontShowAgainDialog.resourcesMicrosoft.VisualStudio.Project.DontShowAgainDialog.resources

  • Microsoft.VisualStudio.Project.SecurityWarningDialog.resourcesMicrosoft.VisualStudio.Project.SecurityWarningDialog.resources

  • SimpleProject.Resources.SimpleProjectNode.bmpSimpleProject.Resources.SimpleProjectNode.bmp

    Durante la construcción de la instancia, el ProjectNode Resources.imagelis.bmp, en el que son utilizadas 16 x 16 mapas de bits incrustados de Resources\imagelis.bmp de carga de clase base.During instance construction, the ProjectNode base class loads Resources.imagelis.bmp, in which are embedded commonly used 16 x 16 bitmaps from Resources\imagelis.bmp. Esta lista de mapa de bits debe ponerse a disposición a SimpleProjectNode como ImageHandler.ImageList.This bitmap list is made available to SimpleProjectNode as ImageHandler.ImageList. SimpleProjectNode Anexa el mapa de bits de nodo de proyecto a la lista.SimpleProjectNode appends the project node bitmap to the list. El desplazamiento del mapa de bits de nodo de proyecto en la lista de imágenes se almacenan en caché para su uso posterior como el valor del público ImageIndex propiedad.The offset of the project node bitmap in the image list is cached for later use as the value of the public ImageIndex property. Visual Studio usa esta propiedad para determinar qué mapa de bits para mostrar como el icono de nodo de proyecto.Visual Studio uses this property to determine which bitmap to display as the project node icon.

Probar el icono de nodo de proyecto personalizadasTesting the Custom Project Node Icon

Probar el generador de proyectos para ver si crea una jerarquía de proyecto que tiene el icono de nodo de proyecto personalizado.Test your project factory to see whether it creates a project hierarchy that has your custom project node icon.

Para probar el icono de nodo de proyecto personalizadasTo test the custom project node icon

  1. Iniciar la depuración y en la instancia experimental, cree un nuevo SimpleProject.Start debugging, and in the experimental instance create a new SimpleProject.

  2. En el proyecto recién creado, tenga en cuenta que SimpleProjectNode.bmp se utiliza como el icono de nodo de proyecto.In the newly-created project, notice that SimpleProjectNode.bmp is used as the project node icon.

    Nodo de proyecto simple nuevo proyectoSimple Project New Project Node

  3. Abra Program.cs en el editor de código.Open Program.cs in the code editor. Debería ver el código fuente que es similar al código siguiente.You should see source code that resembles the following code.

    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();  
            }  
        }  
    }  
    

    Tenga en cuenta que los parámetros de plantilla $nameSpace$ y $className$ no tiene nuevos valores.Notice that the template parameters $nameSpace$ and $className$ do not have new values. Obtendrá información sobre cómo implementar la sustitución de parámetros de plantilla en la sección siguiente.You will learn how to implement template parameter substitution in the next section.

Sustitución de parámetros de plantillaSubstituting Template Parameters

En una sección anterior, se registra la plantilla de proyecto con Visual Studio mediante el ProvideProjectFactory atributo.In an earlier section, you registered the project template with Visual Studio by using the ProvideProjectFactory attribute. Registrar la ruta de acceso de una carpeta de plantilla de esta manera permite habilitar la sustitución de parámetros de plantilla básica reemplazando y expandir el ProjectNode.AddFileFromTemplate clase.Registering the path of a template folder in this manner lets you enable basic template parameter substitution by overriding and expanding the ProjectNode.AddFileFromTemplate class. Para obtener más información, consulte nueva generación de proyecto: Under the Hood, parte dos.For more information, see New Project Generation: Under the Hood, Part Two.

Ahora agregue el código de reemplazo para el AddFileFromTemplate clase.Now add replacement code to the AddFileFromTemplate class.

Para sustituir los parámetros de plantillaTo substitute template parameters

  1. En el archivo SimpleProjectNode.cs, agregue las siguientes using instrucción.In the SimpleProjectNode.cs file, add the following using statement.

    using System.IO;  
    
  2. Reemplace el AddFileFromTemplate método utilizando el código siguiente.Replace the AddFileFromTemplate method by using the following code.

    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();  
    }  
    
  3. Establecer un punto de interrupción en el método, justo después de la className instrucción de asignación.Set a breakpoint in the method, just after the className assignment statement.

    Las instrucciones de asignación determinan valores razonables para un espacio de nombres y un nuevo nombre de clase.The assignment statements determine reasonable values for a namespace and a new class name. Los dos ProjectNode.FileTemplateProcessor.AddReplace llamadas al método reemplace los valores de parámetro de plantilla correspondientes con estos nuevos valores.The two ProjectNode.FileTemplateProcessor.AddReplace method calls replace the corresponding template parameter values by using these new values.

Probar la sustitución de parámetros de plantillaTesting the Template Parameter Substitution

Ahora puede probar la sustitución de parámetros de plantilla.Now you can test template parameter substitution.

Para probar la sustitución de parámetros de plantillaTo test the template parameter substitution

  1. Iniciar la depuración y en la instancia experimental, cree un nuevo SimpleProject.Start debugging, and in the experimental instance create a new SimpleProject.

  2. La ejecución se detiene en el punto de interrupción en el AddFileFromTemplate método.Execution stops at the breakpoint in the AddFileFromTemplate method.

  3. Examinar los valores para la nameSpace y className parámetros.Examine the values for the nameSpace and className parameters.

    • nameSpace se le asigna el valor de la <RootNamespace > elemento en el archivo de plantilla de proyecto \Templates\Projects\SimpleProject\SimpleProject.myproj.nameSpace is given the value of the <RootNamespace> element in the \Templates\Projects\SimpleProject\SimpleProject.myproj project template file. En este caso, el valor es "MyRootNamespace".In this case, the value is "MyRootNamespace".

    • className recibe el valor del nombre de archivo de origen de clase, sin la extensión de nombre de archivo.className is given the value of the class source file name, without the file name extension. En este caso, el primer archivo se copien en la carpeta de destino es AssemblyInfo.cs; por lo tanto, el valor de className es "AssemblyInfo".In this case, the first file to be copied to the destination folder is AssemblyInfo.cs; therefore, the value of className is "AssemblyInfo".

  4. Quite el punto de interrupción y presione F5 para continuar la ejecución.Remove the breakpoint and press F5 to continue execution.

    Visual Studio debe terminar de crear un proyecto.Visual Studio should finish creating a project.

  5. Abra Program.cs en el editor de código.Open Program.cs in the code editor. Debería ver el código fuente que es similar al código siguiente.You should see source code that resembles the following code.

    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();  
            }  
        }  
    }  
    

    Tenga en cuenta que el espacio de nombres es ahora "MyRootNamespace" y el nombre de clase es ahora "Program".Notice that the namespace is now "MyRootNamespace" and the class name is now "Program".

  6. Empiece a depurar el proyecto.Start debugging the project. El nuevo proyecto debe compilar, ejecutar y mostrar "Hello VSX."The new project should compile, run, and display "Hello VSX!!!" en la ventana de la consola.in the console window.

    Comando de proyecto simpleSimple Project Command

    ¡Enhorabuena!Congratulations! Ha implementado un sistema administrado básico del proyecto.You have implemented a basic managed project system.