Kategoria: Archiwum: Rozwój programu SharePoint

HTTP 406 Błąd przy użyciu kątowe $http.get przeciwko SharePoint pozostałych punktów końcowych

Aktualizacja: Marc AD ndersson wskazał ten wielki kawałek informacji: http://blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-released/. To wiele wyjaśnia :).

To może być najgorszym tytuł blogu nigdy! Anyhoo.

Zazwyczaj jak wszystkie moje prototypów przed wystąpienie O365. Mam mój osobisty wystąpienie, tak że nie trzeba się martwić o wpływających na nikogo innego. Tak na marginesie-pamiętam kiedy nazywamy prowadzona wokół maszyn wirtualnych na laptopy z mech – SQL Server, USŁUGI IIS, decydującym vs Hyper-V. VMWare? Anyhoo...

I rozwinął aplikacji za pomocą kątowa w tym środowisku, który robi, między innymi, to:

$http.get(serverUrl)
.sukces(Funkcja(dane, stan, nagłówki, config) {

var getLinksResponse = dane;

getLinksResponse.value.forEach(Funkcja(theResult) {

// i tak dalej i tak piany

To działa dobrze w dwóch różnych środowisk SharePoint. Jednakże, Kiedy mój kolega przeniesiony do wystąpienie Cloudshare, był już HTTP 406 błąd (który został po raz pierwszy kiedykolwiek dostał ten jeden, tak... yay, Tak myślę). Zrobiłem trochę badań i zauważyłem, że "Akceptuj" nagłówek był wyłączony. Usługi SharePoint online był całkowicie zadowolony z:

Zaakceptować: aplikacji/json

Ale cloudshare wystąpienie (czyli SP na prem, hostowane na serwerze wirtualnym) chciał classic "odata = verbose" dodaje się również w:

Zaakceptować: aplikacji/json;odata = verbose

Aby ustalić, że, Dodaliśmy nagłówka jako takie:

var config = {nagłówki: {
'Accept': "aplikacja/json;odata = verbose'
}
};

$http.get(serverUrl,config)
.sukces(Funkcja(dane, stan, nagłówki, config) {

var getLinksResponse = dane;

getLinksResponse.value.forEach(Funkcja(theResult) {

// i tak dalej i tak piany

Że dostał uwalniać od 406, ale to także zmieniony format odpowiedzi. To było więcej... pełne. (haha!) Zmiany były potrzebne i oto wynik końcowy:

var config = {nagłówki: {
'Accept': "aplikacja/json;odata = verbose'
}
};

$http.get(serverUrl,config)
.sukces(Funkcja(dane, stan, nagłówki, config) {

var getLinksResponse = dane;

getLinksResponse.d.results.forEach(Funkcja(theResult) {

// i tak dalej i tak piany

To tylko zwrócił się do 30 minut problem dla nas, więc mamy pecha. Mam nadzieję, że ktoś znajdzie to przydatne.

</koniec>

Rosnąca świadomość / Przyjęcie ram JavaScript

Mój kolega, Javed Ansari (http://www.bigapplesharepoint.com/team?showExpertName=Javed%20Ansari&rsource=pgblog), napisał krótkie podsumowanie blogu na RAM lubi lub przynajmniej używał z z programu SharePoint: http://www.bigapplesharepoint.com/pages/View-An-Insight.aspx?BlogID=53&rsource=PGBlog).

jQuery wydaje się być zwycięzcą na polu, tak mowic, już od lat, ale inni są bardziej nowe i uspokaja rodzaju walka to, jak kątowa. (SPServices, Oczywiście, był pewien życie ciułacz od lat i nadal będzie tak myślę).

Co to są ludzie za pomocą? Są one skoncentrowane bardziej na narzędzi firmy Microsoft (CSOM / JSOM) lub więcej ku kątowe w ruchu, Nokaut, Sprzeniewierzyć, itp?

Mam coraz uprzedzeń wobec tych ram nie Microsoft. Myślę, że rzeczy MSFT jest trudniejsze i trudniejsze do pracy z, wymagających prawie tyle krzywej uczenia się w starym stylu po stronie serwera dev.

Wysłać pocztą pewien komentarz tutaj lub na Big Apple SharePoint Jeśli chcesz dyskutować (Big Apple mają większe prawdopodobieństwo dobry dyskusji).

</koniec>

Przędzenia zadania czasomierza programu SharePoint z konfiguracja witryny kolekcja

Mój kolega, Ashish Patel, Napisał na blogu opisując elastycznej architektury pracy to daje jakieś ładne elastyczność w celu wspierania zadań długotrwałych i/lub raporty.  W jego słowach:

1. Analizując zaznaczone pliki i wysłanie przypomnienia osobom, jeżeli liczba dni (Ponieważ plik został wyewidencjonowany) przekroczyć określonych limitów progu

2. Usuwanie łącza z innych treści określonej zawartości jest usunięty lub archiwizowane z systemu

3. Użytkownik chce wyświetlić wszystkie alerty, które on zapisany w wszystkie wstęgi w zbiorze witryn

4. Wysyłanie przypomnień do autorów, aby przejrzeć zawartość, gdy w czasie przeglądu został określony w treści, i że zbliża się data

Również, Lista jest długa...

– Zobacz więcej w: http://www.bigapplesharepoint.com/ strony/widok-na-Insight.aspx?BlogID=40#sthash.7cKuiwly.dpuf

Są chwile, w mojej przeszłości, kiedy o coś takiego byłoby bardzo pomocne.

</koniec>

Jak: Konfigurowanie zakresu badań i testów jednostkowych z QUnit.js i Blanket.js dla biura 365 Aplikacji SharePoint

Intro

Już badają jednostki badań i sprawdzić zasięg JavaScript jak działa na nowych aplikacji SharePoint dla programu SharePoint online w biurze 365 Apartament.  Ścieżki oczywiste badań doprowadziły mnie do Qunit.js i zaraz po tym, do Blanket.js.

QUnit pozwól mi się testy jednostkowe i zgrupuj je do modułów.  Moduł jest tylko prostym sposobem organizowania związanych z testów. (Nie jestem pewien, że używam go zgodnie z przeznaczeniem, ale to działa dla mnie do tej pory z małych zestaw testów, które do tej pory zostały zdefiniowane).

Blanket.js integruje się z Qunit i pokaże mi rzeczywistej linii JavaScript, które były- i co ważniejsze – nie zostały rzeczywiście wykonane podczas uruchamiania testów.  To jest "zasięgu"-linie, które wykonywane są objęte badanie, podczas gdy inni nie są.

Tworzenie dobrych testów i oglądania zasięgu, możemy zmniejszyć ryzyko, że nasz kod ma ukryte wady.  Dobre czasy.

Qunit

Zakładając, że Visual Studio projektu ustawić, Zacznij Pobieranie pakietu z JavaScript http://qunitjs.com.  Dodaj odpowiednie CSS i JavaScript do rozwiązania.  Kopalnia wygląda jak ten:

image

Rysunek 1

Jak widać, Był przy pomocy 1.13.0 w tym czasie napisałem ten post blog. Nie zapomnij, aby pobrać i dodać plik CSS.

Że z drogi, następnym krokiem jest stworzenie pewnego rodzaju badania przewodów i odwołać Qunit bitów.  Jestem testowania kilka funkcji w pliku skryptu o nazwie "QuizUtil.js", więc stworzyłem stronę HTML o nazwie "QuizUtil_test.html", jak pokazano:

image Rysunek 2

Oto kod:

<!DOCTYPE HTML>
<HTML xmlns= "http://www.w3.org/ 1999/xhtml">
<głowa>
    <Tytuł>QuizUtil test z Qunit</Tytuł>
    <link rel= "arkusz stylów" href="../CSS/qunit-1.13.0.css" />
    <skrypt Typ= text/javascript"" src="QuizUtil.js" danych okładka></skrypt>
    <skrypt typ ="text/javascript" src ="qunit-1.13.0.js"></skrypt>
    <skrypt typ ="text/javascript" src ="blanket.min.js"></skrypt>

    <skrypt>
        moduł("getIDFromLookup");
        badania("QuizUtil getIDFromLookupField", Funkcja () {
            var goodValue = "1;#Paul Galvin";

            równe(getIDFromLookupField(goodValue) + 1, 2), "Identyfikator [" + goodValue + "] + 1 powinno być 2";
            równe(getIDFromLookupField(niezdefiniowana), niezdefiniowana, "Niezdefiniowany argumentów wejściowych powinien zwracać wynik niezdefiniowany.");
            równe(getIDFromLookupField(""), niezdefiniowana, "Pustych argumentów wejściowych powinien zwracać wartość undefined.");
            równe(getIDFromLookupField("gobbledigood3-thq;dkvn ada;skfja sdjfbvubvqrubqer0873407t534piutheqw;vn"), niezdefiniowana,"Należy zawsze zwraca wynik kabriolet całkowitą");
            równe(getIDFromLookupField("2;#Niektóre inne osoby"), "2", "Sprawdzanie [2;#Niektóre inne osoby].");
            równe(getIDFromLookupField("9834524;#długa wartość"), "9834524", "Dużą wartość badania.");
            notEqual(getIDFromLookupField("5;#ktoś", 6), 6, "Badania notEqual (5 nie jest równa 6 Ten przykładowy: [5;#ktoś]");

        });

        moduł("htmlEscape");
        badania("QuizUtil htmlEscape()", Funkcja () {
            równe(htmlEscape("<"), "&lt;", "Ucieczki mniej niż operator ('<')");
            równe(htmlEscape("<DIV class =  "someclass">Jakiś tekst</DIV>"), "&lt;DIV class =&quot;someclass&quot;&gt;Jakiś tekst&lt;/DIV&gt;", "Bardziej złożonych testów ciąg.");
        });

        moduł("getDateAsCaml");
        badania("QuizUtil getDateAsCaml()", Funkcja () {
            równe(getDateAsCaml(Nowy Data("12/31/2013")), "2013-12-31T:00:00:00", "Zakodowanego Data badania: [12/31/2013]");
            równe(getDateAsCaml(Nowy Data("01/05/2014")), "2014-01-05T:00:00:00", "Zakodowanego Data badania: [01/05/2014]");
            równe(getDateAsCaml(Nowy Data("01/31/2014")), "2014-01-31T:00:00:00", "Zakodowanego Data badania: [01/31/2014]");
            równe(getTodayAsCaml(), getDateAsCaml(Nowy Data()), "getTodayAsCaml() powinna być równa getDateAsCaml(nowy termin())");
            równe(getDateAsCaml("wartość bzdury"), niezdefiniowana, "Postarać się daty wartość bzdury.");
            równe(getDateAsCaml(niezdefiniowana), niezdefiniowana, "Staramy się od dnia [niezdefiniowana] Data.");
        });

        moduł("getParameterByName");
        badania("QuizUtil getParameterByName (ciąg kwerendy)", Funkcja () {
            równe(getParameterByName(niezdefiniowana), niezdefiniowana, "Staramy się niezdefiniowanych parametrów należy powrót niezdefiniowany.");
            równe(getParameterByName("nie istnieje"), niezdefiniowana, "Postarać się wartość parametru, gdy wiemy, że parametr nie istnieje.");

        });

        moduł("Ciasteczka");
        badania("QuizUtil różne funkcje plików cookie.", Funkcja () {
            równe(setCookie("badanie", "1", -1), getCookieValue("badanie"), "Pobierz plik cookie, ustawiłem powinno działać.");
            równe(setCookie("anycookie", "1", -1), PRAWDA, "Ustawienie prawidłowe gotowanie powinno zwraca 'true'.");
            równe(setCookie('Nazwa ciasteczka szalony !@#$%"%\^&*(()?/><.,", "1", -1), PRAWDA, "Ustawienia nazwy zły cookie należy zwrócić 'false'.");
            równe(setCookie(niezdefiniowana, "1", -1), niezdefiniowana, "Przekazywanie niezdefiniowane jako Nazwa ciasteczka.");
            równe(getCookieValue("nie istnieje"), "", "Cookie nie istnieją badania.");
        });

    </skrypt>
</głowa>
<organ>
    <DIV Identyfikator= "qunit"></DIV>
    <DIV Identyfikator= "qunit uchwyt"></DIV>

</organ>
</HTML>

Tu są osobisty rzeczy dzieje się tutaj:

  1. Odwoływanie się do mojego kodu (QuizUtil.js)
  2. Odwoływanie się do Qunity.js
  3. Określanie niektórych modułów (getIDFromLookup, Ciasteczka, i inni)
  4. Wprowadzenie do <DIV> których identyfikator jest "qunit".

Następnie, Tylko podciągnąć tej strony i masz cos takiego:

image

Rysunek 3

Jeśli spojrzeć na górze, masz kilka możliwości, dwa z nich są ciekawe:

  • Ukryj przeszedł testy: Dość oczywiste.  Pomoże Ci się w oczy po prostu zobacz obszary problemowe i nie dużo bałaganu.
  • Moduł: (spadek w dół): Będzie to filtr testy do tylko tych grup testów, które chcesz.

Co do testów, siebie-kilka uwag:

  • Jest rzeczą oczywistą, że należy napisać kod, tak, że jest to sprawdzalne w pierwszej kolejności.  Za pomocą narzędzia mogą pomóc egzekwowania tej dyscypliny. Na przykład, Miał funkcję o nazwie "getTodayAsCaml()”.  To nie jest bardzo testować, ponieważ zajmuje żadnego argumentu wejściowego i przetestować go na rzecz równości, musimy stale aktualizować kod testu w celu odzwierciedlenia bieżącej daty.  Mi przepisano go przez dodanie danych parametru wejściowego, a następnie przekazywanie bieżącej daty, kiedy chcę daty w formacie CAML.
  • Ramach Qunit dokumenty własne testy i wydaje się dość solidne.  To można zrobić proste rzeczy, jak badania na rzecz równości i posiada również wsparcie dla połączenia stylu ajax (zarówno "prawdziwe" lub wyśmiewali, przy pomocy twój ulubieniec mocker).
  • Przechodzi proces również zmusza do myślenia poprzez krawędzi przypadkach – co się dzieje z "nieokreślone" lub wartość null jest przekazywana do funkcja.  To sprawia, że martwe proste do testowania tych scenariuszy się.  Dobre rzeczy.

Relacje z Blanket.js

Blanket.js uzupełnia Qunit przez śledzenie rzeczywistej linii kodu, które są wykonać w trakcie prowadzenia testów.  Integruje prawo do Qunit więc choć to zupełnie oddzielny aplikacja, ładnie gra – to naprawdę wygląda to jeden app bez szwu.

To jest blanket.js w akcji:

image Rysunek 4

image

Rysunek 5

(Rzeczywiście trzeba kliknąć na pole "Włącz zasięgu" u góry [patrz rysunek 3] Aby to umożliwić.)

Wyróżnione wiersze na rysunku 5 nie zostały wykonane przez jednego z moich testów, więc trzeba opracować test, który powoduje je wykonać, jeśli chcę pełne pokrycie.

Dostać blanket.js pracy przez następujące kroki:

  1. Pobierz za darmo z http://blanketjs.org/.
  2. Dodaj to do swojego projektu
  3. Aktualizacja strony wykorzystać badania (QuizUtil_test.html w moim przypadku) w następujący sposób:
    1. Kod referencyjny
    2. Udekoruj swój <skrypt> odwołanie takiego:
    <skrypt Typ= text/javascript"" src="QuizUtil.js" danych okładka></skrypt>

Blanket.js wybiera się atrybut "dane okładka" i ma swoją magię.  Haki do Qunit, aktualizacje interfejsu dodać opcję "Włącz zasięgu" i voila!

Podsumowanie (TL; DR)

Użyj Qunit do napisania swojej sprawy.

  • Pobierz za darmo to
  • Dodaj to do swojego projektu
  • Napisz stronę testową uprząż
  • Tworzenie testów
    • Refaktoringu część kodu należy testować
    • Bądź kreatywny!  Myślę, że Crazy, możliwe scenariusze i tak je przetestować.

Użyj blanket.js do zapewnienia pokrycia

  • Upewnij się, że działa Qunit
  • Pobierz za darmo blanket.js i dodać go do projektu
  • Dodać go do uprzęży Strona testowa:
    • Dodaj odwołanie do blanket.js
    • Dodaj atrybut "dane okładka" do swojej <skrypt> Tag
  • Uruchomienia testów Qunit.

Nigdy nie zrobił to przed i miał pewne elementarne rzeczy działa w kilka godzin. 

Szczęśliwy badania!

</koniec>

undefinedSubskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Lists.asmx, GetList i "wartość nie może być zerowy”

Odkryłem dzisiaj, GetList() Metoda lists.asmx usługi sieci Web ma bardzo starannie nazywane lub jest podatna na rzut tajemniczy wyjątek "Wartość nie może być zerowy" (i że zakładając, że można uzyskać w przeszłości jeszcze gorsza komunikat Błąd rodzajowy, "Wyjątek typu ' Microsoft.SharePoint.SoapServer.SoapServerException’ zgłoszono wyjątek.")  W szczególności, I stwierdzone, że nie może dostarczyć wszelkiego rodzaju prefiks na metodzie GetList.  Poniższy urywek jQuery ilustruje punktu:

image

Jeśli, Usługa sieci web odpowiada "Wartość nie może być zerowa" jak na to skrzypek-pod warunkiem transkrypcja HTTP:

<?wersja pliku XML = "1.0" Kodowanie = "utf-8"?>
  <mydło:Koperta
     xmlns:mydło ="
http://schemas.xmlsoap.org/soap/envelope/"    
     xmlns:xsi = "
http://www.w3.org/2001/XMLSchema-instance
     xmlns:xsd ="
http://www.w3.org/2001/XMLSchema">

  <mydło:Organ>
    <mydło:Usterka>
      <faultcode>mydło:Serwer</faultcode>
      <elementem faultString>
        Wyjątek typu ' Microsoft.SharePoint.SoapServer.SoapServerException’ zgłoszono wyjątek.
      </elementem faultString>
      <szczegóły>
        <ErrorString xmlns ="
http://schemas.Microsoft.com/SharePoint/SOAP/">
Wartość nie może być zerowy.
        </ErrorString>
      </szczegóły>
    </mydło:Usterka>
  </mydło:Organ>
</mydło:Koperta>

Oczywiście, prawdopodobnie nie dodasz tego prefiksu "s0" na własne, Jednak niektóre narzędzia są podatne na nie (Podobnie jak Eclipse).

Jest to tym bardziej skomplikowane / frustrujący, ponieważ inne metody tolerować prefiksów.  Na przykład, The GetListCollection Metoda nie przeszkadzało jeśli jest zostało poprzedzone, nawet z prefiksami bzdury, takich jak "xyzzy":

image

To "wartość nie może być zerowy" wydaje się dość wspólnej z lists.asmx tak miejmy nadzieję pomoże to ktoś się w przyszłości.

</koniec>

Subskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Nieskończoność zagnieżdżanie <DIV> Znaczniki i jQuery

To wydaje się podobnie jak takich tematów oddball, Nie jestem pewien, że jest naprawdę warto blogi o, ale która nigdy nie została zatrzymana mnie przed, tak here we go Uśmiech

Pracuję w projekcie, gdzie I 'm ciągnięcie niektórych danych z wyszukiwania, Zapakowanie do wiadomości XML, a następnie ten XML jest ostatecznie przekształcone w HTML za pomocą XSLT.  Zaangażowanych jest dużo jQuery, jeden bit który implementuje niektóre funkcje przełączania zakładek.  Po kliknięciu na karcie (naprawdę, a <DIV>), jQuery wywołuje .hide() i .show() na różne bloki DIV (ładowania strony początkowej pobrań całej zawartości, więc nie są w tym przypadku nie postbacks).

Pęczek hours ago, kartę przełączania logiki zaczęła się nieregularne i go nie wykazują jedną z moich kart.  I ostatecznie śledzone go do faktu tego programu internet explorer (co najmniej) uważali, że <DIV> znaczniki zagnieżdżone daleko, znacznie głębiej niż zamierzone.Dowodzą Wikimedia :

-<DIV id = "Tab1Content">
  -<DIV>
    -<DIV>
      -<DIV id = "Tab2Content">
        -<DIV>
           …………………………
                   </DIV>  <— Wreszcie wykazujące została zamknięta aż tu!

Tak, Jeśli robiłam $("# Tab1Content").Ukryj(), Byłoby także ukryć Tab2 i może nigdy nie pokazać Tab2 jeśli nie też wyświetlić Tab1.  Skopiowany i wklejony kod do programu visual studio i wykazało wszystkie div. hamulcowej w górę estetycznie, tak, jak zostały dopełnione robi, Szukasz like this:

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

Beat my head against the wall chwilΩ i zauważył, że rzeczywista HTML kod został wytwarzających nadmiernych pusty <DIV> znaczniki, Podobnie jak:

<organ>

  <DIV id = "Tab1Content">

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

  </DIV>

  <DIV id = "Tab2Content">

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

  </DIV>

</organ>

(Powyższe jest waaaaaaaaaaaay bardzo uproszczona.  Znaczniki div puste są całkowicie prawidłowe. Niektóre z moich <DIV> znaczniki były pełnej zawartości, jednak wiele więcej nie były.  Ja przyszedłem do realizacji, Moje <XSL:dla każdego> dyrektyw były emitujących formularzu krótkie znaczniki div, kiedy xsl:dla każdej nieoczekiwane "znaleźć żadnych danych.  Komentarz HTML I zmuszony do produkcji, jak pokazano:

image

 

Po I nie, wszystkie div wyrównana estetycznie i moją kartę przełączania rozpoczął.

Jak zawsze, Mam nadzieję, że dzięki temu kogoś w pinch.

</koniec>

Subskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Jedną z przyczyn dla "twórca ten błąd nie określono przyczynę.”

I już działalność partii pracy z wyszukiwania programu SharePoint lately i specjalnie klasę KeywordQuery, właściwości i metody.

Jeśli chcesz, aby zestawu wyników do zwracają wyniki poza podejrzani (patrz: tu), można ją dodać do kolekcji SelectedProperties, jak w:

myKeywordQuery.SelectProperties.Add("xyzzy");

Dziękujemy i Porada kapelusz do Corey Roth i to ogromnie pomocne blogu (http://www.dotnetmafia.com/blogs/dotnettipoftheday/archive/2008/02/19/how-to-use-the-moss-enterprise-search-keywordquery-class.aspx)

W moim przypadku, "xyzzy" nie jest rzeczywiście właściwością zarządzanych.  Po dodaniu jej do SelectedProperties mimo to, SharePoint zwrócił jedną z moich ulubionych kiedykolwiek obsługi wyjątków:

"Twórca ten błąd nie określił powodem."

Lubię szczególnie kapitału "R" w przyczyny.  To dźwięki do mnie jak.NET odpowiednik"I have no mouth, i I must scream.”

</koniec>

Subskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Przystępne: Domyślnie wyniki wyszukiwania KeywordQuery

Kiedy wywołać Execute() Metoda KeywordQuery, można utworzyć ResultTable oparte na ResultType.RelevantResults.  Ten fragment kodu ilustruje, co znaczy:

ResultTableCollection resultsTableCollection = myKeywordQuery.Execute();

ResultTable searchResultsTable = resultsTableCollection[ResultType.RelevantResults];

Wynikowej tabeli będą miały następujące kolumny informacji: 

Identyfikator pracy
Ranga
Tytuł
Autor
Rozmiar
Ścieżka
Opis
Zapis
Nazwa_witryny
CollapsingStatus
HitHighlightedSummary
HitHighlightedProperties
ContentClass
IsDocument
PictureThumbnailURL
ServerRedirectedURL

Ta lista I pochodzące z programu SharePoint 2010 środowisko, Enterprise edition.  Mamy nadzieję, że będzie przydatne do kogoś w przyszłości.

</koniec>

Subskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin

Jednym z powodów: "Nie można wyodrębnić plik cab w roztworze”

Podczas pracy na część sieci web programu visual studio projektu dzisiaj, I did drobne org re niektóre pliki zostaną wprowadzone do folderu _layouts jako część procesu wdrażania. W szczególności, I nazwy pliku js z "TypeAhead.js" do "TypeAhead(Stary).js"  Zaplanować go usunąć, zaraz po jego następca "TypeAhead.js" okazuje się poprawne.  To wyglądało to:

image

To natychmiast spowodował problem z programu visual studio, kiedy próbuję wdrażanie projektu:

Wystąpił błąd podczas wdrażania krok "Dodaj rozwiązanie": Nie można wyodrębnić plik cab w roztworze.

Okazuje się, że nie należy umieszczać nawias w nazwach plików.  Mogę usunąć parens i który rozwiązał problem.

</koniec>

Subskrybowanie mój blog.

Follow me on Twitter wiek na http://www.twitter.com/pagalvin