Arsip Kategori: Pengembangan SharePoint

HTTP 406 Kesalahan saat menggunakan sudut $http.get terhadap SharePoint seluruh titik akhir

Update: Marc AD ndersson menunjukkan sepotong besar info: http://Blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-api-Released/. Itu menjelaskan banyak hal :).

Itu mungkin judul posting blog terburuk pernah! Anyhoo.

Saya biasanya melakukan semua saya prototyping terhadap O365 instance. Aku punya contoh pribadi saya sehingga saya tidak perlu khawatir tentang mempengaruhi orang lain. Sebagai samping-ingat saat kami panggilan dilakukan di sekitar mesin virtual pada laptop kami dengan Lumut-SQL Server, IIS, memutuskan vs Hyper-V. VMWare? Anyhoo...

Saya telah mengembangkan sebuah aplikasi yang menggunakan sudut dalam lingkungan ini yang melakukan, di antara hal lain, ini:

$http.Get(serverUrl)
.sukses(fungsi(data, status, header, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(fungsi(theResult) {

// dan seterusnya dan jadi buih

Ini bekerja baik di dua berbeda SharePoint online lingkungan. Namun, Ketika rekan saya porting ke Cloudshare instance, Ia mendapatkan HTTP 406 kesalahan (yang adalah pertama kalinya saya pernah punya satu, Jadi... yay, Saya rasa). Kami melakukan sedikit riset dan melihat bahwa header "Menerima" adalah off. SharePoint online adalah sangat senang dengan:

Menerima: aplikasi json

Tetapi contoh cloudshare (yang merupakan SP pada prem, host di virtual server) ingin klasik "odata = verbose" ditambahkan dalam juga:

Menerima: aplikasi json;oData = verbose

Untuk memperbaikinya, Kami menambahkan header seperti:

var config = {header: {
'Menerima': ' aplikasi json;oData = verbose'
}
};

$http.Get(serverUrl,config)
.sukses(fungsi(data, status, header, config) {

var getLinksResponse = data;

getLinksResponse.value.forEach(fungsi(theResult) {

// dan seterusnya dan jadi buih

Yang menyingkirkan 406, Tapi itu juga mengubah format respon. Itu lebih... verbose. (Haha!) Lebih banyak perubahan yang diperlukan dan di sini adalah hasil akhir:

var config = {header: {
'Menerima': ' aplikasi json;oData = verbose'
}
};

$http.Get(serverUrl,config)
.sukses(fungsi(data, status, header, config) {

var getLinksResponse = data;

getLinksResponse.d.Results.forEach(fungsi(theResult) {

// dan seterusnya dan jadi buih

Ini hanya berubah menjadi 30 menit masalah bagi kita, Jadi kita beruntung. Mudah-mudahan seseorang menemukan ini berguna.

</akhir>

Meningkatnya kesadaran / Penggunaan kerangka JavaScript

Rekan saya, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), menulis posting blog ringkasan singkat pada kerangka dia suka atau setidaknya telah menggunakan dengan dengan SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery tampaknya telah pemenang di Lapangan, sehingga untuk berbicara, selama bertahun-tahun sekarang, tetapi yang lain lebih baru dan stills semacam memerangi itu, seperti sudut. (SPServices, Tentu saja, telah hidup hemat selama bertahun-tahun dan akan terus jadi saya pikir).

Apa orang-orang menggunakan? Apakah mereka lebih terfokus pada Microsoft perkakas (CSOM / JSOM) atau bergerak lebih ke arah sudut, Babak, Ember, dll?

Saya memiliki bias tumbuh kerangka non Microsoft ini. Saya pikir MSFT hal-hal yang sulit dan sulit untuk bekerja dengan, memerlukan hampir sama dari kurva belajar sebagai gaya lama sisi server dev.

Posting komentar di sini atau lebih di Big Apple SharePoint Jika Anda ingin membicarakan (Big Apple akan memiliki lebih banyak kemungkinan diskusi yang baik).

</akhir>

Berputar pekerjaan SharePoint Timer dari koleksi situs konfigurasi

Rekan saya, Ashish Patel, menulis posting blog menggambarkan arsitektur pekerjaan fleksibel timer yang memberikan fleksibilitas beberapa bagus untuk mendukung berjalan lama tugas dan/atau laporan.  Dalam kata-katanya:

1. Menganalisis Checked out file dan mengirimkan pengingat kepada individu jika jumlah hari (karena file terakhir dilakukan checked out) melebihi batas-batas ambang tertentu

2. Menghapus link dari konten lain ketika konten tertentu dihapus atau Diarsipkan dari sistem

3. Pengguna yang ingin melihat semua lansiran yang ia berlangganan di semua jaring dalam situs koleksi

4. Mengirimkan pengingat kepada penulis untuk meninjau konten ketika waktu tinjauan yang ditentukan dalam konten dan bahwa tanggal mendekati

Yah, daftar goes on...

– Lihat lebih lanjut di: http://www.bigapplesharepoint.com/ Halaman/View-An-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

Ada saat-saat di masa lalu ketika memiliki sesuatu seperti ini akan menjadi sangat membantu.

</akhir>

Bagaimana caranya: Mengkonfigurasi Unit pengujian dan cakupan uji dengan QUnit.js dan Blanket.js untuk kantor 365 Aplikasi SharePoint

Intro

Aku sudah menjelajahi pengujian unit dan menguji cakupan untuk JavaScript ketika bekerja pada sebuah aplikasi SharePoint baru untuk SharePoint online di kantor 365 Suite.  Jalur penelitian jelas mendorong saya untuk Qunit.js dan kanan setelah itu, untuk Blanket.js.

Kebun buah-buahan biarkan aku membuat unit test dan mengelompokkan mereka ke dalam modul.  Module adalah cara yang mudah untuk mengatur tes terkait. (Saya tidak yakin saya menggunakan sebagaimana dimaksud, Tapi itu bekerja bagi saya begitu jauh dengan set kecil tes saya sejauh ini telah didefinisikan).

Blanket.js terintegrasi dengan kebun buah-buahan dan ia akan menampilkan jalur sebenarnya JavaScript yang itu- dan lebih penting-tidak benar-benar dilaksanakan dalam menjalankan tes.  Ini adalah "cakupan"-baris yang dieksekusi dilindungi oleh tes sementara yang lain tidak.

Antara pengaturan kasus uji yang baik dan melihat cakupan, kita dapat mengurangi risiko bahwa kode kita telah tersembunyi Cacat.  Baik kali.

Kebun buah-buahan

Dengan asumsi Anda memiliki Visual Studio proyek mengatur, Mulailah dengan men-download paket JavaScript dari http://qunitjs.com.  Menambahkan JavaScript dan CSS yang sesuai untuk solusi Anda.  Tambang terlihat seperti ini:

image

Gambar 1

Seperti Anda dapat melihat, Saya menggunakan 1.13.0 pada saat saya menulis posting blog ini. Jangan lupa untuk men-download dan menambahkan CSS file.

Yang keluar dari jalan, langkah berikutnya adalah untuk menciptakan semacam harness tes dan referensi bit kebun buah-buahan.  Saya menguji banyak fungsi dalam file skrip bernama "QuizUtil.js" Jadi saya membuat halaman HTML yang disebut "QuizUtil_test.html" seperti yang ditunjukkan:

image Gambar 2

Berikut adalah kode:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<kepala>
    <judul>QuizUtil tes dengan kebun buah-buahan</judul>
    <link rel= "stylesheet" href="../CSS/qunit-1.13.0.CSS" />
    <script jenis= text/javascript"" src="QuizUtil.js" data-cover></script>
    <script type ="text/javascript" src ="kebun buah-buahan-1.13.0.js"></script>
    <script type ="text/javascript" src ="blanket.min.js"></script>

    <script>
        modul("getIDFromLookup");
        tes("QuizUtil getIDFromLookupField", fungsi () {
            var goodValue = "1;#Paul Galvin";

            sama(getIDFromLookupField(goodValue) + 1, 2), "ID [" + goodValue + "] + 1 harus menjadi 2";
            sama(getIDFromLookupField(terdefinisi), terdefinisi, "Undefined masukan argumen harus kembali undefined hasil.");
            sama(getIDFromLookupField(""), terdefinisi, "Kosong masukan argumen harus mengembalikan nilai undefined.");
            sama(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;VN"), terdefinisi,"Harus selalu kembali hasil konversi ke Integer");
            sama(getIDFromLookupField("2;#beberapa orang lain"), "2", "Memeriksa [2;#beberapa orang lain].");
            sama(getIDFromLookupField("9834524;#nilai panjang"), "9834524", "Nilai besar ujian.");
            notEqual(getIDFromLookupField("5;#siapa pun", 6), 6, "Pengujian notEqual (5 tidak sama dengan 6 untuk contoh ini: [5;#siapa pun]");

        });

        modul("htmlEscape");
        tes("QuizUtil htmlEscape()", fungsi () {
            sama(htmlEscape("<"), "&lt;", "Escaping kurang dari operator ('<')");
            sama(htmlEscape("<div kelas =  "someclass">Beberapa teks</div>"), "&lt;div kelas =&quot;someclass&quot;&gt;Beberapa teks&lt;/div&gt;", "Lebih kompleks tes string.");
        });

        modul("getDateAsCaml");
        tes("QuizUtil getDateAsCaml()", fungsi () {
            sama(getDateAsCaml(baru Tanggal("12/31/2013")), "2013-12-31T:00:00:00", "Pengujian kode keras tanggal: [12/31/2013]");
            sama(getDateAsCaml(baru Tanggal("01/05/2014")), "2014-01-05T:00:00:00", "Pengujian kode keras tanggal: [01/05/2014]");
            sama(getDateAsCaml(baru Tanggal("01/31/2014")), "2014-01-31T:00:00:00", "Pengujian kode keras tanggal: [01/31/2014]");
            sama(getTodayAsCaml(), getDateAsCaml(baru Tanggal()), "getTodayAsCaml() harus sama dengan getDateAsCaml(Tanggal baru())");
            sama(getDateAsCaml("nilai omong kosong"), terdefinisi, "Mencoba untuk mendapatkan tanggal nilai omong kosong.");
            sama(getDateAsCaml(terdefinisi), terdefinisi, "Mencoba untuk mendapatkan tanggal [terdefinisi] tanggal.");
        });

        modul("getParameterByName");
        tes("QuizUtil getParameterByName (dari string kueri)", fungsi () {
            sama(getParameterByName(terdefinisi), terdefinisi, "Mencoba untuk mendapatkan parameter terdefinisi harus kembali undefined.");
            sama(getParameterByName("tidak ada"), terdefinisi, "Cobalah untuk mendapatkan nilai parameter ketika kita tahu parameter yang tidak ada.");

        });

        modul("Cookies");
        tes("QuizUtil berbagai fungsi kuki.", fungsi () {
            sama(setCookie("ujian", "1", -1), getCookieValue("ujian"), "Dapatkan saya menetapkan cookie harus bekerja.");
            sama(setCookie("anycookie", "1", -1), benar, "Pengaturan memasak sah harus kembali 'benar'.");
            sama(setCookie("nama cookie gila !@#$%"%\^&*(()?/><.,", "1", -1), benar, "Menetapkan nama buruk cookie harus kembali 'palsu'.");
            sama(setCookie(terdefinisi, "1", -1), terdefinisi, "Lewat undefined sebagai nama cookie.");
            sama(getCookieValue("tidak ada"), "", "Cookie tidak ada tes.");
        });

    </script>
</kepala>
<bodyHTMLan >><  kuat >  pesan yang kuat.</strong>  </body>  </html> ">
    <div id= "kebun buah-buahan"></div>
    <div id= "kebun buah-buahan-fixture"></div>

</bodyHTMLan >><  kuat >  pesan yang kuat.</strong>  </body>  </html> ">
</HTML>

Ada beberapa hal yang terjadi di sini:

  1. Kode saya referensi (QuizUtil.js)
  2. Referensi Qunity.js
  3. Mendefinisikan beberapa modul (getIDFromLookup, Cookie, dan lain-lain)
  4. Menempatkan <div> ID Apakah "kebun buah-buahan".

Kemudian, Aku hanya menarik Halaman ini dan Anda mendapatkan sesuatu seperti ini:

image

Gambar 3

Jika Anda melihat di atas, Anda memiliki beberapa pilihan, dua di antaranya menarik:

  • Sembunyikan lulus tes: Cukup jelas.  Dapat membantu mata Anda hanya melihat area masalah dan tidak banyak kekacauan.
  • Modul: (drop-down): Ini akan menyaring tes ke kelompok-kelompok tersebut hanya tes yang Anda inginkan.

Untuk tes sendiri – beberapa komentar:

  • Tak usah dikatakan bahwa Anda perlu untuk menulis kode Anda sedemikian rupa sehingga hal ini dapat diuji di tempat pertama.  Menggunakan alat dapat membantu menegakkan disiplin. Misalnya, Aku punya fungsi yang disebut "getTodayAsCaml()”.  Ini bukan sangat diuji karena ini membutuhkan tidak ada argumen masukan dan mengujinya untuk kesetaraan, kita perlu terus-menerus memperbarui kode tes untuk mencerminkan tanggal saat ini.  Saya direfractor dengan menambahkan data input parameter kemudian melewati tanggal saat ini ketika aku ingin tanggal dalam CAML format.
  • Dokumen-dokumen kerangka kerja kebun buah-buahan tes sendiri, dan tampaknya cukup kuat.  Ini dapat melakukan hal-hal sederhana seperti pengujian untuk kesetaraan dan juga memiliki dukungan untuk panggilan gaya ajax ("nyata" atau diejek menggunakan mocker favorit Anda).
  • Melalui proses juga memaksa Anda untuk memikirkan edge kasus-apa yang terjadi dengan "undefined" atau null dilewatkan ke dalam fungsi.  Itu membuatnya mati sederhana untuk menguji skenario ini keluar.  Bagus.

Cakupan dengan Blanket.js

Blanket.js melengkapi kebun buah-buahan pelacakan sebenarnya baris kode yang mengeksekusi selama menjalankan tes Anda.  Ini mengintegrasikan kanan ke kebun buah-buahan jadi meskipun itu adalah sebuah aplikasi seluruh terpisah, It memutar baik-itu benar-benar tampak seperti satu app mulus.

Ini adalah blanket.js dalam aksi:

image Gambar 4

image

Gambar 5

(Anda benar-benar harus klik pada kotak centang "Aktifkan cakupan" di bagian atas [Lihat gambar 3] untuk mengaktifkan ini.)

Baris yang disorot dalam gambar 5 belum dilaksanakan oleh salah satu tes, Jadi saya perlu menyusun tes yang menyebabkan mereka untuk melaksanakan jika saya ingin cakupan penuh.

Dapatkan blanket.js bekerja dengan mengikuti langkah-langkah:

  1. Men-download dari http://blanketjs.org/.
  2. Tambahkan ke proyek Anda
  3. Memperbarui halaman percobaan Anda memanfaatkan (QuizUtil_test.html dalam kasus saya) sebagai berikut:
    1. Referensi kode
    2. Menghias Anda <script> referensi seperti ini:
    <script jenis= text/javascript"" src="QuizUtil.js" data-cover></script>

Blanket.js mengambil atribut "data-penutup" dan melakukan keajaiban.  Kait ke kebun buah-buahan, Update UI untuk menambahkan opsi "Aktifkan cakupan" dan voila!

Ringkasan (TL; DR)

Menggunakan kebun buah-buahan untuk menulis Anda uji kasus.

  • Men-download
  • Tambahkan ke proyek Anda
  • Menulis sebuah halaman harness tes
  • Membuat tes Anda
    • Refactor beberapa kode Anda harus diuji
    • Menjadi kreatif!  Pikirkan gila, mungkin skenario dan menguji mereka tetap.

Gunakan blanket.js untuk memastikan cakupan

  • Memastikan kebun buah-buahan bekerja
  • Download blanket.js dan menambahkannya ke proyek Anda
  • Tambahkan ke halaman Anda baju zirah tes:
    • Menambahkan referensi ke blanket.js
    • Menambahkan atribut "data-penutup" untuk Anda <script> Tag
  • Menjalankan tes kebun buah-buahan Anda.

Saya tidak pernah melakukan hal ini sebelum dan memiliki beberapa hal dasar yang bekerja dalam beberapa jam. 

Pengujian bahagia!

</akhir>

undefinedBerlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Lists.ASMX, GetList dan "nilai tidak boleh null”

Hari ini saya menemukan bahwa GetList() metode dalam Lists.ASMX Layanan web telah dipanggil sangat hati-hati atau rentan untuk melemparkan misterius pengecualian "Nilai tidak boleh null" (dan itu dengan anggapan Anda dapat melewati lebih buruk pesan kesalahan umum, "Pengecualian jenis ' Microsoft.SharePoint.SoapServer.SoapServerException’ dilemparkan.")  Khusus, Saya menemukan bahwa Anda tidak dapat menyediakan jenis awalan pada metode GetList.  JQuery potongan berikut menggambarkan titik:

image

Jika Anda melakukannya, Layanan web menanggapi dengan "Nilai tidak boleh null" seperti ini Fiddler-disediakan HTTP transkrip:

<?Versi XML = "1.0" pengkodean = "utf-8"?>
  <sabun:Amplop
     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:Tubuh>
    <sabun:Kesalahan>
      <faultcode>sabun:Server</faultcode>
      <faultstring>
        Pengecualian jenis ' Microsoft.SharePoint.SoapServer.SoapServerException’ terlempar.
      </faultstring>
      <detail>
        <errorstring xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Nilai tidak boleh null.
        </errorstring>
      </detail>
    </sabun:Kesalahan>
  </sabun:Tubuh>
</sabun:Amplop>

Tentu saja, Anda mungkin tidak akan menambahkan awalan "s0" itu sendiri, tetapi beberapa alat cenderung melakukannya (seperti Eclipse).

Ini semua lebih membingungkan / frustrasi karena metode lain mentolerir awalan.  Misalnya, The GetListCollection metode tidak keberatan jika itu adalah bahasa, bahkan dengan awalan omong kosong seperti "xyzzy":

image

Ini "nilai tidak boleh null" tampaknya cukup umum dengan lists.asmx jadi mudah-mudahan ini akan membantu seseorang di masa depan.

</akhir>

Berlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Tanpa henti bersarang <div> Tag dan jQuery

Ini tampaknya seperti eksentrik topik, I 'm not sure it's benar-benar worth blogging tentang, tapi itu tidak pernah berhenti saya sebelumnya, Jadi di sini kita pergi Tersenyum

Saya bekerja pada sebuah proyek di mana aku menarik beberapa data dari pencarian, Kemasan ini ke pesan XML dan kemudian XML yang pada akhirnya berubah menjadi HTML melalui XSLT.  Ada banyak jQuery yang terlibat, salah satu dari sedikit yang mengimplementasikan beberapa fungsi tabbing.  Bila Anda klik pada tab (Benarkah, a <div>), jQuery memanggil .hide() dan .show() pada berbagai divs (beban awal halaman download semua konten jadi tidak ada postbacks dalam hal ini).

Sekelompok menit yang lalu, tab beralih logika mulai bersikap tak menentu dan itu tidak menunjukkan salah satu tab saya.  Saya akhirnya dilacak ke kenyataan bahwa internet explorer (setidaknya) berpikir bahwa <div> Tag bersarang jauh, jauh lebih dalam daripada yang dimaksudkan.Toolbar pengembang akan menunjukkan:

-<div id = "Tab1Content">
  -<div>
    -<div>
      -<div id = "Tab2Content">
        -<div>
           …………………………
                   </div>  <-akhirnya menunjukkan itu ditutup sepanjang jalan di sini!

Jadi, Jika saya melakukan $("#Tab1Content").Sembunyikan(), Saya juga akan menyembunyikan Tab2 dan aku tidak pernah bisa menunjukkan Tab2 jika aku juga tidak menunjukkan Tab1.  Aku disalin dan disisipkan kode ke visual studio dan menunjukkan semua lapisan div up manis, sama seperti mereka seharusnya melakukan, tampak seperti ini:

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

Aku mengalahkan kepalaku ke dinding untuk sementara dan melihat bahwa dalam HTML sebenarnya kode ini menghasilkan banyak kosong <div> Tags, seperti:

<bodyHTMLan >>< kuat > pesan yang kuat.</strong> </body> </html> ">

  <div id = "Tab1Content">

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

  </div>

  <div id = "Tab2Content">

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

  </div>

</bodyHTMLan >>< kuat > pesan yang kuat.</strong> </body> </html> ">

(Di atas adalah waaaaaaaaaaaay yang disederhanakan.  Tag div kosong benar-benar berlaku. Beberapa saya <div> Tag yang penuh dengan konten, tetapi banyak lagi tidak.  Saya datang ke realisasi bahwa saya <Extensible Stylesheet Language:untuk setiap> arahan yang memancarkan bentuk pendek div tag ketika xsl:tidak untuk setiap ' menemukan data.  Aku memaksa komentar HTML ke output, seperti yang ditunjukkan:

image

 

Setelah saya melakukan itu, Semua div berbaris dengan baik dan tab beralih mulai bekerja.

Seperti biasa, Saya harap ini membantu seseorang dalam keadaan darurat.

</akhir>

Berlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Satu penyebab untuk "pencipta kesalahan ini tidak menyebutkan alasan.”

Saya telah melakukan banyak pekerjaan dengan SharePoint pencarian akhir-akhir ini dan secara khusus kelas KeywordQuery, properti dan metode.

Jika Anda menginginkan hasil yang ditetapkan untuk mengembalikan hasil atas dan di luar tersangka (Lihat di sini), Anda menambahkannya ke koleksi SelectedProperties, seperti dalam:

myKeywordQuery.SelectProperties.Add("xyzzy");

Banyak terima kasih dan ujung topi ke Corey Roth dan posting sangat berguna blog ini (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

Dalam kasus saya, "xyzzy" tidak benar-benar sebuah properti yang dikelola.  Ketika saya menambahkan ke SelectedProperties tetap, SharePoint melemparkan salah satu favorit saya pernah runtime pengecualian:

"Pencipta kesalahan ini tidak menentukan alasan."

Saya terutama seperti ibukota "R" alasan.  Ini kedengarannya saya seperti .NET setara dengan"Saya memiliki mulut tidak, dan aku harus scream.”

</akhir>

Berlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Referensi yang berguna: Default hasil dari pencarian KeywordQuery

Ketika Anda memanggil Execute() metode pada KeywordQuery, Anda dapat membuat ResultTable berdasarkan ResultType.RelevantResults.  Potongan kode ini menggambarkan apa yang saya maksud:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

Tabel yang dihasilkan akan memiliki kolom berikut informasi: 

WorkId
Peringkat
Judul
Penulis
Ukuran
Jalan
Deskripsi
Menulis
SiteName
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Aku berasal daftar ini dari SharePoint 2010 lingkungan, edisi Enterprise.  Mudah-mudahan itu akan berguna untuk seseorang di masa depan.

</akhir>

Berlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin

Salah satu alasan: "Gagal untuk mengekstrak berkas cab dalam larutan”

Ketika bekerja pada visual studio web bagian proyek hari ini, Aku kecil re-org beberapa file untuk dimasukkan ke dalam _layouts folder sebagai bagian dari proses deployment. Khusus, Diganti menjadi .js file dari "TypeAhead.js" untuk "TypeAhead(lama).js"  Saya berencana untuk menghapusnya segera setelah pendahulunya "TypeAhead.js" membuktikan benar.  Itu tampak seperti ini:

image

Hal ini segera menyebabkan masalah dengan visual studio ketika saya mencoba untuk menyebarkan proyek:

Terjadi kesalahan dalam langkah penyebaran 'Menambahkan solusi': Gagal untuk mengekstrak berkas cab dalam larutan.

Ternyata bahwa Anda tidak harus meletakkan tanda kurung dalam nama file.  Aku melepaskan parens dan yang memecahkan masalah.

</akhir>

Berlangganan ke blog saya.

Ikuti saya di kegugupan di http://www.twitter.com/pagalvin