Makale Özeti

Bu makalemde sizlerle birlikte uygulama geliştirirken visual studio'ya nasıl add-in yazabileceğimizi inceleyeceğiz. Uygulama geliştirirken zaman kazanmak için veya bilgi kaynağı olarak kullandığınız bazı araçları Visual studio ya add-in yazarak daha rahat erişilebilir hale getirebileceğiniz gibi, kullandığınız bug veya proje yönetim araçlarınıda visual studio içinde bir panelde görebilirsiniz. Makalenin sonunda paylaşacağım bir uygulamamda bir rss in visual studio içinden kullanılabildiğini göreceksiniz.

Makale

Merhabahar,

Bu makalemde sizlerle birlikte uygulama geliştirirken visual studio'ya nasıl add-in yazabileceğimizi inceleyeceğiz. Uygulama geliştirirken zaman kazanmak için veya bilgi kaynağı olarak kullandığınız  bazı araçları Visual studio ya add-in yazarak daha rahat erişilebilir hale getirebileceğiniz gibi, kullandığınız bug veya proje yönetim araçlarınıda visual studio içinde bir panelde görebilirsiniz. Makalenin sonunda paylaşacağım bir uygulamamda bir rss in visual studio içinden kullanılabildiğini göreceksiniz.

Visual Studio'ya Add-in yazmak için yine visual-studio yu kullanmanız gerekmektedir. Bu da sanırım visual studio nun bir kısmının yine visual studio kullanılarak yazıldığı gerçeğine bizi götürmektedir. Yeni bir Add-In projesi oluşturmak için öncelikle yeni proje ekranından Other Project Types > Extensibility altında bulunan Visual Studio Add-in projesini oluşturmanız gerekmektedir.

Yeni projeyi oluşturma aşamasından sonra karşınıza bir wizard gelecektir.

Wizard'ın ilk ekranını next e basarak geçtiğinizde size ilk adımda add-in'i hangi dilde geliştirmek istediğiniz sorulacaktır. Bu makaledeki örneği c# ile geliştireceğimizden bu kısımda c#'ı seçerek devam ediyoruz.

Wizard'ın ikinci adımında ise geliştirmiş olduğunuz add-in in kullanılabileceği platformları seçiyorsunuz. Ben uygulamayı Visual Studio 2008'le geliştirdiğim için karşıma gelen ekranda Visual Studio 2008 gözüküyor. Visual Studio 2008 kurulu değilse bu kısımda sadece Visual Studio 2005 i görebilirsiniz.

Wizard 3. aşamada bizden geliştireceğimiz Add-in için bir isim ve bir açıklama girmemizi istiyor. Örnek olarak bu makalede yazgeliştirin rss servislerini okuyan bir add-in yazacağımızdan bu alanları bu şekilde dolduruyorum. Bu bilgileri doldurduktan sonra next'e tıklayabiliriz.

Wizard'ın 4. aşamasında bizden add-in le ilgili davranış şeklini belirlememizi istiyor. Bu kısımda bize Add-In imiz için Visual Studio içinde bulunan menü'de bir sekme olup olmayacağı, Add-in in Visual Studio başlar başlamaz çalışıp öalışmayacağı ve Add-in in görsel ekranlardan oluşup oluşmadığı bilgileri soruluyor. Bu kısımdan uygun seçenekleri seçtikten sonra next'e tıklayarak devam edebiliriz.

Sonraki ekranda geliştirdiğimiz add-in için bir hakkında penceresi olup olmayacağı, eğer olacak ise içeriğinin ne şekilde olacağı soruluyor. Bu kısmıda isteğimiz dahilinde doldurabiliriz.

Ve karşımıza son ekran geliyor.Bu ekranda yaptığımız seçimlerin bir özetini bulabilirsiniz. Finish'e tıklayarak add-inimizi yazmaya başlayabiliriz.

Finish'e bastıktan sonra add-in projemiz oluşturuluyor. Bu oluşturma işlemi sırasında Visual Studio seçimlerimize göre bazı referansları projemize eklemekte ve bazı class dosyalarının içeriğini bu şekilde doldurmaktadır. Şimdi oluşan bu projede bulunan dosyaları ve class dosyalarının içerisinde bulunan metodların ve event'ların ne iş yapmakla yükümlü olduklarını inceleyelim.

 

AssemblyInfo.cs Asembly bilgilerinin tutulduğu dosyadır. Her projede bulunan dosya ile aynı yapıdadır.
CommandBar.resx Menüde gözükmesini seçtiğiniz add'in lerin farklı dillerde kurulmuş Visual Studio'lar için multilanguage desteği sağlamasına yarayan  name value değerlerini tutar.
Connect.cs Add-in'imizi yazarken en çok kullanacağımız dosyadır.Bu class IDTeExtensibility2 class'ından inherit olur ve add-in özelliğini projemize katar. Bu dosyanın içeriğini biraz sonra inceleyeceğiz.
*.AddIn Bu dosyalar wizard'da oluşturduğumuz ayarların tutulduğu XML yapıdaki dosyalardır. Manual olarak değiştirmemize gerek yoktur.

Şimdi en önemli dosya olduğunu söylediğimiz Connect.cs class file'ının içerisini inceleyelim.

Connect() : Bu constructor, add-in nesnesininin initialize olması sırasında çalışmaktadır. Add-in initialize olurken kullanmak istediğiniz kodları bu kısma yazmanız gerekmektedir.

OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom) : Add'in yüklenirken bir işlem yapmak istiyorsanız bu metodun içine yazmanız gerekmektedir. Örneğin add-in'imizi oluştururken Menü'de yer almasını isteseydik. İstediğimiz item'ları menüye bu kısımda eklememiz gerekecekti. Veya yeni add-in in her kısmında geçerli olan bir nesne oluşturuyorsak bu kısımda oluşturmamız mantıklı olacaktır. Parameterelere bakacak olursak application bize add-in i çalıştıran uygulamaya, connectMode ise add-in'in AfterStartUp, CommandLine, External, Solution, Startup, UISetup şekillerinden hangisinde yüklendiğine, addInINst ise add-in hakkında bilgi veren nesnelerdir. Örnek üzerinde nasıl kullanıldıklarını daha detaylı inceleyeceğiz.

OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) : Bu metod Add-in'in yüklenmesinin zıttı bir durum olan add-in in kapatılması sırasında çalışır.Add-in'i oluştururken oluşturduğunuz nesneleri bu metod içerisinde yokedebilirsiniz. disconnectMode ise bize add-in'in HostShutDown, SolutionClosed, UISetupComplete, UserClosed sebeplerinden hangisinden dolayı kapandığını bildirmektedir.

OnAddInsUpdate(ref Array custom) : Bu metod Add-in lerin durumlarında değişiklil olduğunda çalışır.

OnStartupComplete(ref Array custom) : Add-in in çalıştığı uygulamanın açılma işlemini tamemen bitirdiği anda çalışacak metoddur. Örneğin Toolbox penceresine ulaşmak istiyorsanız. Bu metod çalıştıktan sonra ulaşırsanız ToolBox'ın oluşturulmuş olduğundan emin olabilirsiniz.

OnBeginShutdown(ref Array custom) : Bu metod add-in in çalıştığı uygulama kapatılmak üzere komut aldığında çalışır.

Makalenin ikinci kısmında bu metodların içeriğini nasıl doldurabileceğimizi örnekler eşliğinde inceleyeceğiz.
         oztamer@hotmail.com
         tamer.oz@yazgelistir.com
         oztamer@hotmail.com