Menggunakan wizard dengan templat proyek
Visual Studio menyediakan IWizard antarmuka yang, saat diimplementasikan, memungkinkan Anda menjalankan kode kustom saat pengguna membuat proyek dari templat.
Kustomisasi templat proyek dapat digunakan untuk menampilkan UI kustom yang mengumpulkan input pengguna untuk menyesuaikan templat, menambahkan file tambahan ke templat, atau tindakan lain yang diizinkan pada proyek.
Metode IWizard antarmuka dipanggil pada berbagai waktu saat proyek sedang dibuat, dimulai segera setelah pengguna mengklik OK pada kotak dialog Proyek Baru. Setiap metode antarmuka diberi nama untuk menggambarkan titik di mana antarmuka dipanggil. Misalnya, Visual Studio segera memanggil RunStarted ketika mulai membuat proyek, menjadikannya lokasi yang baik untuk menulis kode kustom untuk mengumpulkan input pengguna.
Anda mulai membuat templat kustom dengan proyek templat proyek, yang merupakan bagian dari Visual Studio SDK. Dalam prosedur ini, kita akan menggunakan proyek templat proyek C#, tetapi ada juga proyek templat proyek Visual Basic. Kemudian Anda menambahkan proyek VSIX ke solusi yang berisi proyek templat proyek.
Buat proyek templat proyek C# (di Visual Studio, pilih File>Proyek Baru>dan cari "templat proyek"). Beri nama MyProjectTemplate.
Catatan
Anda mungkin diminta untuk menginstal Visual Studio SDK. Untuk informasi selengkapnya, lihat Menginstal Visual Studio SDK.
Tambahkan proyek VSIX baru dalam solusi yang sama dengan proyek templat proyek (dalam Penjelajah Solusi, pilih node solusi, klik kanan, dan pilih Tambahkan>Proyek Baru dan cari "vsix"). Beri nama MyProjectWizard.
Atur proyek VSIX sebagai proyek startup. Di Penjelajah Solusi, pilih simpul proyek VSIX, klik kanan, dan pilih Atur sebagai Proyek Startup.
Tambahkan proyek templat sebagai aset proyek VSIX. Di Penjelajah Solusi, di bawah simpul proyek VSIX, temukan file source.extension.vsixmanifest. Klik dua kali untuk membukanya di editor manifes.
Di editor manifes, pilih tab Aset di sisi kiri jendela.
Di tab Aset , pilih Baru. Di jendela Tambahkan Aset Baru, untuk bidang Jenis, pilih Microsoft.VisualStudio.ProjectTemplate. Di bidang Sumber, pilih Proyek dalam solusi saat ini. Di bidang Proyek, pilih MyProjectTemplate. Lalu klik OK.
Bangun solusi dan mulai penelusuran kesalahan. Instans kedua Visual Studio muncul. (Proses ini memerlukan waktu beberapa menit.)
Dalam instans kedua Visual Studio, coba buat proyek baru dengan templat baru Anda (File>Proyek Baru>, cari "myproject"). Proyek baru akan muncul dengan kelas bernama Class1. Anda sekarang telah membuat templat proyek kustom! Hentikan penelusuran kesalahan sekarang.
Prosedur ini memperlihatkan cara membuat wizard kustom yang membuka Formulir Windows sebelum proyek dibuat. Formulir ini memungkinkan pengguna untuk menambahkan nilai parameter kustom yang ditambahkan ke kode sumber selama pembuatan proyek.
Siapkan proyek VSIX untuk memungkinkannya membuat rakitan.
Di Penjelajah Solusi, pilih simpul proyek VSIX. Di bawah Penjelajah Solusi, Anda akan melihat jendela Properti. Jika tidak, pilih Tampilkan>Jendela Properti, atau tekan F4. Di jendela Properti , pilih bidang berikut ini untuk
true
:Sertakan Assembly dalam Kontainer VSIX
Sertakan Simbol Debug dalam Penyebaran VSIX Lokal
Sertakan Simbol Debug dalam Kontainer VSIX
Tambahkan assembly sebagai aset ke proyek VSIX. Buka file source.extension.vsixmanifest dan pilih tab Aset. Di jendela Tambahkan Aset Baru, untuk Jenis pilih Microsoft.VisualStudio.Assembly, untuk Sumber pilih Proyek dalam solusi saat ini, dan untuk Proyek pilih MyProjectWizard.
Tambahkan referensi berikut ke proyek VSIX. (Dalam Penjelajah Solusi, di bawah simpul proyek VSIX, pilih Referensi, klik kanan, dan pilih Tambahkan Referensi.) Dalam dialog Tambahkan Referensi, di tab Kerangka Kerja, temukan perakitan System.Formulir Windows dan pilih. Temukan juga dan pilih rakitan System and System.Drawing . Sekarang pilih tab Ekstensi . Temukan rakitan EnvDTE dan pilih. Temukan juga rakitan Microsoft.VisualStudio.TemplateWizardInterface dan pilih. Klik OK.
Tambahkan kelas untuk implementasi wizard ke proyek VSIX. (Dalam Penjelajah Solusi, klik kanan simpul proyek VSIX dan pilih Tambahkan, lalu Item Baru, lalu Kelas.) Beri nama kelas WizardImplementation.
Ganti kode dalam file WizardImplementationClass.cs dengan kode berikut:
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; } } }
UserInputForm yang direferensikan dalam kode ini akan diimplementasikan nanti.
Kelas
WizardImplementation
berisi implementasi metode untuk setiap anggota IWizard. Dalam contoh ini, hanya metode yang RunStarted melakukan tugas. Semua metode lain tidak melakukan apa pun atau mengembalikantrue
.Metode RunStarted ini menerima empat parameter:
Parameter Object yang dapat ditransmisikan ke objek akar _DTE , untuk memungkinkan Anda menyesuaikan proyek.
Parameter Dictionary<TKey,TValue> yang berisi kumpulan semua parameter yang telah ditentukan sebelumnya dalam templat. Untuk informasi selengkapnya tentang parameter templat, lihat Parameter templat.
Parameter WizardRunKind yang berisi informasi tentang jenis templat apa yang digunakan.
Array Object yang berisi sekumpulan parameter yang diteruskan ke wizard oleh Visual Studio.
Contoh ini menambahkan nilai parameter dari formulir input pengguna ke Dictionary<TKey,TValue> parameter . Setiap instans
$custommessage$
parameter dalam proyek akan diganti dengan teks yang dimasukkan oleh pengguna.
Sekarang buat UserInputForm. Dalam file WizardImplementation.cs, tambahkan kode berikut setelah akhir
WizardImplementation
kelas.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(); } }
Formulir input pengguna menyediakan formulir sederhana untuk memasukkan parameter kustom. Formulir berisi kotak teks bernama
textBox1
dan tombol bernamabutton1
. Saat tombol diklik, teks dari kotak teks disimpan dalamcustomMessage
parameter .
Agar templat proyek kustom Anda menggunakan wizard kustom, Anda perlu menandatangani perakitan wizard dan menambahkan beberapa baris ke templat proyek kustom Anda untuk memberi tahu tempat menemukan implementasi wizard saat proyek baru dibuat.
Tanda tangani assembly. Di Penjelajah Solusi, pilih proyek VSIX, klik kanan, dan pilih Properti Proyek.
Di jendela Properti Proyek, pilih tab Penandatanganan . di tab Penandatanganan , centang Tanda tangani rakitan. Di bidang Pilih file kunci nama yang kuat, pilih <Baru>. Di jendela Buat Kunci Nama Kuat, di bidang Nama file kunci, ketik key.snk. Hapus centang pada bidang Lindungi file kunci saya dengan kata sandi .
Di Penjelajah Solusi, pilih proyek VSIX dan temukan jendela Properti.
Atur bidang Salin Output Build ke Direktori Output ke true. Ini memungkinkan perakitan disalin ke direktori output ketika solusi dibangun kembali. Ini masih terkandung dalam
.vsix
file. Anda perlu melihat assembly untuk mengetahui kunci penandatanganannya.Bangun kembali solusinya.
Anda sekarang dapat menemukan file key.snk di direktori proyek MyProjectWizard (<lokasi> disk Anda\MyProjectTemplate\MyProjectWizard\key.snk). Salin file key.snk.
Buka direktori output dan temukan rakitan (<lokasi> disk Anda\MyProjectTemplate/MyProjectWizard\bin\Debug\MyProjectWizard.dll). Tempelkan file key.snk di sini. (Ini tidak benar-benar diperlukan, tetapi akan membuat langkah-langkah berikut lebih mudah.)
Buka jendela perintah, dan ubah ke direktori tempat assembly telah dibuat.
Temukan alat penandatanganan sn.exe. Misalnya, pada sistem operasi Windows 10 64-bit, jalur umumnya adalah sebagai berikut:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools
Jika Anda tidak dapat menemukan alat ini, coba jalankan di mana /R . sn.exe di jendela perintah. Catat jalurnya.
Ekstrak kunci publik dari file key.snk . Di jendela perintah, ketik
<lokasi sn.exe>\sn.exe -p key.snk outfile.key.
Jangan lupa untuk mengelilingi jalur sn.exe dengan tanda kutip jika ada spasi dalam nama direktori!
Dapatkan token kunci publik dari outfile:
<lokasi sn.exe>\sn.exe -t outfile.key.
Sekali lagi, jangan lupa tanda kutip. Anda akan melihat baris dalam output seperti ini
Token kunci publik adalah <token>
Mencatat nilai ini.
Tambahkan referensi ke wizard kustom ke file .vstemplate templat proyek. Di Penjelajah Solusi, temukan file bernama MyProjectTemplate.vstemplate, dan buka. Setelah akhir bagian <TemplateContent> , tambahkan bagian berikut:
<WizardExtension> <Assembly>MyProjectWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=token</Assembly> <FullClassName>MyProjectWizard.WizardImplementation</FullClassName> </WizardExtension>
Di mana MyProjectWizard adalah nama assembly, dan token adalah token yang Anda salin di langkah sebelumnya.
Simpan semua file dalam proyek dan bangun ulang.
Dalam contoh ini, proyek yang digunakan sebagai templat menampilkan pesan yang ditentukan dalam formulir input pengguna wizard kustom.
Di Penjelajah Solusi, buka proyek MyProjectTemplate dan buka Class1.cs.
Main
Dalam metode aplikasi, tambahkan baris kode berikut.Console.WriteLine("$custommessage$");
Parameter
$custommessage$
diganti dengan teks yang dimasukkan dalam formulir input pengguna saat proyek dibuat dari templat.
Berikut adalah file kode lengkap sebelum diekspor ke templat.
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$");
}
}
}
Sekarang Anda bisa membuat proyek dari templat Anda dan menggunakan wizard kustom.
Bangun kembali solusi dan mulai debugging. Instans kedua Visual Studio akan muncul.
Buat proyek MyProjectTemplate baru. (File>Proyek Baru).>
Dalam kotak dialog Proyek Baru, cari "myproject" untuk menemukan templat Anda, ketik nama, dan klik OK.
Formulir input pengguna wizard terbuka.
Ketik nilai untuk parameter kustom dan klik tombol .
Formulir input pengguna wizard ditutup, dan proyek dibuat dari templat.
Di Penjelajah Solusi, klik kanan file kode sumber dan klik Tampilkan Kode.
Perhatikan bahwa
$custommessage$
telah diganti dengan teks yang dimasukkan dalam formulir input pengguna wizard.