Kategori Arşivleri: SharePoint geliştirme

HTTP 406 SharePoint dinlenme bitiş noktaları karşı açısal $http.get kullanırken hata

Güncelleştirme: Marc reklam ndersson bu büyük parça-in haberdar etmek işaret etti.: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-api-released/. Bu çok açıklayıcı oldu :).

Bu kadar kötü başlık bir blog yazısı olabilir! Her neyse.

Ben genellikle yapmak tüm-in benim prototipleme karşı bir O365 örneği. Benim kişisel örnek başka birini etkileyen hakkında endişeli olmaya gerek yok ben vardır. Bir kenara olarak – ne zaman bizim laptoplarda MOSS ile– sanal makineleri taşınan arayacağız SQL Server hatırlıyorum, IIS, Hyper-V vs karar verme. VMWare? Her neyse...

Bu ortamda açısal kullanarak bir uygulama geliştirmişti., diğer şeyler arasında, Bu:

$http.get(serverUrl)
.başarı(işlevi(veri, durumu, başlıkları, config) {

var getLinksResponse = veri;

getLinksResponse.value.forEach(işlevi(Result) {

// ve benzeri ve çok saçma

Bu sadece iyi iki farklı SharePoint çevrimiçi ortamlarda çalışıyordu. Ancak, Ne zaman benim meslektaşım Cloudshare örneğine taşıdık, o was getting bir HTTP 406 hata (Bu aldığım ilk kez neydi, Bu yüzden... yay, Sanırım). Biraz araştırma yaptım ve "Kabul ediyorum" başlık kapalı olduğunu fark ettim. SharePoint online ile gayet mutlu:

Kabul etmek: uygulama/json

Ama cloudshare örneği (prem üzerinde SP hangisi, sanal sunucuda barındırılan) Klasik istedim "odata = verbose" de eklendi:

Kabul etmek: uygulama/json;Odata = verbose

Bunu düzeltmek için, Bu başlığı eklendi:

config var = {başlıkları: {
'Kabul': ' uygulama/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.başarı(işlevi(veri, durumu, başlıkları, config) {

var getLinksResponse = veri;

getLinksResponse.value.forEach(işlevi(Result) {

// ve benzeri ve çok saçma

Bu var kurtulun 406, Ama aynı zamanda yanıt biçimi değişti. Daha fazla... ayrıntılı. (haha!) Daha fazla değişiklik gerekli ve nihai sonuç:

config var = {başlıkları: {
'Kabul': ' uygulama/json;Odata = verbose'
}
};

$http.get(serverUrl,config)
.başarı(işlevi(veri, durumu, başlıkları, config) {

var getLinksResponse = veri;

getLinksResponse.d.results.forEach(işlevi(Result) {

// ve benzeri ve çok saçma

Bu sadece içine açık bir 30 bizim için dakika sorun, Biz dışarı lucked. Umarım kimse bu yararlı bulur.

</sonunda>

Artan bilinci / JavaScript çerçeveler kabulü

Benim meslektaşım, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), o seviyor ya da en azından ile SharePoint ile kullanıyor altyapıları kısa özet blog mesaj yazdı: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery victor alanında görülmektedir, adeta, Yıllardır, Ama diğerleri daha yeni ve mücadele ederken stills sıralamak, Açısal gibi. (SPServices, Elbette, a hayat kurtarmak için yıl oldu ve sanırım olmaya devam edecektir).

İnsanlar ne kullanıyorsunuz? Onlar daha Microsoft'un takım üzerinde odaklanmıştır (CSOM / JSOM) ya da daha doğru açısal hareketli, Nakavt, Kor, vb?

Bu Microsoft olmayan çerçeveler doğru büyüyen bir önyargı var. MSFT şeyler daha sert ve çalışmak daha zor olduğunu düşünüyorum, Neredeyse kadar çok eski tip sunucu tarafında dev olarak öğrenme eğrisi gerektiren.

Buraya yorum yazmak veya altında Büyük elma SharePoint tartışmak istiyorsanız (Büyük elma-ecek-si olmak bir tartışma daha fazla olasılığı).

</sonunda>

Site koleksiyonu yapılandırma gelen SharePoint zamanlayıcı işleri iplik

Benim meslektaşım, Ashish Patel, bir blog yazısı yazdı esnek zamanlayıcı işi mimarisi açıklayan uzun süren görevleri ve/veya raporları desteklemek için bazı güzel esneklik tanıyor.  Onun sözleriyle:

1. İşaretli dosyaları analiz ve sayı Eğer bireyler için anımsatıcılar gönderme gün (dosyayı kullanıma alındı bu yana) bazı eşik sınırları aşan

2. Belirli bir içeriği kaldırıldı veya arşivlenmiş sistemden başka içerik bağlantıları kaldırma

3. Kullanıcı site koleksiyonundaki tüm ağları içinde abone tüm uyarıları görmek istiyor.

4. Yazarlar için bir inceleme zaman içerikte belirtildi ve tarihi yaklaşan içeriği gözden geçirmek için bir hatırlatıcı gönderme

İyi, liste uzayıp gidiyor...

– Bak daha az: http://www.bigapplesharepoint.com/ sayfalar/View-An-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

Var kere ne zaman böyle bir şey olması çok yararlı olurdu benim geçmişte.

</sonunda>

Nasıl Yapılır: Birim testi ve Test kapsamındaki QUnit.js ve Blanket.js ile bir Office için Yapılandır 365 SharePoint uygulaması

Intro

Birim test keşfetmek olmuştur ve online Office SharePoint için yeni bir SharePoint uygulaması üzerinde çalışmak için JavaScript test kapsamı 365 Suite.  Bana açık araştırma yolları açtı Qunit.js ve sonra da sağ, Hedef Blanket.js.

QUnit birim testleri ayarlamak ve grup onları modüller edeyim.  Bir modül ilgili testleri düzenlemek için basit bir yol olduğunu. (Bunu gerektiği gibi kullanarak emin değilim, Ama benim için şu ana kadar tanımladığınız testleri küçük kümesiyle defa çalışıyor).

Blanket.js Qunit ile entegre ve o-ecek göstermek beni-e doğru-ve daha da önemlisi – aslında test çalışması sırasında yürütülen değil gerçek satır JavaScript.  Bu "kapsam"-diğerleri olmayan çalıştırılır satırı testi ile kaplıdır..

Kadar iyi test çalışmalarını ayarlama ve kapsam görüntüleme arasında, Biz bizim kod hataları gizlenmiş riskini azaltabilir.  İyi zamanlar.

Qunit

Projeyi Visual Studio var varsayarak kurmak, JavaScript paketi indirerek başlangıç http://qunitjs.com.  JavaScript ve karşılık gelen CSS çözümünüze eklemelisiniz.  Benim şuna benzer:

image

Şekil 1

Gördüğünüz gibi, I was istimal 1.13.0 o zaman bu blog yazısı yazdı.. Download ve CSS dosyası eklemek unutmayın.

Bu yoldan çekilin, bir çeşit test bandı oluşturun ve Qunit bit için sonraki adımdır.  "QuizUtil.js" denilen "gösterildiği gibi QuizUtil_test.html" adı verilen bir HTML sayfası oluşturan bir komut dosyası işlevleri bir sürü test ediyorum:

image Şekil 2

İşte kod:

<!DOCTYPE HTML>
<HTML xmlns"http =://www.w3.org/ 1999/xhtml">
<kafa>
    <Başlık>QuizUtil testi ile Qunit</Başlık>
    <bağlantı rel"stil sayfası =" href="../CSS/qunit-1.13.0.css" />
    <komut dosyası türü= text/javascript"" src="QuizUtil.js" veri-kapak></komut dosyası>
    <komut dosyası türü ="text/javascript" src ="qunit-1.13.0.js"></komut dosyası>
    <komut dosyası türü ="text/javascript" src ="blanket.min.js"></komut dosyası>

    <komut dosyası>
        modülü("getIDFromLookup");
        test("QuizUtil getIDFromLookupField", işlevi () {
            var goodValue = "1;#Paul Galvin";

            eşit(getIDFromLookupField(goodValue) + 1, 2), "Kimliği [" + goodValue + "] + 1 2-meli var olmak";
            eşit(getIDFromLookupField(Tanımsız), Tanımsız, "Tanımsız giriş bağımsız değişkeni tanımsız sonuç döndürmelidir.");
            eşit(getIDFromLookupField(""), Tanımsız, "Boş giriş bağımsız değişkeni tanımsız bir değeri döndürür.");
            eşit(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), Tanımsız,"Her zaman sonuç üstü açık bir tamsayıya dönmesi gerekir");
            eşit(getIDFromLookupField("2;#bir başka kişi"), "2", "Kontrol [2;#bir başka kişi].");
            eşit(getIDFromLookupField("9834524;#uzun değeri"), "9834524", "Büyük bir değer test.");
            notEqual(getIDFromLookupField("5;#kimse", 6), 6, "Bir notEqual test (5 eşit değildir 6 Bu örnek için: [5;#kimse]");

        });

        modülü("htmlEscape");
        test("QuizUtil htmlEscape()", işlevi () {
            eşit(htmlEscape("<"), "&lt;", "Kaçan bir küçüktür işleci ('<')");
            eşit(htmlEscape("<div class =  "someclass">Bazı metin</div>"), "&lt;div class =&quot;SomeClass&quot;&gt;Bazı metin&lt;/div&gt;", "Daha karmaşık sınama dizesi.");
        });

        modülü("getDateAsCaml");
        test("QuizUtil getDateAsCaml()", işlevi () {
            eşit(getDateAsCaml(Yeni Tarihi("12/31/2013")), "2013-12-31T:00:00:00", "Sabit kodlanmış Tarih testi: [12/31/2013]");
            eşit(getDateAsCaml(Yeni Tarihi("01/05/2014")), "2014-01-05T:00:00:00", "Sabit kodlanmış Tarih testi: [01/05/2014]");
            eşit(getDateAsCaml(Yeni Tarihi("01/31/2014")), "2014-01-31T:00:00:00", "Sabit kodlanmış Tarih testi: [01/31/2014]");
            eşit(getTodayAsCaml(), getDateAsCaml(Yeni Tarihi()), "getTodayAsCaml() getDateAsCaml eşit olmalıdır(Yeni Tarih())");
            eşit(getDateAsCaml("saçmalık değeri"), Tanımsız, "Tarihi bir saçmalık değerinin elde etmeye çalışmak.");
            eşit(getDateAsCaml(Tanımsız), Tanımsız, "Tarihi elde etmeye çalışmak [Tanımsız] Tarih.");
        });

        modülü("getParameterByName");
        test("QuizUtil getParameterByName (sorgu dizesi)", işlevi () {
            eşit(getParameterByName(Tanımsız), Tanımsız, "Elde etmeye çalışmak tanımsız parametresi tanımsız dönmek.");
            eşit(getParameterByName("mevcut değil"), Tanımsız, "Biz parametre yok biliyorum parametre değeri elde etmeye çalışmak.");

        });

        modülü("Tanımlama bilgileri");
        test("QuizUtil çeşitli tanımlama işlevleri.", işlevi () {
            eşit(setCookie("testi", "1", -1), getCookieValue("testi"), "Get set kurabiye çalışması gerekir.");
            eşit(setCookie("anycookie", "1", -1), TRUE, "Geçerli bir pişirme ayarı 'true' döndürür.");
            eşit(setCookie("çılgın tanımlama bilgisi adı !@#$%"%\^&*(()?/><.,", "1", -1), TRUE, "Kötü tanımlama bilgisi adı ayarlama 'false' a dönmelidir.");
            eşit(setCookie(Tanımsız, "1", -1), Tanımsız, "Geçen tanımlama bilgisi adı olarak tanımlanmamış.");
            eşit(getCookieValue("mevcut değil"), "", "Tanımlama bilgisi testi yok.");
        });

    </komut dosyası>
</kafa>
<vücut>
    <div kimliği"qunit ="></div>
    <div kimliği"qunit-fikstür ="></div>

</vücut>
</HTML>

Orada birçok şey oluyor burada:

  1. Kodumu başvurma (QuizUtil.js)
  2. Başvuru Qunity.js
  3. Bazı modüller tanımlama (getIDFromLookup, Tanımlama bilgileri, ve diğerleri)
  4. Yerleştirerek bir <div> ID "qunit" mı.

O zaman, Bu sayfa yukarı çekin ve böyle bir şey almak:

image

Şekil 3

Üstünde bakarsanız, birkaç seçenek var, ikisi de ilginç:

  • Testler geçti gizle: Çok açık.  Sadece sorun alanları ve yığılmayı değil bir sürü görmek göz yardımcı olabilir.
  • Modülü: (damla aşağı): Bu testler sadece bu gruplara testlerin istediğiniz aşağı süzer.

Testler kendilerini – birkaç yorum gelince:

  • Bu öyle ki ilk etapta test edilebilir kodunuzu yazmanız gerektiğini söylemeye gerek yok.  Aracı kullanarak bu disiplin uygulamak yardımcı olabilir. Örneğin, "GetTodayAsCaml adında bir işlevi vardı.()”.  Hiçbir giriş bağımsız değişkeni alır bu yana bu çok test edilebilir değildir ve eşitlik için sınamak için, sürekli geçerli tarihin yansıtması için test kodu güncelleştirmeniz gerekir.  Ben bir veri giriş parametresi ekleyerek daha sonra geçerli tarihten bugüne CAML biçimde istediğim zaman geçirmeden refactored.
  • Kendi test Qunit framework belgeleri ve oldukça sağlam görünüyor.  Eşitlik için sınama gibi basit şeyler yapabilirsiniz ve ayrıca ajax tarzı telefon desteği vardır ("gerçek" veya alay senin favori mocker kullanma).
  • Sürecinden de kenar durumlarda – ne "Tanımsız" ile olur düşünmek için zorlar veya null bir işlev geçirilir.  Bu senaryolar dışarı test ölü basit kolaylaştırır.  İyi malzeme.

Blanket.js ile kapsama

Blanket.js, testlerinizi ders sırasında yürütmek gerçek kod satırlarının takip ederek Qunit tamamlar.  O bütünleşmek sağ Qunit bile olsa tamamen ayrı bir app 's, o güzel oyun-bir kesintisiz app var gibi görünüyor.

Bu blanket.js eylem olduğunu:

image Şekil 4

image

Şekil 5

(Aslında üst "kapsamı etkinleştir" onay kutusunu tıklamanız gerekiyor [bkz: şekil 3] Bunu etkinleştirmek için.)

Şekilde vurgulanan satırlar 5 herhangi benim testleri tarafından yürütülen değil, Yani tam kapsama istiyorsanız idam etmelerine neden test hazırlamak gerekir..

Aşağıdaki adımları uygulayarak çalışma blanket.js olsun:

  1. Download http://blanketjs.org/.
  2. Projenize eklemek
  3. Test koşum sayfanızı güncelleştirin (Benim durumumda QuizUtil_test.html) aşağıdaki gibi:
    1. Başvuru kodu
    2. Süslemeleri, <komut dosyası> Bu şekilde başvuru:
    <komut dosyası türü= text/javascript"" src="QuizUtil.js" veri-kapak></komut dosyası>

Blanket.js kadar "gizli veri" özniteliğini seçer ve sihrini yok.  Qunit kanca, UI "kapsamı etkinleştir" seçeneği eklemek için güncelleştirir ve voila!

Özet (TL; DR)

Qunit test çalışmalarınızı yazmak için kullanın..

  • Download o
  • Projenize eklemek
  • Bir test koşum sayfa yazmak
  • Testlerinizi oluşturmak
    • Refactor kodunuzu test edilebilir olması için bir kısmını
    • Yaratıcı olun!  Çatlak gibi düşünüyorum, imkansız senaryoları ve zaten test.

Blanket.js kapsama sağlamak için kullanın.

  • Qunit çalıştığından emin olun
  • Blanket.js indirmek ve projenize eklemek
  • Test koşum sayfanıza ekleme:
    • Blanket.js bir başvuru ekleyin
    • Bir "gizli veri" özniteliğini ekleyin, <komut dosyası> etiket
  • Qunit testler.

Asla bunları daha önce yaptım ve bir avuç saat çalışan bazı temel şeyler vardı. 

Mutlu test!

</sonunda>

undefinedBenim blog abone.

Heyecan beni izleyin http://www.twitter.com/pagalvin

Lists.asmx, GetList ve "değeri null olamaz”

Bugün keşfettim bu GetList() yöntem lists.asmx Web hizmeti çok dikkatli bir şekilde çağrılacak ya da gizemli bir "Değer null olamaz" özel durum eğilimli (ve, sen-ebilmek almak daha kötü genel hata iletisi üstlenmektedir, "Özel durum türü ' Microsoft.SharePoint.SoapServer.SoapServerException’ atıldı.")  Özellikle, Ben GetList yöntemi herhangi bir önek sağlayamayacağını bulundu.  Aşağıdaki jQuery kod noktayı gösterir:

image

Bunu yaparsanız, "Değer bu aynı derecede boş olamaz ile" web hizmeti yanıt Fiddler-HTTP transkript sağlanan:

<?XML sürüm "1.0 =" kodlama = "utf-8"?>
  <sabun:Zarf
     xmlns:sabun ="
http://schemas.xmlsoap.org/SOAP/envelope/"    
     xmlns:XSI = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:XSD ="
http://www.w3.org/2001/XMLSchema">

  <sabun:Vücut>
    <sabun:Arıza>
      <faultCode>sabun:Sunucu</faultCode>
      <faultCode>
        Özel durum türü ' Microsoft.SharePoint.SoapServer.SoapServerException’ atıldı.
      </faultCode>
      <detay>
        <ErrorString xmlns ="
http://schemas.microsoft.com/SharePoint/SOAP/">
Değer null olamaz.
        </ErrorString>
      </detay>
    </sabun:Arıza>
  </sabun:Vücut>
</sabun:Zarf>

Elbette, muhtemelen bu "s0" öneki, kendi eklediğiniz olmaz, ama bazı araçlar yapmaya yatkındır (Eclipse gibi).

Bu daha fazla kafa karıştırıcı / diğer yöntemler önekleri tahammül, çünkü sinir bozucu.  Örneğin, the GetListCollection yöntem bu öneki varsa akıl almaz, "xyzzy" gibi ile bile saçma önek:

image

Bu yüzden umarım bu yardımcı olacak kimse dışarı gelecek lists.asmx ile oldukça yaygın gibi görünüyor "değeri null olamaz".

</sonunda>

Benim blog abone.

Heyecan beni izleyin http://www.twitter.com/pagalvin

Sonsuz yerleştirme <div> Etiketler ve jQuery

Bu tür bir tuhaf konu gibi görünüyor, Bloglama hakkında gerçekten değer emin değilim, Ama bu beni daha önce hiç durdurmadı, Yani burada biz gitmek Gülümseme

Bir ara bazı verileri nerede çekiyorum bir proje üzerinde çalışma dışarı, ve sonra bu XML bir XML iletisi ambalaj sonuçta XSLT ile HTML içine aktarılır.  JQuery bir sürü, bir çeşit bazı sekmeler işlevselliğini uygular.  Bir sekmeyi tıklattığınızda (Gerçekten, bir <div>), jQuery yerleştirilmiş çağırır() ve göster() çeşitli divs (Yani hiç postbacks bu durumda ilk sayfa yükleme tüm içerik indirme).

Birkaç saat önce, mantık geçiş sekmesini hatalı davranmaya başladı ve sekmelerimden biri göstermek değil.  Ben sonuçta o Internet Explorer'ın aslında izlenen (en az) düşündüm ki <div> çok iç içe Etiketler, amacı daha çok daha derin.Geliştirici araç çubuğu gösterir:

-<div id = "Tab1Content">
  -<div>
    -<div>
      -<div id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <-son olarak gösterilen buraya yuvarlandıysa kapatıldı!

Yani, Ben yaptım bir $("#Tab1Content").gizle(), Sekme2'de saklanırdım ve asla ben de Sekme1 gelmedi Sekme2 gösterebilirim.  Visual studio ve tüm div's astar kadar güzel gösterdi kodu kopyaladım ve, Sadece onlar yapmak gerektiği gibi, Bu şekilde:

-<div id = "Tab1Content">
  +<div>
  +<div>
-<div id = "Tab2Content">
  +<div>
  +<div>

Bir süre için kafamı duvarlara yendi ve gerçek HTML'de boş bir sürü kod üreten fark <div> Etiketler, gibi:

<vücut>

  <div id = "Tab1Content">

    <div ID "row1" = />
    <div ID "row2" = />

  </div>

  <div id = "Tab2Content">

    <div ID "row1" = />
    <div ID "row2" = />

  </div>

</vücut>

(Yukarıdaki oversimplified waaaaaaaaaaaay olduğunu.  Boş div Etiketler tamamen geçerli. Bazıları benim <div> Etiketler tam içerik, Ancak çok daha fazla.  Gerçekleşme geldi bu benim <XSL:for-each> yönergelerinin kısa formlu yayan div Etiketler zaman xsl:Her için değil ' herhangi bir veri bulmak.  Bir HTML açıklama çıkış zorla, görüldüğü gibi:

image

 

O benden sonra, div's güzel dizilmiş ve etiket anahtarlama çalışmaya başladı..

Her zaman olduğu gibi, Bunu kimse bir tutam yardımcı olur..

</sonunda>

Benim blog abone.

Heyecan beni izleyin http://www.twitter.com/pagalvin

Bir neden için "Bu hata oluşturan bir nedenini belirtmedi.”

Ben bir sürü iş ile SharePoint Arama son zamanlarda ve özellikle KeywordQuery sınıf yaptığını, özellikleri ve yöntemleri.

Olağan şüpheliler ötesinde sonuçlar döndürmek için sonuç istiyorsanız (Buraya bakın), Bu SelectedProperties koleksiyonuna ekleyin, olarak:

myKeywordQuery.SelectProperties.Add("xyzzy");

Çok teşekkürler ve şapka için bir ipucu Corey Roth ve Bu son derece yararlı bir blog yazısı (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

Benim durumumda, "xyzzy" yönetilen bir özellik değil.  Ne zaman ben bunu SelectedProperties için yine de eklendi, Benim en sevdiğim attı SharePoint çalışma zamanı özel durumları:

"Bu suçu oluşturan bir neden belirtmedi."

Özellikle sebep ın başkenti "R" gibi.  Bu gibi .NET denk geldi"I-si olmak hayır ağız, ve çığlık olmalı.”

</sonunda>

Benim blog abone.

Heyecan beni izleyin http://www.twitter.com/pagalvin

Kullanışlı referans: KeywordQuery arama sonuçlarından varsayılan

Ne zaman Execute çağırmak() bir KeywordQuery yöntemi, ResultType.RelevantResults üzerinde temel bir ResultTable oluşturabilirsiniz.  Ne demek bu kod parçacığını göstermektedir:

ResultTableCollection resultsTableCollection myKeywordQuery.Execute =();

ResultTable searchResultsTable resultsTableCollection =[ResultType.RelevantResults];

Ortaya çıkan tablo-ecek-si olmak bilgi aşağıdaki sütunları: 

Çalışma kimliği
Sırası
Başlık
Yazar
Boyutu
Yolu
Açıklama
Yazma
Siteadı
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Ben bu listeyi SharePoint elde 2010 çevre, Enterprise edition.  Umarım bu gelecekte birisi için kullanışlı olacak.

</sonunda>

Benim blog abone.

Heyecan beni izleyin http://www.twitter.com/pagalvin

Bir nedeni: "Çözüm cab dosyasında ayıklanamadı”

Visual studio web bölümü çalışırken proje bugün, Bir küçük re-org _layouts klasörüne dağıtım işleminin bir parçası koymak için bazı dosyaların yaptım. Özellikle, "TypeAhead.js" için "TypeAhead bir .js dosya adı(eski).JS"  Onun halefi "TypeAhead.js" doğru kanıtlıyor en kısa sürede kaldırmak planlıyoruz.  Bu gibi görünüyordu:

image

Bu hemen neden visual studio ile bir sorun ne zaman ı güvenilir-e proje dağıtmak için:

'Add Solution' dağıtım adımda hata oluştu: Çözüm cab dosyasında ayıklanamadı.

Dosya adlarını bir parantez koymamalısınız çıkıyor.  Kaldırdım Pars ve sorun çözüldü.

</sonunda>

Benim blog abone.

Heyecan beni izleyin http://www.twitter.com/pagalvin