­čĹĘÔÇŹ­čĺ╝ Eklenti Y├Ânetimi | VSIX

Visual Studio 2019 eklentisini y├Ânetme ve geli┼čtirme

ÔŁö .vsct Dosyas─▒ Nedir

  • 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

­čćö GUID De─čerlerini Tan─▒mlama

  • 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─▒r

  • GuidSymbol ile paket i├žerisindeki belirli guidler i├žin alt de─čerler IDSymbol ile tan─▒mlan─▒r

    • usedList="1" i├žin IDSymbol de─čeri 1 olan `usedList="bmpPic1" ayn─▒d─▒r

    • *CmdSet isimli GuidSymbol de─čerleri, komut gruplar─▒n─▒ i┼čaretlemek i├žin kullan─▒l─▒r

    • *Images olarak tan─▒mlananlar ise resimler i┼čaretlerler

  • 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>

­čĹĘÔÇŹ­čĺ╗ Komut Ekleme

  • Komutlar Commands i├žeriside Groups objeleri i├žindeki Group de─čerleri ile derlenir

  • Group i├žerisindeki Parent objelerindaki id de─čeri ile komutun nas─▒l ├žal─▒┼čaca─č─▒n─▒ ifade ederiz

  • 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>

­čöś Buton Ekleme

  • Butonlar Buttons alan─▒na GUID 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├žin Solution 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─▒na id ile ka├ž─▒nc─▒ resmi almak istedi─čimizi belirtiriz

    • Resim indeksleri 0'dan de─čil 1'den ba┼člar

    • ─░konlar─▒ tutmak i├žin Bitmaps aln─▒nda guid de─čerli Bitmap objeleri kullan─▒l─▒r

    • href alan─▒ temsil etti─či resim objenin yolunu tutar

    • usedList ile birden fazla resim i├žeren objelerden, hangi resimlerin al─▒naca─č─▒n─▒ s├Âyleriz

    • usedList="1" ile ilk resmi, usedList="1, 2, 3" ile ilk 3 resmi projeye dahil ederiz

  • Strings alan─▒nda ButtonText 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>

­čöî Kaynak Koda Ba─člama

  • 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├žerisindeki CommandId de─čeri gerekir

    • CommandSet, vsct dosyas─▒ i├žerisinde *CmdSet olarak adland─▒r─▒lan guid de─čerini al─▒r

    • CommandId yukar─▒daki guid i├žerisindeki hedeflenen komutun IDSymbol 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 ve Syncronize code file butonuna t─▒klay─▒n

    • PackageGuids ve PackageIds 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;
ÔÇő
// ...
}
}