Aracılığıyla paylaş


Sihirbazları proje şablonlarıyla kullanma

Visual Studio, uygulandığında kullanıcı şablondan proje oluşturduğunda özel kod çalıştırmanızı sağlayan arabirimi sağlar IWizard .

Proje şablonu özelleştirmesi, şablonu özelleştirmek, şablona ek dosyalar eklemek veya bir projede izin verilen başka bir eylem için kullanıcı girişi toplayan özel kullanıcı arabirimini görüntülemek için kullanılabilir.

Kullanıcı IWizard Yeni Proje iletişim kutusunda Tamam'a tıklar tıklamaz başlayarak, proje oluşturulurken arabirim yöntemleri çeşitli zamanlarda çağrılır. Arabirimin her yöntemi, çağrıldığı noktayı açıklamak için adlandırılır. Örneğin, Visual Studio projeyi oluşturmaya başladığında hemen çağırır RunStarted ve kullanıcı girişi toplamak için özel kod yazmak için iyi bir konum haline getirir.

VSIX projesiyle proje şablonu projesi oluşturma

Visual Studio SDK'sının parçası olan proje şablonu projesiyle özel şablon oluşturmaya başlarsınız. Bu yordamda bir C# proje şablonu projesi kullanacağız, ancak bir Visual Basic proje şablonu projesi de var. Ardından, proje şablonu projesini içeren çözüme bir VSIX projesi eklersiniz.

  1. C# proje şablonu projesi oluşturun (Visual Studio'da Dosya Yeni>Proje'yi seçin >ve "proje şablonu" araması yapın). MyProjectTemplate olarak adlandır.

    Not

    Visual Studio SDK'sını yüklemeniz istenebilir. Daha fazla bilgi için bkz . Visual Studio SDK'sını yükleme.

  2. Proje şablonu projesiyle aynı çözüme yeni bir VSIX projesi ekleyin (Çözüm Gezgini çözüm düğümünü seçin, sağ tıklayın ve Yeni Proje Ekle'yi>seçin ve "vsix" araması yapın). MyProjectWizard olarak adlandır.

  3. VSIX projesini başlangıç projesi olarak ayarlayın. Çözüm Gezgini VSIX proje düğümünü seçin, sağ tıklayın ve Başlangıç Projesi Olarak Ayarla'yı seçin.

  4. Şablon projesini VSIX projesinin varlığı olarak ekleyin. Çözüm Gezgini,VSIX proje düğümü altında source.extension.vsixmanifest dosyasını bulun. Bildirim düzenleyicisinde açmak için çift tıklayın.

  5. Bildirim düzenleyicisinde pencerenin sol tarafındaki Varlıklar sekmesini seçin.

  6. Varlıklar sekmesinde Yeni'yi seçin. Yeni Varlık Ekle penceresinde, Tür alanı için Microsoft.VisualStudio.ProjectTemplate öğesini seçin. Kaynak alanında Geçerli çözümde bir proje'yi seçin. Proje alanında MyProjectTemplate öğesini seçin. Daha sonra, Tamam'a tıklayın.

  7. Çözümü derleyin ve hata ayıklamaya başlayın. Visual Studio'nun ikinci bir örneği görüntülenir. (Bu işlem birkaç dakika sürebilir.)

  8. Visual Studio'nun ikinci örneğinde, yeni şablonunuzla yeni bir proje oluşturmayı deneyin (Dosya>Yeni>Proje, "myproject" araması yapın). Yeni proje Class1 adlı bir sınıfla görünmelidir. Şimdi özel bir proje şablonu oluşturdunuz! Hata ayıklamayı şimdi durdurun.

Özel şablon oluşturma sihirbazı

Bu yordam, proje oluşturulmadan önce bir Windows Formu açan özel bir sihirbazın nasıl oluşturulacağını gösterir. Form, kullanıcıların proje oluşturma sırasında kaynak koda eklenen özel bir parametre değeri eklemesine olanak tanır.

  1. VSIX projesini bir derleme oluşturmasına izin verecek şekilde ayarlayın.

  2. Çözüm Gezgini'da VSIX proje düğümünü seçin. Çözüm Gezgini altında Özellikler penceresini görmeniz gerekir. Bunu yapmazsanız, Görünüm Özellikleri Penceresi'ni seçin> veya F4 tuşuna basın. Özellikler penceresinde aşağıdaki alanları trueseçin:

    • VSIX Kapsayıcısında Derlemeyi Dahil Et

    • Yerel VSIX Dağıtımında Hata Ayıklama Simgeleri Ekleme

    • VSIX Kapsayıcısında Hata Ayıklama Simgeleri Ekleme

  3. Derlemeyi VSIX projesine varlık olarak ekleyin. source.extension.vsixmanifest dosyasını açın ve Varlıklar sekmesini seçin. Yeni Varlık Ekle penceresinde, Tür için Microsoft.VisualStudio.Assembly'ı seçin, Kaynak için Geçerli çözümde bir proje'yi seçin ve Project için MyProjectWizard'ı seçin.

  4. VSIX projesine aşağıdaki başvuruları ekleyin. (In Çözüm Gezgini VSIX proje düğümü altında Başvurular'ı seçin, sağ tıklayın ve Başvuru Ekle'yi seçin.) Başvuru Ekle iletişim kutusundaki Çerçeve sekmesinde System.Windows Forms derlemesini bulun ve seçin. Ayrıca System ve System.Drawing derlemelerini bulun ve seçin. Şimdi Uzantılar sekmesini seçin. EnvDTE derlemesini bulun ve seçin. Ayrıca Microsoft.VisualStudio.TemplateWizardInterface derlemesini bulun ve seçin. Tamam'a tıklayın.

  5. VSIX projesine sihirbaz uygulaması için bir sınıf ekleyin. (In Çözüm Gezgini VSIX proje düğümüne sağ tıklayın ve Ekle'yi, ardından Yeni Öğe'yi ve ardından Sınıf'ı seçin.) Sınıfına WizardImplementation adını verin.

  6. WizardImplementationClass.cs dosyasındaki kodu aşağıdaki kodla değiştirin:

    using System;
    using System.Collections.Generic;
    using Microsoft.VisualStudio.TemplateWizard;
    using System.Windows.Forms;
    using EnvDTE;
    
    namespace MyProjectWizard
    {
        public class WizardImplementation:IWizard
        {
            private UserInputForm inputForm;
            private string customMessage;
    
            // This method is called before opening any item that
            // has the OpenInEditor attribute.
            public void BeforeOpeningFile(ProjectItem projectItem)
            {
            }
    
            public void ProjectFinishedGenerating(Project project)
            {
            }
    
            // This method is only called for item templates,
            // not for project templates.
            public void ProjectItemFinishedGenerating(ProjectItem
                projectItem)
            {
            }
    
            // This method is called after the project is created.
            public void RunFinished()
            {
            }
    
            public void RunStarted(object automationObject,
                Dictionary<string, string> replacementsDictionary,
                WizardRunKind runKind, object[] customParams)
            {
                try
                {
                    // Display a form to the user. The form collects
                    // input for the custom message.
                    inputForm = new UserInputForm();
                    inputForm.ShowDialog();
    
                    customMessage = UserInputForm.CustomMessage;
    
                    // Add custom parameters.
                    replacementsDictionary.Add("$custommessage$",
                        customMessage);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
    
            // This method is only called for item templates,
            // not for project templates.
            public bool ShouldAddProjectItem(string filePath)
            {
                return true;
            }
        }
    }
    

    Bu kodda başvuruda bulunılan UserInputForm daha sonra uygulanacaktır.

    sınıfı, öğesinin WizardImplementation her üyesi IWizardiçin yöntem uygulamaları içerir. Bu örnekte, yalnızca RunStarted yöntemi bir görev gerçekleştirir. Diğer tüm yöntemler hiçbir şey yapmaz veya döndürür true.

    RunStarted yöntemi dört parametre kabul eder:

    • Object Projeyi özelleştirmenizi sağlamak için kök _DTE nesneye yayınlanabilir bir parametre.

    • Dictionary<TKey,TValue> Şablondaki tüm önceden tanımlanmış parametrelerin koleksiyonunu içeren bir parametre. Şablon parametreleri hakkında daha fazla bilgi için bkz . Şablon parametreleri.

    • WizardRunKind Kullanılan şablon türü hakkında bilgi içeren bir parametre.

    • Object Visual Studio tarafından sihirbaza geçirilen parametre kümesini içeren bir dizi.

      Bu örnek, kullanıcı giriş formundan parametresine Dictionary<TKey,TValue> bir parametre değeri ekler. Projedeki parametrenin $custommessage$ her örneği, kullanıcı tarafından girilen metinle değiştirilir.

  7. Şimdi UserInputForm'u oluşturun. WizardImplementation.cs dosyasında, sınıfın sonundan WizardImplementation sonra aşağıdaki kodu ekleyin.

    public partial class UserInputForm : Form
        {
            private static string customMessage;
            private TextBox textBox1;
            private Button button1;
    
            public UserInputForm()
            {
                this.Size = new System.Drawing.Size(155, 265);
    
                button1 = new Button();
                button1.Location = new System.Drawing.Point(90, 25);
                button1.Size = new System.Drawing.Size(50, 25);
                button1.Click += button1_Click;
                this.Controls.Add(button1);
    
                textBox1 = new TextBox();
                textBox1.Location = new System.Drawing.Point(10, 25);
                textBox1.Size = new System.Drawing.Size(70, 20);
                this.Controls.Add(textBox1);
            }
            public static string CustomMessage
            {
                get
                {
                    return customMessage;
                }
                set
                {
                    customMessage = value;
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                customMessage = textBox1.Text;
                this.Close();
            }
        }
    

    Kullanıcı giriş formu, özel parametre girmek için basit bir form sağlar. Formda adlı bir metin kutusu ve adlı textBox1 button1bir düğme bulunur. Düğmeye tıklandığında, metin kutusundaki metin parametresinde customMessage depolanır.

Sihirbazı özel şablona Bağlan

Özel proje şablonunuzun özel sihirbazınızı kullanabilmesi için sihirbaz derlemesini imzalamanız ve yeni bir proje oluşturulduğunda sihirbaz uygulamasını nerede bulacağını bilmesi için özel proje şablonunuza bazı satırlar eklemeniz gerekir.

  1. Derlemeyi imzalayın. Çözüm Gezgini VSIX projesini seçin, sağ tıklayın ve Proje Özellikleri'ni seçin.

  2. Proje Özellikleri penceresinde İmzalama sekmesini seçin. İmzalama sekmesinde Derlemeyi imzalama'yı işaretleyin. Tanımlayıcı ad anahtarı dosyası seçin alanında Yeni'yi> seçin<. Tanımlayıcı Ad Anahtarı Oluştur penceresindeki Anahtar dosyası adı alanına key.snk yazın. Anahtar dosyamı parolayla koru alanının işaretini kaldırın.

  3. Çözüm Gezgini VSIX projesini seçin ve Özellikler penceresini bulun.

  4. Derleme Çıktısını Çıkış Dizinine Kopyala alanını true olarak ayarlayın. Bu, çözüm yeniden oluşturulduğunda derlemenin çıkış dizinine kopyalanmasına olanak tanır. Dosyada .vsix hala yer alır. İmzalama anahtarını bulmak için derlemeyi görmeniz gerekir.

  5. Çözümü yeniden oluşturun.

  6. Artık key.snk dosyasını MyProjectWizard proje dizininde (<disk konumunuz>\MyProjectTemplate\MyProjectWizard\key.snk) bulabilirsiniz. key.snk dosyasını kopyalayın.

  7. Çıkış dizinine gidin ve derlemeyi bulun (<disk konumunuz>\MyProjectTemplate/MyProjectWizard\bin\Debug\MyProjectWizard.dll). key.snk dosyasını buraya yapıştırın. (Bu kesinlikle gerekli değildir, ancak aşağıdaki adımları kolaylaştıracaktır.)

  8. Bir komut penceresi açın ve derlemenin oluşturulduğu dizine geçin.

  9. sn.exe imzalama aracını bulun. Örneğin, Windows 10 64 bit işletim sisteminde tipik bir yol aşağıdaki gibi olabilir:

    C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Araçları

    Aracı bulamıyorsanız komut penceresinde /R . sn.exe dosyasını çalıştırmayı deneyin. Yolu not edin.

  10. key.snk dosyasından ortak anahtarı ayıklayın. Komut penceresine

    <sn.exe>\sn.exe -p key.snk outfile.key konumu.

    Dizin adlarında boşluklar varsa sn.exe yolunu tırnak işaretleri ile çevrelediğini unutmayın!

  11. Outfile dosyasından ortak anahtar belirtecini alın:

    <sn.exe>\sn.exe -t outfile.key konumu.

    Tırnak işaretlerini de unutmayın. Çıktıda bunun gibi bir satır görmeniz gerekir

    Ortak anahtar belirteci belirteçtir <>

    Bu değeri not edin.

  12. Özel sihirbaza başvuruyu proje şablonunun .vstemplate dosyasına ekleyin. Çözüm Gezgini MyProjectTemplate.vstemplate adlı dosyayı bulun ve açın. TemplateContent> bölümünün sonundan <sonra aşağıdaki bölümü ekleyin:

    <WizardExtension>
        <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=token</Assembly>
        <FullClassName>MyProjectWizard.WizardImplementation</FullClassName>
    </WizardExtension>
    

    Burada MyProjectWizard derlemenin adı, belirteç ise önceki adımda kopyaladığınız belirteçtir.

  13. Projedeki tüm dosyaları kaydedin ve yeniden oluşturun.

Özel parametreyi şablona ekleme

Bu örnekte, şablon olarak kullanılan proje, özel sihirbazın kullanıcı giriş formunda belirtilen iletiyi görüntüler.

  1. Çözüm Gezgini MyProjectTemplate projesine gidin ve Class1.cs dosyasını açın.

  2. Main Uygulamanın yöntemine aşağıdaki kod satırını ekleyin.

    Console.WriteLine("$custommessage$");
    

    parametresi $custommessage$ , şablondan bir proje oluşturulduğunda kullanıcı giriş formuna girilen metinle değiştirilir.

Şablona aktarılamadan önce tam kod dosyası aşağıda verilmiştir.

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;

namespace $safeprojectname$
{
    public class Class1
    {
          static void Main(string[] args)
          {
               Console.WriteLine("$custommessage$");
          }
    }
}

Özel sihirbazı kullanma

Artık şablonunuzdan bir proje oluşturabilir ve özel sihirbazı kullanabilirsiniz.

  1. Çözümü yeniden derleyin ve hata ayıklamaya başlayın. Visual Studio'nun ikinci bir örneği görünmelidir.

  2. Yeni bir MyProjectTemplate projesi oluşturun. (Dosya>Yeni>Proje).

  3. Yeni Proje iletişim kutusunda, şablonunuzu bulmak için "myproject" araması yapın, bir ad yazın ve Tamam'a tıklayın.

    Sihirbaz kullanıcı giriş formu açılır.

  4. Özel parametre için bir değer yazın ve düğmeye tıklayın.

    Sihirbaz kullanıcı giriş formu kapatılır ve şablondan bir proje oluşturulur.

  5. Çözüm Gezgini kaynak kod dosyasına sağ tıklayın ve Kodu Görüntüle'ye tıklayın.

    Sihirbaz $custommessage$ kullanıcı giriş formuna girilen metinle değiştirildiğine dikkat edin.