15 Temmuz 2011 Cuma

Sharepoint 2010: The deployment type "TemplateFile" of file in Project Item is not compatible with a Feature in a Sandboxed Solution

Sharepoint 2010'da uygulama geliştirken wsp paketi oluşturma sırasında aşağıdaki hataları alırsanız;

The deployment type "TemplateFile" of file "%ascxName%" in Project Item "%VisualWebPartName%" is not compatible with a Feature in a Sandboxed Solution.

The Project Item "%VisualWebPartName%" cannot be deployed through a Feature in a Sandboxed Solution.

Sharepoint projenize eklediğiniz Visual Web Part'la ilgili bir ayar sorunu olduğu anlamına geliyor. Bu durumda kontrol etmeniz gereken 2 şey var.

  1. Sharepoint projenize eklediğiniz Visual Web Part'ızın ascx elemanına sağ tıklayıp Properties ekranına geçiyoruz.
























    Açılan Properties ekranında Deployment Type olarak Template File seçiyoruz.
























  2. Yukarıdaki ayar zaten Template File olarak seçiliyse, Sharepoint solution tipiniz zamanında Sandboxed olarak (varsayılan budur zaten) seçilmiştir ve Sandboxed projeler Visual Web Part elemanını içerdiğinde paketlemede bu hatayı alırsınız. Düzeltmek için, Solution Explorer penceresinde iken Sharepoint projemizi seçiyoruz ve Properties penceresine geçiyoruz.























    Properties penceresinde Sandboxed Solution değerini False olarak değiştiriyoruz ve kaydediyoruz.





















Bu değişiklikleri yaptıktan sonra projemiz bundan sonra Farm solution olarak sunulacak ve Visual Web Part'ları destekler hale gelecektir. Paket almaya çalıştığımızda da sorunsuz bir şekilde wsp paketinin oluşturulduğunu göreceğiz.

Kolay gelsin,

Wsp paketi Sharepoint'e nasıl deploy edilir?

Birçok bileşen içeren Sharepoint uygulamanızı geliştirdiniz. Yeri geldi class library'ler, yeri geldi Silverlight uygulamaları olan tüm bu bileşenlerinizi daha önceki postlarda anlattığım şekilde Sharepoint paketinize eklediniz ve paketinizi oluşturup elinizde bir wsp dosyası ile hazır bekliyorsunuz :)

Şimdi bu wsp'yi ne yapıcaz da Sharepoint sunucumuza deploy edicez? Şimdi öncelikle bu deployment süreci elinizdeki Sharepoint projesinin tipine göre değişiklik gösteriyoruz. Proje ilk yaratılırken bir ekranda sormuştu hatırlıyor musunuz projeyi hangi tip istersin diye?


















Hatırlarsın hatırlarsın. Hatta bunu "amann default'u neyse o olsun" diye sandbox'ta bırakıp daha sonra bu posttaki hatayı aldıktan sonra farm'a çevirmiş olabilirsin ;)

Neyse, adım adım Farm ve Sandboxed solution'a göre wsp kurulumu şu şekilde;

Farm
  1. Kurulum yapacağımız Sharepoint sunucusunda güzel bir yere wsp dosyamızı yerleştiriyoruz. Daha sonra Sharepoint 2010 Management Shell komut satırını açıyoruz.

  2. Öncelikle solution'ı ekleme işlemini yapıyoruz. Şöyle:
    Add-SPSolution –LiteralPath "C:\wspName.wsp"
    Bu işlemden sonra bize hangi solutionId ile kaydedildiğini gösteriyoruz. Dikkat ederseniz henüz deploy edilmediğini göreceksiniz.




  3. Daha sonra wsp dosyamızı Install komutu ile Sharepoint sunucumuza yüklüyoruz.
    Install-SPSolution –Identity wspName.wsp –WebApplication http://portalAddress –GACDeployment

  4. Yükleme sonrasında portalımızı açıyoruz. Kökteki sitemiz üzerinden Site Settings --> Site Collection Features ekranına gidiyoruz ve kurulum sonrası burada görünür hale gelen feature'ımızı aktif hale getiriyoruz.




Sandboxed
  1. Kurulum yapacağımız Sharepoint sunucusunda güzel bir yere wsp dosyamızı yerleştiriyoruz. Daha sonra Sharepoint 2010 Management Shell komut satırını açıyoruz.

  2. Öncelikle solution'ı ekleme işlemini yapıyoruz. Şöyle:
    Add-SPUserSolution –LiteralPath "C:\wspName.wsp" –Site http://webapplication/sitecollection

  3. Daha sonra wsp dosyamızı Install komutu ile Sharepoint sunucumuza yüklüyoruz.
    Install-SPUserSolution –Identity SPTestProject.wsp –Site http://webapplication/sitecollection

  4. Yükleme sonrasında portalımızı açıyoruz. Kökteki sitemiz üzerinden Site Settings --> Site Collection Features ekranına gidiyoruz ve kurulum sonrası burada görünür hale gelen feature'ımızı aktif hale getiriyoruz.



Sadece ilk defaya mahsus olmak üzere yükleme işlemini bu şekilde yaptık. Peki daha sonrası? Yeniden oluşturduğumu wsp paketini yine sunucuda uygun bir yere atıyoruz. Sharepoint 2010 Management Shell komut satırımızı açıyoruz ve şu komutu yürütüyoruz;

Farm

Update-SPSolution –Identity wspName.wsp –LiteralPath “C:\wspName.wsp” –GacDeployment


Sandboxed

Update-SPUserSolution –Identity wspName.wsp –Site http://webapplication/site –ToSolution wspName.wsp


Artık bu wsp paketini kullanmak istemiyorsak da sırasıyla;

Farm
  1. Paketi uninstall ediyoruz.
    Uninstall-SPSolution –Identity wspName.wsp –WebApplication http://webapplication

  2. Paketi kaldırıyoruz.
    Remove-SPSolution –Identity wspName.wsp

Sandboxed

  1. Paketi uninstall ediyoruz.
    Uninstall-SPUserSolution –Identity wspName.wsp –Site http://webapplication/sitecollection

  2. Paketi kaldırıyoruz.
    Remove-SPUserSolution –Identity wspName.wsp –Site http://webapplication/sitecollection


Bu şekilde wsp paketlerini Sharepoint portalına yükleme, güncelleme ve çıkarma işlemlerini görmüş olduk. Acılı süreçler gibi görünse de el alışkanlığı ve komut satırının yetenekleri sayesinde zamanla alışılıyor :)

Kolay gelsin,

Sharepoint 2010: File Not Found

Sharepoint 2010 uygulamanızı geliştirdiniz. Sunucuya deploy ettiğiniz. Çalışma sırasında şu hatayı aldınız;














Ne diyor hata? "File Not Found"

Şimdi, bunun birçok nedeni olabilir. Benim rastladıklarımdan birkaçı;
  1. Kod içerisinde sayfa ya da listelere ulaşmaya çalışırken bir isimlendirme hatası yapmış olabilirsiniz.

  2. Client Object Model üzerinden, listelere, internal name yerine listelerin görünen isimleriyle ulaşmaya çalışıyorsanız (ki yanlış bir yaklaşım) ve listenin görünen ismi değişmişse patlarsınız ("Aaa daha sabah çalışıyordu yaa" hadisesi burdan gelir). Unutmayın listelerin görünen isimleri değişebilir ancak internal name'leri ilk yaratılırken verilir ve bir daha değişmez.

  3. Son karşılaştığım durumu da şu postta 2. maddede anlatmıştım. Bu da çok sık karşılaşılan bir durum.

Kolay gelsin,

Sharepoint 2010: Assembly generation failed -- Referenced assembly does not have a strong name

Sharepoint 2010 üzerinden uygulama geliştirirken derleme sırasında şu hatayı alırsanız;

Assembly generation failed -- Referenced assembly '%assembly name%' does not have a strong name

hiç üzülmeye gerek yok. Çözülmüşü var ;)

Sharepoint Projesinde Class Library nasıl kullanılır?

Diyelim ki kapsamlı bir Sharepoint projesi geliştiriyorsunuz. Bu projenizi, katmanlı mimarinin ve yazılım geliştirme mantığının doğası gereği alt projelere böldünüz. Core, Logging, UI vs... Bu durum aslında geliştirdiğimiz her projede rastladığımız bir senaryo. Bu makalede çözmeye çalıştığımız durum da bu senaryonun bir Sharepoint 2010 projemizde başımıza gelmesi durumu. İnceleyelim.

Şimdi diyeceksiniz, "amann ne var canım bunda, class library'i sharepoint projesinde referans olarak göster bitsin gitsin!" Ama öyle olmuyor maalesef, yani olmuyormuş ben de patlayınca öğrendim :) Adım adım Class Library, Sharepoint projesinde nasıl kullanılır görelim:

  1. İlk adım zaten her zaman yaptığımız gibi, Class Library'i geliştirdikten sonra, kullanmak istediğimiz Sharepoint projesinde referans olarak göstermek.
























    Yalnız ne zaman ki bu class library elemanlarını, Sharepoint projesinde kullanıyoruz (ki zaten kullanmak için referans olarak ekledik) build sırasında şu hatayı alırız;

    Assembly generation failed -- Referenced assembly 'CoreLibrary' does not have a strong name

    Eklediğimiz Class Library'i her Sharepoint bileşeni gibi strong name ile işaretlemek gerektiğini söylüyor hata. Bunu da yapmak için, Class Library projemizi sağ tıklayıp Properties ile özelliklerine gidiyoruz. Açılan ekranda sol menüden Signing'i seçtikten sonra sağ menüde Sign the assembly kutucuğunu seçili hale getirip, Choose a strong name key file açılır menüsünde New seçimini yapıyoruz.
















    Yeni açılan ekranda, Key File Name'e istediğimiz bir ismi verdikten sonra, gerek olmadığı için "Protect my key file with a password" seçimini kaldırıyoruz ve Ok'liyouz.















    Bu şekilde class library'imizi strong key name ile işaretledikten sonra projemizi derlediğimizde herhangi bir hata almadığımızı göreceğiz.


  2. Peki bitti mi? Hayır tabii ki! Bu şekilde bırakıp, paketleme işlemi yaparsak paketlenmiş wsp dosyamız içerisinde Class Library dll'imiz olmadığını göreceğiz. Bu durum da deployment sonrasında şu postta yazmış olduğum hatayı beraberinde getirecek. Bu nedenle class library dll'imiz bir şekilde pakete eklememiz gerekiyor.

    Bunun için öncelikle Sharepoint projemiz altındaki Package.package elemanına çift tıklıyoruz.
















    Açılan ekranda bir bakıyoruz ki soldaki sütunda pakete eklenecek elemanlar arasında Class Library'imiz yok! Aaa!











    Nerde bu diye dövünmeye gerek yok. Sol alttaki Advanced butonuna tıklıyoruz. Yeni açılan ekranda Add --> Add Assembly from Project Output işlemini yapıyoruz.




    Yeni açılan ekranda Source Project olarak ilgili Class Library'imizi, Deployment Target olarak da varsayılan olan GlobalAssemblyCache'i seçiyoruz ve Ok'liyoruz.
























    Kaydettikten sonra paketleme işlemi yaptığımızda wsp içerisinde bu sefer Class Library dll'imizin olduğunu görüyoruz. Bu wsp'yi de şu postta anlattığım üzere sunucuya deploy ettikten sonra Class Library'imizi kullanan bir webpart sahibi olduğumuzu görüyoruz.
Görüldüğü üzere Sharepoint 2010 projelerimizde Class Library kullanmak bir miktar çetrefilli. Ancak bu işlemi sadece bir kez yapıyorsunuz ve inanın SP 2007'den sonra bu çetrefil sayılmaz ;)

Kolay gelsin,