description |
---|
Visual Studio 2019 eklentisini yönetme ve geliştirme |
- Proje içerisindeki komutlar, resimler ve benzeri her bilişen bilgisi burada saklanır
- Tüm bileşenler birbirlerine ve kaynak kodlara guid değerleri ile bağlanır
- Proje içerisinde tek bir vsct dosyası bulunur
- Bileşen arasındaki bağlantılar için değişkenleri tanımlayan guid değerleri kullanılır
- Her guid değeri eşsiz olmak zorundadır
Symbols
alanı içerisinde ilk başta paket guid değeri tanımlanırGuidSymbol
ile paket içerisindeki belirli guidler için alt değerlerIDSymbol
ile tanımlanır- usedList="1" için
IDSymbol
değeri1
olan `usedList="bmpPic1" aynıdır *CmdSet
isimliGuidSymbol
değerleri, komut gruplarını işaretlemek için kullanılır*Images
olarak tanımlananlar ise resimler işaretlerler
- usedList="1" için
- IDSymbol değeri
CommandId
ile bitenler komutların guid değerlerini temsil eder
<Symbols>
<!-- Paket bilgisi tutan değişken. -->
<GuidSymbol name="guidDesignDifferPackage" value="{97999930-ccf3-4150-8507-52957afe824c}" />
<!-- Menü komutlarını bir arada tutmak için kullanılan değişkenler. -->
<GuidSymbol name="guidFile_VSPackageCmdSet" value="{020df2a1-db50-4da9-b02d-429321000270}">
<IDSymbol name="FileContextMenuGroup" value="0x110" />
<IDSymbol name="EditorContextMenuGroup" value="0x120" />
<IDSymbol name="DiffFilesCommandId" value="0x0100" />
<IDSymbol name="CompareHistoryCommandId" value="0x0101" />
<IDSymbol name="DiffContentCommandId" value="0x0102" />
</GuidSymbol>
<!-- Resimleri bağlamak için kullanılan değişkenler. -->
<GuidSymbol name="guidImages" value="{2a122da1-1d9a-48b8-89ff-ee6527567153}">
<!-- Birden fazla resim içeren bir dosyadan istenen sıradaki resmi almak için kullanılır -->
<IDSymbol name="firstImage" value="1" />
<IDSymbol name="bmpDiff" value="2" />
</GuidSymbol>
<!-- İsteğe bağlı sabit değerler de kullanılabildiğinden değişkensiz resim işaretçisi tanımlanabilir -->
<GuidSymbol name="guidImages1" value="{ed02defe-f3bf-4cf7-913b-9772fffe8e26}"></GuidSymbol>
<GuidSymbol name="guidImages2" value="{1dd321f2-63ba-4bff-aee8-6f6d3995c650}"></GuidSymbol>
</Symbols>
- Komutlar
Commands
içerisideGroups
objeleri içindekiGroup
değerleri ile derlenir Group
içerisindekiParent
objelerindakiid
değeri ile komutun nasıl çalışacağını ifade ederizIDM_VS_CTXT_ITEMNODE
ileSolution Explorer
üzerine sağ tıklandığında çıkan menüye eklenen komutlarıIDM_VS_CTXT_CODEWIN
ile editöre sağ tıklandığında çıkan menüdeki komutları- GUIDs and IDs of Visual Studio menus
- IDE-Defined Commands for Extending Project Systems
priority
değeri ile grubun bulunacağı konum belirlenir, düşük değerler daha yukarıya alır
<Groups>
<Group guid="guidFile_VSPackageCmdSet" id="FileContextMenuGroup" priority="0x0400">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE" />
</Group>
<Group guid="guidFile_VSPackageCmdSet" id="EditorContextMenuGroup" priority="0x0300">
<Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_CODEWIN" />
</Group>
</Groups>
- Butonlar
Buttons
alanınaGUID
değer ile eklenir - Buton guid değeri paket guid değeri ile aynı olur
priority
değeri ile butonun bulunacağı konum belirlenir, düşük değerler daha yukarıya alır- Parent alanı ile bağlı olduğu komut butonu guid değeri verilir
- Bu sayede grup üzerindeki komutların davranışlarına uygun konumlanır
IDM_VS_CTXT_ITEMNODE
id değerine sahip komut grubu içinSolution Explorer
üzerine sağ tıklandığında çıkan menüye ekleinir
- Icon alanı ile butonun sağında olan ikon guid ile belirlenir
guid
ile ikon dosyasınaid
ile kaçıncı resmi almak istediğimizi belirtiriz- Resim indeksleri
0
'dan değil1
'den başlar - İkonları tutmak için
Bitmaps
alnında guid değerliBitmap
objeleri kullanılır href
alanı temsil ettiği resim objenin yolunu tutarusedList
ile birden fazla resim içeren objelerden, hangi resimlerin alınacağını söylerizusedList="1"
ile ilk resmi,usedList="1, 2, 3"
ile ilk 3 resmi projeye dahil ederiz
Strings
alanındaButtonText
ise butondaki metni temsil eder
<Buttons>
<Button guid="guidFile_VSPackageCmdSet" id="DiffFilesCommandId" priority="0x0100" type="Button">
<Parent guid="guidFile_VSPackageCmdSet" id="FileContextMenuGroup" />
<Icon guid="guidImages" id="1" />
<Strings>
<ButtonText>Compare with file...</ButtonText>
</Strings>
</Button>
<Button guid="guidFile_VSPackageCmdSet" id="CompareHistoryCommandId" priority="0x0100" type="Button">
<Parent guid="guidFile_VSPackageCmdSet" id="FileContextMenuGroup" />
<Icon guid="guidImages1" id="1" />
<Strings>
<ButtonText>Compare designer file with history...</ButtonText>
</Strings>
</Button>
<Button guid="guidFile_VSPackageCmdSet" id="DiffContentCommandId" priority="0x0100" type="Button">
<Parent guid="guidFile_VSPackageCmdSet" id="EditorContextMenuGroup" />
<Icon guid="guidImages2" id="1" />
<Strings>
<ButtonText>Sort Windows Form Designer Generated Code</ButtonText>
</Strings>
</Button>
</Buttons>
<!-- guidImages değişkeninin GuidSymbol olarak tanımlanmış olmaları gerekmektedir -->
<Bitmaps>
<Bitmap guid="guidImages" href="Resources\DiffFilesCommand.png" usedList="1" />
<Bitmap guid="guidImages1" href="Resources\CompareHistoryCommand.png" usedList="1" />
<Bitmap guid="guidImages2" href="Resources\DiffContentCommand.png" usedList="1" />
</Bitmaps>
- Komutların tetiklenmesi durumunda yapılacak eylemler kaynak kod tarafında
Execute
metodu içerisinde belirlenir - Kaynak koda komutu bağlamak için
CommandSet
ve o küme içerisindekiCommandId
değeri gerekirCommandSet
,vsct
dosyası içerisinde*CmdSet
olarak adlandırılan guid değerini alırCommandId
yukarıdaki guid içerisindeki hedeflenen komutunIDSymbol
değerlerini alır
- Bu işlemi senkronize etmek ve her guid değişikliğinde güncellemekten kurtulmak için
vsct
dosyasına sağ tıklayın veSyncronize code file
butonuna tıklayınPackageGuids
vePackageIds
içeren C#class
objeleri otomatik olarak tanımlacaktır
namespace DesignerDiffer
{
/// <summary>
/// Command handler
/// </summary>
internal sealed class DiffContentCommand
{
/// <summary>
/// Command ID.
/// </summary>
public const int CommandId = PackageIds.DiffContentCommandId;
/// <summary>
/// Command menu group (command set GUID).
/// </summary>
public static readonly Guid CommandSet = PackageGuids.guidFile_VSPackageCmdSet;
/// <summary>
/// VS Package that provides this command, not null.
/// </summary>
private readonly AsyncPackage package;
// ...
}
}