Condividi tramite


procedura dettagliata: Parte 1 - creare un sistema di progetto di base

In Visual Studio, i progetti sono contenitori che gli sviluppatori per organizzare i file di codice sorgente e altre risorse visualizzati in Esplora soluzioni. I progetti consentono di organizzare, sviluppare, eseguire il debug e distribuire il codice sorgente e creare i riferimenti ai servizi Web, database e altre risorse.

In genere, i progetti vengono specificati dal contenuto di un file di progetto, ad esempio, un file con estensione per un progetto di Visual c#. È possibile creare diventi proprietaria del tipo di progetto che dispone della propria estensione di file di progetto. per ulteriori informazioni sui tipi di progetto, vedere tipi di progetto.

In questa procedura dettagliata viene illustrato come creare un tipo di progetto che ha l'estensione di file .myproj di progetto. Per completare la procedura dettagliata, non è necessario creare diventi proprietaria del linguaggio in quanto i prestiti della procedura dettagliata dal sistema del progetto esistente di Visual c#.

Nota

Per un esempio end-to-end di un sistema di progetto completo del linguaggio, vedere l'esempio di IronPython in profondità tuffarsi Esempi di estensibilità di Visual Studio.

In questa procedura dettagliata viene illustrato come eseguire queste attività:

  • creare un tipo di progetto di base.

  • creare un modello di progetto di base.

  • Registrare il provider dell'attività con il metodo RegisterTaskProvider dell'elenco attività.

  • Creare un'istanza di progetto aprendo la finestra di dialogo di nuovo progetto quindi utilizzando il modello.

  • Creare una factory del progetto per il sistema del progetto.

  • Creare un nodo del progetto per il sistema del progetto.

  • Per aggiungere icone personalizzate per il sistema del progetto.

  • Implementare la sostituzione dei parametri di modello di base.

Nota

I passaggi di questa procedura dettagliata sono basati su un progetto c#.Tuttavia, ad eccezione delle specifiche quali estensioni di file e codice, è possibile utilizzare gli stessi passaggi per un progetto di Visual Basic.

Prerequisiti

Per completare questa procedura dettagliata, è necessario installare Visual Studio 2010 SDK.

Nota

per ulteriori informazioni su Visual Studio SDK, vedere Cenni preliminari sull'estensione di Visual Studio.Per ulteriori informazioni su come scaricare Visual Studio SDK, vedere Centro per sviluppatori di estensibilità di Visual Studio il sito Web MSDN.

Posizioni del modello di progetto del pacchetto Visual Studio

Il modello di progetto del pacchetto Visual Studio è disponibile in tre posizioni diverse nella finestra di dialogo di nuovo progetto :

  1. Sotto di estensibilità di Visual Basic. La lingua predefinita del progetto di Visual Basic.

  2. Sotto di estensibilità di c#. La lingua predefinita del progetto è c#.

  3. Nell'ambito dell'altra estensibilità dei tipi di progetto. La lingua predefinita del progetto è c#, ma VB e C++ sono disponibili.

creare un tipo di progetto di base

I tipi di progetto, come nella maggior parte delle estensioni di Visual Studio, vengono implementati da Vspackage. per ulteriori informazioni su VSPackages, vedere Procedure dettagliate per personalizzare Visual Studio tramite package VS.. Per creare un tipo di progetto, è innanzitutto necessario creare un VSPackage.

Per creare un package VS

  1. creare un progetto VSPackage denominato SimpleProject.

  2. Nella pagina di selezionare un linguaggio di programmazione , selezionare Visual C# e generare un nuovo file di chiave per firmare l'assembly.

  3. Nella pagina di Selezionare le opzioni di test , deselezionare entrambe le opzioni e quindi fare clic - Fine.

    Il modello viene creato un progetto package VS che dispone delle impostazioni specificate.

creare un modello di progetto di base

A questo punto, è possibile modificare questa base VSPackage per distribuire il nuovo tipo di progetto di .myproj. Per creare un progetto basato sul tipo di progetto di .myproj, Visual Studio necessario sapere quali file, le risorse e riferimenti da aggiungere al nuovo progetto. Per fornire queste informazioni, inserire i file di progetto in una cartella del modello di progetto. Quindi, quando un utente utilizza il tipo di progetto .myproj nella finestra di dialogo di nuovo progetto per creare un progetto, i file vengono copiati nel nuovo progetto.

Per creare un modello di progetto di base

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nodo del progetto di SimpleProject , scegliere aggiungerequindi fare clic su nuova cartella. denominare la cartella modelli.

  2. Nella cartella di modelli , aggiungere una cartella denominata progetti.

  3. Nella cartella di progetti , aggiungere una cartella denominata SimpleProject.

  4. Fare clic con il pulsante destro del mouse sulla cartella di SimpleProject , scegliere aggiungerequindi fare clic su nuovo elemento. aggiungere un file di icona denominato SimpleProject.ico. Fare clic aggiungere per aprire l'editor dell'icona.

  5. rendere l'icona distintiva. Questa icona apparirà più avanti nella finestra di dialogo di nuovo progetto nella procedura dettagliata.

    Icona Progetto semplice

  6. L'icona salvare e chiudere l'editor icona.

  7. Nella cartella di SimpleProject , aggiungere un elemento di classe denominato Program.cs. Click Add to open the code editor.

  8. Sostituire il codice esistente utilizzando le righe seguenti.

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

Nota

I file nel modello di progetto possono contenere i parametri di modello che a livello di codice essere modificati quando i file vengono copiati in un nuovo progetto.Più avanti nella procedura dettagliata, è possibile imparare come eseguire questa operazione per i parametri di modello, $nameSpace$ e $className$.

  1. salvare il file e chiudere l'editor di codice.

  2. Nella cartella di Proprietà , la copia AssemblyInfo.cs quindi la incollare nella cartella di I progetti \SimpleProject .

  3. Nella finestra di Proprietà , impostare operazione di compilazione AssemblyInfo.cs a nessuno.

  4. In Esplora soluzioni, fare clic con il pulsante destro del mouse sulla cartella di SimpleProject , scegliere aggiungerequindi fare clic su nuovo elemento. Aggiungere un elemento del file XML denominato SimpleProject.myproj. fare clic aggiungere per aprire l'editor XML.

    Nota

    l'estensione di file per tutti i progetti di questo tipo è .myproj.Se si desidera modificarlo, è necessario modificarlo ovunque che è indicato nella procedura dettagliata.

  5. Sostituire il contenuto esistente utilizzando le righe seguenti.

    <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>
    
  6. salvare il file e chiudere l'editor XML.

  7. Nella finestra di Proprietà , impostare operazione di compilazione Program.cs, di SimpleProject.ico e di SimpleProject.myproj a contenutoe impostare le relative proprietà di Importare in VSIX a True.

Questo modello di progetto viene descritto un progetto Visual c# di base che contiene sia una configurazione di debug che una configurazione di rilascio. Il progetto include due file di origine, AssemblyInfo.cs e Program.cs e numerosi riferimenti all'assembly. Quando un progetto viene creato dal modello, il valore di ProjectGuid automaticamente sostituito da un nuovo GUID.

In Esplora soluzioni, la cartella estesa di modelli avrà il seguente aspetto:

Modelli

    Progetti

        SimpleProject

            AssemblyInfo.cs

            Program.cs

            SimpleProject.ico

            SimpleProject.myproj

creare una factory scheletrica di progetto

È necessario che in Visual Studio il percorso della cartella del modello di progetto. A tale scopo, aggiungere un attributo alla classe di package VS che implementa la factory di progetto in modo da scrivere la posizione del modello nel Registro di sistema quando il package VS viene compilato. Creare innanzitutto una factory di progetto base identificata da una factory GUID di progetto. Utilizzare l'attributo di ProvideProjectFactoryAttribute per connettere la factory di progetto alla classe di SimpleProjectPackage.

Per creare una factory scheletrica di progetto

  1. Aprire Guids.cs nell'editor di codice.

  2. Scegliere dal menu di strumenti , fare clic Crea GUID.

  3. Creare un GUID per la factory di progetto, oppure utilizzarlo nell'esempio seguente. Aggiungere il GUID al GuidList. Il GUID deve essere nel formato del GUID di stringa del form. Il codice risultante sarà simile al seguente.

    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);
    };
    
  4. salvare il file e chiudere l'editor.

  5. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nodo del progetto di SimpleProject , scegliere aggiungerequindi fare clic su nuovo elemento. aggiungere classe denominato SimpleProjectFactory.cs. Click Add to open the code editor.

  6. aggiungere la seguente istruzione using dopo le altre istruzioni using.

    using System.Runtime.InteropServices;
    
  7. Aggiungere un attributo di GUID alla classe di SimpleProjectFactory. Il valore dell'attributo è la nuova factory GUID di progetto.

    [Guid(GuidList.guidSimpleProjectFactoryString)]
    class SimpleProjectFactory
    
  8. Ricompilare la soluzione e verificare che venga compilato senza errori.

Ora è possibile registrare il modello di progetto.

Per registrare il modello di progetto

  1. Aprire SimpleProjectPackage.cs nell'editor di codice.

  2. Aggiungere un attributo di ProvideProjectFactoryAttribute alla classe di SimpleProjectPackage, come illustrato di seguito.

    [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
    
  3. Ricompilare la soluzione e verificare che venga compilato senza errori.

    ricompilare registra il modello di progetto.

L'attributo di ProvideProjectFactory presenta la sintassi seguente.

public ProvideProjectFactoryAttribute(    Type factoryType,    string name,     string displayProjectFileExtensionsResourceID,    string defaultProjectExtension,    string possibleProjectExtensions,    string projectTemplatesDirectory)

I parametri defaultProjectExtension e possibleProjectExtensions vengono impostati sull'estensione di file di progetto (.myproj). Il parametro di projectTemplatesDirectory viene impostato sul percorso relativo della cartella dei modelli. Durante la compilazione, questo percorso viene convertito in una compilazione completa e verrà aggiunto al Registro di sistema per registrare il sistema del progetto.

Revisione della registrazione del modello

Durante la compilazione, Visual Studio crea un file denominato SimpleProject.pkgdef che include le informazioni necessarie per utilizzare il modello. Questo è un file nascosto in \ bin \ la cartella debug del progetto. Aprire il file per verificare che il contenuto siano simili al seguente:

[$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"

Si noti che i GUID nel file saranno diversi. Inoltre i GUID in Guids.cs per il progetto.

Test della registrazione del modello

La registrazione del modello indica a Visual Studio il percorso della cartella del modello di progetto in modo da poter visualizzare Visual Studio il nome e l'icona del modello nella finestra di dialogo di nuovo progetto .

Per testare la registrazione del modello

  1. In Visual Studio, premere F5 per avviare un'istanza sperimentale di Visual Studio.

  2. Nel menu File, puntare a nuovoquindi fare clic su Progetto. Nella finestra di dialogo di nuovo progetto , selezionare il tipo di progetto SimpleProject.

    L'icona di SimpleProject viene visualizzata in Visual Studio configura i modelli.

  3. chiudere l'istanza sperimentale di Visual Studio.

A questo punto si dispone di una factory di progetto che può illustrare la registrazione. Tuttavia, non ancora possibile creare un progetto. Il pacchetto di progetto e la factory di progetto interagiscono per creare e inizializzare un progetto.

inizializzare la factory di progetto

Per implementare la connessione tra il pacchetto di progetto e la factory di progetto, completare le seguenti attività:

  • Alla soluzione, aggiungere i collegamenti ai file di codice sorgente per il framework di progetto Microsoft.VisualStudio.Package . Questo framework è un'estensione del pacchetto gestito Framework (MPF). Il framework di progetto viene fornito solo come codice sorgente.

  • DerivareSimpleProjectPackageda Microsoft.VisualStudio.Package.ProjectPackage.

  • Creare SimpleProjectFactory e registrarlo con Visual Studio tramite il metodo di Microsoft.VisualStudio.Package.RegisterProjectFactory .

  • DerivareSimpleProjectPackageda Microsoft.VisualStudio.Package.ProjectPackage.

  • Passare al costruttore di SimpleProjectFactory un riferimento a SimpleProjectPackage. Questo riferimento viene memorizzata nella cache per impostare un sito del provider di servizi più avanti. per ulteriori informazioni sui servizi, vedere servizi.

Per inizializzare la factory di progetto

  1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nodo di SimpleProject quindi fare clic su scaricare il progetto.

  2. Fare clic con il pulsante destro del mouse sul nodo di SimpleProject quindi fare clic su modifica SimpleProject.csproj.

  3. Individuare i file di origine gestiti di progetto lungo questo collegamento. Copiare questi file in una cartella locale denominata, ad esempio, C#: \MyLocalFolder\Project

  4. Nell'editor XML, aggiungere il seguente elemento di ProjectBasePath dopo l'elemento di RegisterWithCodebase . Non interrompere la riga che contiene l'elemento di ProjectBasePath .

    <RegisterWithCodebase>true</RegisterWithCodebase>
    <ProjectBasePath>C:\MyLocalFolder\Project</ProjectBasePath>
    
  5. aggiungere il seguente elemento di Import dopo gli elementi esistenti di Import .

    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\VSSDK\Microsoft.VsSDK.targets" />
    <Import Project="$(ProjectBasePath)\ProjectBase.Files" />
    
  6. salvare il file di progetto e chiudere l'editor.

  7. Fare clic con il pulsante destro del mouse sul nodo di SimpleProject quindi fare clic su Progetto di ricaricamento.Esplora soluzioni verrà visualizzata una cartella di ProjectBase .

  8. Fare clic con il pulsante destro del mouse sul nodo di riferimenti e aggiungere i riferimenti seguenti di .NET.

    • EnvDTE (percorso di installazione di Visual Studio\Common7\IDE\PublicAssemblies\EnvDTE dll)

    • Microsoft.VisualStudio.Designer.Interfaces

  9. Nel file di SimpleProjectPackage.cs, aggiungere la seguente istruzione di using dopo le istruzioni esistenti di using .

    using Microsoft.VisualStudio.Package;
    
  10. derivare la classe di SimpleProjectPackage da Microsoft.VisualStudio.Package.ProjectPackage.

    public sealed class SimpleProjectPackage : ProjectPackage
    
  11. Aggiungere la riga seguente al metodo di SimpleProjectPackage.Initialize , subito dopo base.Initialize.

    base.Initialize(); 
    this.RegisterProjectFactory(new SimpleProjectFactory(this));
    
  12. In SimpleProjectFactory.cs, aggiungere la seguente istruzione di using dopo le istruzioni esistenti di using .

    using Microsoft.VisualStudio.Package;
    
  13. derivare la classe di SimpleProjectFactory da ProjectFactory.

    class SimpleProjectFactory : ProjectFactory
    
  14. Aggiungere il seguente metodo fittizio alla classe di SimpleProjectFactory . Verrà implementato questo metodo in una sezione successiva.

    protected override ProjectNode CreateProject() 
    { 
        return null; 
    }
    
  15. Aggiungere il seguente campo e costruttore alla classe di SimpleProjectFactory . Questo riferimento di SimpleProjectPackage viene memorizzato nella cache in un campo privato in modo da poter utilizzare per impostare un sito del provider di servizi.

    private SimpleProjectPackage package; 
    
    public SimpleProjectFactory(SimpleProjectPackage package) 
        : base(package) 
    { 
        this.package = package; 
    }
    
  16. Ricompilare la soluzione e verificare che venga compilato senza errori.

Test dell'implementazione della factory di progetto

Verificare se il costruttore per l'implementazione della factory di progetto viene chiamato.

Per testare l'implementazione della factory di progetto

  1. Nel file di SimpleProjectFactory.cs, impostare un punto di interruzione nella riga seguente nel costruttore di SimpleProjectFactory .

    this.package = package;
    
  2. Premere F5 per avviare un'istanza sperimentale di Visual Studio.

  3. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  4. Nella finestra di dialogo di nuovo progetto , selezionare il tipo di progetto SimpleProject quindi fare clic su OK. Interrotta in corrispondenza del punto di interruzione.

  5. rimuovere il punto di interruzione.

  6. Premere MAIUSC+F5 da interrompere il debug.

Estensione della classe del nodo del progetto

È ora possibile distribuire la classe di SimpleProjectNode , che deriva dalla classe di ProjectNode . La classe base di ProjectNode gestisce le seguenti attività di creazione del progetto:

  • Copiare il file di modello di progetto, SimpleProject.myproj, alla nuova cartella del progetto. La copia viene rinominata in base al nome immesso nella finestra di dialogo di nuovo progetto . Il valore della proprietà di ProjectGuid viene sostituito da un nuovo GUID.

  • Attraversa gli elementi MSBuild del file di modello di progetto, SimpleProject.myproj e cerca gli elementi di Compile . Per ogni file di destinazione di Compile , la copia del file nella nuova cartella del progetto.

La classe derivata di SimpleProjectNode gestisce le seguenti attività:

  • Consente alle icone per i nodi del file e di progetto in Esplora soluzioni essere creato o selezionato.

  • Consente alle sostituzioni dei parametri aggiuntive del modello di progetto da specificare.

Per estendere la classe del nodo del progetto

  1. Fare clic con il pulsante destro del mouse sul nodo del progetto di SimpleProject , scegliere aggiungerequindi fare clic su nuovo elemento. aggiungere classe denominato SimpleProjectNode.cs. Click Add to open the code editor.

  2. Sostituire il codice esistente con quello riportato di seguito.

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

Questa implementazione della classe di SimpleProjectNode presenta i metodi sottoposti a override:

  • ProjectGuid, che restituisce la factory GUID di progetto.

  • ProjectType, che restituisce il nome localizzato del tipo di progetto.

  • AddFileFromTemplate, che le copie selezionate vengono archiviati dalla cartella del modello al progetto di destinazione. Questo metodo viene ulteriormente implementato in una sezione successiva.

Il costruttore di SimpleProjectNode , ad esempio il costruttore di SimpleProjectFactory , la memorizzazione nella cache un riferimento di SimpleProjectPackage in un campo privato per un utilizzo successivo.

Per connettere la classe di SimpleProjectFactory alla classe di SimpleProjectNode , è necessario creare un'istanza di nuovo SimpleProjectNode nel metodo di SimpleProjectFactory.CreateProject e memorizzarlo nella cache in un campo privato per un utilizzo successivo.

Per connettere la classe factory di progetto e il nodo classe

  1. Nel file di SimpleProjectFactory.cs, aggiungere la seguente istruzione di using dopo le istruzioni esistenti di using .

    using IOleServiceProvider =    Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
    
  2. Sostituire il metodo di SimpleProjectFactory.CreateProject tramite il codice seguente.

    protected override ProjectNode CreateProject() 
    { 
        SimpleProjectNode project = new SimpleProjectNode(this.package); 
    
        project.SetSite((IOleServiceProvider)        ((IServiceProvider)this.package).GetService(            typeof(IOleServiceProvider))); 
        return project; 
    }
    
  3. Ricompilare la soluzione e verificare che venga compilato senza errori.

Test della classe del nodo del progetto

Test della factory del progetto per vedere se crea una gerarchia del progetto.

Per testare la classe del nodo del progetto

  1. Premere F5 per avviare un'istanza sperimentale di Visual Studio.

  2. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  3. Nella finestra di dialogo di nuovo progetto , in Visual Studio configura i modelli, SimpleProjectselezionato.

  4. Creare una directory di soluzioneselezionato e tipo MyProject nella casella di Nome .

  5. Digitare un percorso per la soluzione, ad esempio, D:\.

  6. Scegliere OK.

    Visual Studio deve chiamare la factory di progetto per creare un progetto.

  7. chiudere l'istanza sperimentale di Visual Studio.

Aggiunta dell'icona personalizzata del nodo del progetto

L'icona del nodo di progetto nella sezione precedente viene visualizzata l'icona predefinita. È possibile modificarlo in un'icona personalizzata.

Per aggiungere un'icona personalizzata del nodo del progetto

  1. Fare clic con il pulsante destro del mouse sulla cartella di risorse , scegliere aggiungerequindi fare clic su nuovo elemento. aggiungere file bitmap denominato SimpleProjectNode.bmp. Fare clic su Aggiungi per aprire l'editor di codice.

  2. Nelle finestre di Proprietà , ridurre la bitmap a 16 per 16 pixel. rendere la bitmap distintiva.

    Comando Progetto semplice

  3. Nella finestra di Proprietà , modificare operazione di compilazione della bitmap risorsa incorporata.

  4. In SimpleProjectNode.cs, aggiungere le seguenti istruzioni di using dopo le istruzioni esistenti di using .

    using System.Drawing; 
    using System.Windows.Forms;
    
  5. Aggiungere il seguente campo e costruttori statici alla classe di SimpleProjectNode .

    private static ImageList imageList; 
    
    static SimpleProjectNode() 
    { 
        imageList =        Utilities.GetImageList(            typeof(SimpleProjectNode).Assembly.GetManifestResourceStream(                "Company.SimpleProject.Resources.SimpleProjectNode.bmp")); 
    }
    
  6. Aggiungere la seguente proprietà all'inizio della classe di SimpleProjectNode .

    internal static int imageIndex; 
       public override int ImageIndex 
       { 
           get { return imageIndex; } 
       }
    
  7. Sostituire il costruttore di istanza utilizzando il codice seguente.

    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 costruzione statica, SimpleProjectNode recupera la bitmap il nodo di progetto dalle risorse del manifesto assembly e la memorizzazione nella cache in un campo privato per un utilizzo successivo. Si noti la sintassi Assembly.GetManifestResourceStream del percorso di un'immagine. Per visualizzare i nomi di risorsa di manifesto incorporate in un assembly, utilizzare Assembly.GetManifestResourceNames il metodo. Quando questo metodo viene applicato all'assembly di SimpleProject , i risultati saranno simili ai seguenti:

  • 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 la costruzione di istanza, i caricamenti di classe base di ProjectNode Resources.imagelis.bmp, in cui sono incorporate 16 di uso comune x 16 bit destinato alle risorse \ imagelis.bmp. Questo elenco bitmap viene reso disponibile di SimpleProjectNode come ImageHandler.ImageList. SimpleProjectNode collega la bitmap il nodo di progetto all'elenco. L'offset della bitmap il nodo di progetto nell'elenco immagini viene memorizzata nella cache per un utilizzo successivo come valore della proprietà pubblica di ImageIndex . Visual Studio utilizza questa proprietà per determinare la bitmap da visualizzare come l'icona del nodo del progetto.

Verificare l'icona personalizzata del nodo del progetto

Test della factory del progetto per vedere se crea una gerarchia del progetto con l'icona personalizzata del nodo del progetto.

Per verificare l'icona personalizzata del nodo del progetto

  1. Eliminare la soluzione MyProject.

  2. Premere F5 per avviare un'istanza sperimentale di Visual Studio.

  3. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  4. Nella finestra di dialogo di nuovo progetto , in Visual Studio configura i modelli, SimpleProjectselezionato.

  5. Creare una directory di soluzioneselezionato e tipo MyProject nella casella di Nome .

  6. Digitare un percorso per la soluzione, ad esempio, D:\.

  7. Scegliere OK.

    Visual Studio deve creare un progetto. Si noti che SimpleProjectNode.bmp viene utilizzato come l'icona del nodo del progetto.

    Progetto semplice, nuovo nodo di progetto

  8. Aprire Program.cs nell'editor di codice. Viene visualizzato il codice sorgente che è simile al codice seguente.

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

    Si noti che i parametri di modello $nameSpace$ e $className$ non hanno nuovi valori. È possibile distribuire la sostituzione dei parametri di modello nella sezione successiva.

  9. Premere MAIUSC+F5 da interrompere il debug.

Sostituzione dei parametri di modello

In una sezione precedente, è stato registrato il modello di progetto in Visual Studio utilizzando l'attributo di ProvideProjectFactory . Registrare il percorso della cartella del modello in questo modo consente di attivare la sostituzione dei parametri di modello di base override ed espandendo la classe di ProjectNode.AddFileFromTemplate . Per ulteriori informazioni, vedere nuova generazione di progetto: Nel the hood, inclusi due.

Per sostituire i valori dei parametri di modello $nameSpace$ e $className$ in Program.cs archiviare il modello, è necessario aggiungere il codice alla classe di AddFileFromTemplate .

Per sostituire i parametri di modello

  1. Nel file di SimpleProjectPackage.cs, aggiungere la seguente istruzione di using dopo le istruzioni esistenti di using .

    using System.IO;
    
  2. Sostituire il metodo di AddFileFromTemplate tramite il codice seguente.

    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. Impostare un punto di interruzione nel metodo, subito dopo l'istruzione di assegnazione di className .

Le istruzioni di assegnazione consentono di determinare i valori accettabili per uno spazio dei nomi e un nuovo nome della classe. Le due chiamate al metodo di ProjectNode.FileTemplateProcessor.AddReplace sostituiscono i valori di parametro di modello corrispondenti mediante questi nuovi valori.

Test della sostituzione dei parametri di modello

Test della factory del progetto per vedere se crea una gerarchia del progetto con l'icona personalizzata del nodo del progetto.

Per testare la sostituzione dei parametri di modello

  1. Eliminare la soluzione MyProject.

  2. Premere F5 per avviare un'istanza sperimentale di Visual Studio.

  3. Scegliere Nuovo dal menu File, quindi fare clic su Progetto.

  4. Nella finestra di dialogo di nuovo progetto , in Visual Studio configura i modelli, SimpleProjectselezionato.

  5. Creare una directory di soluzioneselezionato e tipo MyProject nella casella di Nome .

  6. Digitare un percorso per la soluzione, ad esempio, D:\.

  7. Scegliere OK.

    L'esecuzione si ferma in corrispondenza del punto di interruzione nel metodo AddFileFromTemplate.

  8. esaminare i valori per i parametri di className e di nameSpace .

    • nameSpace viene fornito il valore dell'elemento di <La directory> nel file di modello di progetto di \Templates\Projects\SimpleProject\SimpleProject .myproj. in questo caso, il valore è “MyRootNamespace„.

    • className viene fornito il valore del nome file di origine della classe, senza estensione. In questo caso, il primo file da copiare nella cartella di destinazione è AssemblyInfo.cs; pertanto, il valore di è “nomeclasse AssemblyInfo„.

  9. Rimuovere il punto di interruzione e premere F5 per continuare l'esecuzione.

    Visual Studio deve completare per creare un progetto.

  10. Aprire Program.cs nell'editor di codice. Viene visualizzato il codice sorgente che è simile al codice seguente.

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

    Si noti che allo spazio dei nomi è ora “MyRootNamespace„ e il nome della classe è ora “programma„.

  11. Nell'istanza sperimentale di Visual Studio premere F5. Il nuovo progetto dovrebbe essere compilato, eseguire e visualizzare “hello VSX! " hello!„ nella finestra della console.

    Comando Progetto semplice

A questo punto il processo di aggiornamento è terminato. È stato distribuito un sistema di progetto gestito di base.

Vedere anche

Concetti

In Visual Studio SDK

Altre risorse

Procedure dettagliate per personalizzare Visual Studio tramite package VS.

Cliente di personalizzazione di un VSPackage