Archiv der Kategorie: Tipps

CSS IntelliSense in Visual Studio mit Angular und Resharper


Manchmal könnte man sagen “früher” war alles besser. Zumindest war es mit Angular 1 und dem “alten” System in dem man noch direkt JavaScript und Styles eingebunden hat, einfacher im HTML die passende IntelliSense für die CSS Klassen mit der Hilfe von Resharper zu erhalten. Dabei handelte es sich z.B. um Bootstrap und font awesome Klassen.

Wenn man jetzt aber das ganze für Angular 2 möchte, wo alle Styles und Scripts nur noch aus dem node_modules Ordner referenziert werden und das Projekt mit Hilfe von Webpack gebaut wird. Gibt es nicht mehr “einfach” so die IntelliSense für die CSS Klassen.

Auch auf Addons wie Glyphfriend kann man leider nicht zurückgreifen, denn hier muss man die IntelliSense für HTML und CSS im Resharper ausstellen, damit die IntelliSense von Visual Studio greift. Dann hat man aber keine Autovervollständigung von Angular 2 Variablen im HTML Template mehr – was meiner Meinung nach noch wesentlich wichtiger ist.

Hier bleibt meines Wissens aktuell leider nur eine Möglichkeit, man kopiert sich die passenden css Dateien aus dem node_modules Ordner und fügt die Dateien bei sich im Projekt ein und macht noch einen Vermerk das die Dateien nur für die IntelliSense im Projekt enthalten sind aber nicht direkt referenziert werden.

image

wie man sieht hat man dann auch IntelliSense für Bootstrap 4 und die Klassen sind nicht alle unterstrichen (was normalerweise bedeutet das er die Klasse nicht kennt).

image

Auch font awesome geht wieder.

image

Advertisements

Out of Memory Exception beim EF Debuggen im IIS Express


Bisher noch nie vorgekommen, aber es gibt immer ein erstes mal. Heute hatte ich beim Abrufen großer Datenmengen um einen Cache zu befüllen auf einmal eine “Out of Memory” Exception, obwohl mein Visual Studio vom RAM her sehr gut aussah und auch noch genug RAM zur Verfügung stand.

Leider gibt die Fehlermeldung auch nicht mehr her, weder Stacktrace, noch eine Innerexception. Daher erst einmal Google befragt und hier findest sich auch nicht wirklich etwas brauchbares, außer das man wahrscheinlich in einer x86 Anwendung arbeitet oder seinen Code in x86 kompiliert hat. Das war bei mir aber nicht der Fall, ich habe alles mit “AnyCpu” kompiliert.

Leider weiß ich nicht mehr wie ich auf die Idee kam, das es ja auch am IIS Express liegen könnte, denn auf dem Server wo die Anwendung bereits ausgerollt war funktionierte es ja bestens. Und siehe da standardmäßig nimmt VS den IIS Express mit 32Bit und wieder habe ich ein Optionsmenü in VS gesehen was ich bisher noch nicht kannte, in dem man einstellen konnte das VS den IIS Express standardmäßig mit 64Bit startet.

Extras => Optionen => Projekte und Projektmappen => Webprojekte

image

und “schon” war meine “Out of Memory” Exception beim Abrufen von EF Daten in meiner Webanwendung gelöst.

Kommerzielle Ui Framworks für Angular 1 / 2 (Telerik, DevExpress, …)


Es gibt zwar eine Menge kostenlose Ui Frameworks für AngularJs, diese beinhalten aber meist nur die Standardkomponenten und z.B. kein richtiges Data Grid. Da ich aber ein richtiges Data Grid benötigte, musste ich mich also nach kommerziellen Lösungen umsehen. Bei den kommerziellen Lösungen habe ich leider keines finden können welches Nativ in AngularJs 1.x geschrieben ist. Außer Ionic, aber dabei handelt es sich um ein pures Mobile Framework. Für die Standardwebanwendungen gibt nur Lösungen die im Kern auf jQuery setzen und dann nach außen hin einen Angular “Wrapper” / Schnittstelle anbieten, so dass man denkt man verwendet native Angular Komponenten. Dafür gibt es inzwischen bei allen Anbietern TypeScript Support, mit Hilfe von passenden Typings für das jeweilige Framework, ist IntelliSense dann auch kein Problem mehr.

Am Ende habe ich nur vier Anbieter finden können, die mir zugesagt haben, die zumindest laut Webseite eine Angular 1 Integration bieten. Dabei handelte es sich um

1. DevExpress mit DevExtreme

Wie schon anfangs erwähnt handelt es sich bei der Angular 1.x Umsetzung um einen Wrapper mit dem alle DevExtreme Controls auch für Angular bereitstehen. Bei DevExtreme handelt es sich um die günstigste Lösung, wenn man nur auf JavaScript Webkomponenten angewiesen ist. Die Dokumentation ist spitze und enthält live Beispiele die man direkt anpassen und ausprobieren kann. Außerdem gibt es einen Themebuilder in dem ich meine Bootstrap 3 Variablen einlesen kann und DevExtreme dann entsprechend meine gewohnten Styles verwendet für Bootstrap 3. Außerdem scheint es ein recht aktives Forum zu geben in dem DevExpress Mitarbeiter zu vielen Fragen die passenden Antworten liefern.

Da die Grundvoraussetzungen sehr gut waren, habe ich hier auch die Trial Version ausprobiert und meine erste simple Angular 1.x Anwendung mit einer DevExtreme Textbox die an das ngModel gebunden wurde, hat auch nicht länger wie 20 Minuten gedauert (sehr gute Dokumentation). Leider musste ich bereits hier feststellen, das die Implementierung nicht Angular Like umgesetzt wurde. Denn die Eingabe in das Textfeld wurde erst dann in meine lokale Angular Variable zurückgeschrieben wenn ich das Textfeld verlassen habe (also kein “natives” TwoWayModel Binding out of the box). Außerdem konnte ich für die Validierung nicht wie gewohnt über AngularJs gehen und die Form Variablen wie $valid … verwenden, sondern hier muss ein eigener Validator von DevExtreme verwendet werden, was das Zusammenspiel von eigenen Angular Komponenten und DevExtreme quasi “unmöglich” macht. Wenn man also ein Formular mit Validierung bauen möchte, verwendet man am Besten nur DevExtreme Komponenten.

Dann habe ich noch die Autocomplete Textbox ausprobiert und versucht eine Serverseitige Abfrage für die Autocomplete Elemente zu implementieren, was mir nach 4 Stunden nur zum Teil gelungen ist und ich mit der Implementierung nicht wirklich zufrieden war.

Für DevExtreme gibt es aktuell eine Angular 2 Implementierung im CTP Status – zum ausprobieren. Dabei handelt es sich aber ebenfalls um einen Wrapper der wieder auf jQuery zurückgreift. Hier hat man dann aber anscheinend wieder alle gewohnten DevExtreme Funktionen auch in Angular 2 Anwendungen zur Verfügung.

2. Infragistics mit Ignite UI

Hier wird zwar auf der Webseite mit AngularJs geworben, aber es wird nur auf ein GitHub Repository verwiesen, was nur einen Bruchteil der Controls enthält die für das normale Ignite UI mit jQuery zur Verfügung stehen. Außerdem ist die Dokumentation mehr als nur fragwürdig, zumindest für die Angular Implementierung. Auch die angebotene Angular 2 Implementierung hat zumindest Abhängigkeiten auf jQuery und dies hört sich im ersten Moment nicht nach einer nativen Implementierung an.

Aufgrund der “schlechten” Grundvoraussetzungen habe ich hier auch keine Trial Version ausprobiert. Denn das Produkt kam schon aufgrund der schlechten Dokumentation und wenigen Controls für Angular nicht mehr in die nähere Auswahl.

3. Syncfunctions

Auch hier handelt es sich um eine recht große Anzahl an Controls die einem zur Verfügung stehen und für die es einen Angular 1.x und Angular 2 Wrapper gibt. Leider war auch hier die Dokumentation für die AngularJs Integration bzw. jQuery so schlecht, das es keine Live Beispiele gab, sondern nur Code Snippets mit passenden Screenshots dazu. Aufgrund der schlechten Dokumentation habe ich auch hier keine Testversion ausprobiert.

4. Telerik mit Kendo UI

Auch Telerik bietet für die Angular 1 Integration nur einen Wrapper an, dieser ist aber meiner Meinung nach wesentlich besser wie der von DevExtreme. Denn hier bin ich nicht komplett auf die Controls von Kendo UI angewiesen, sondern kann auch problemlos meine eigenen Controls verwenden wenn ich z.B. ein Formular mit Validierung erstellen möchte. Denn die Controls von Kendo UI integrieren sich “fast” nahtlos in die Angular Welt. Wichtig ist hier die passenden Dokumentationsschritte für AngularJS zu lesen, dann versteht man auch die normale Dokumentation etwas besser, wenn man hier teilweise nicht direkt etwas von AngularJs liest. Außerdem ist die Dokumentation sehr gut, es gibt Live Beispiele die man auch direkt bearbeiten kann und sieht was sich ändert. Auch Kendo UI stellt einen Themebuilder zur Verfügung, der zumindest einen rudimentären Support für Bootstrap bereitstellt. Leider wird bei den Icons noch auf das Sprite Image mit Icons von Bootstrap 2 gesetzt. Damit ist der Themebuilder leider nicht so gut wie der von DevExtreme, wenn es um die Bootstrap Integration geht.

Da aber auch hier die Grundvoraussetzungen gepasst haben, habe ich die Testversion ausprobiert und hatte bereits nach 20 Minuten meine erste AngularJs Anwendung mit einem DatePicker erstellt. Außerdem war es mir möglich innerhalb von 3 Stunden eine Autocomplete Textbox mit Serverseitiger Abfrage zu erstellen ohne größere Probleme, was mir in DevExtreme nicht gelungen ist.

Auch Kendo UI stellt eine Angular 2 Implementierung seiner Controls zur Verfügung, diese werden aber gerade komplett neu nativ in Angular 2 erstellt und daher gibt es auch erst eine Beta mit nur ein paar Controls. Es gibt aber eine gut einsehbare Timeline und Kommunikation in der gesagt wird wie der aktuelle Releaseplan aussieht.

5. Fazit

Prinzipiell blieben nur zwei Frameworks übrig zwischen denen ich mich entscheiden musste, denn nur bei DevExtreme und Kendo UI waren wirklich sehr gute Dokumentationen vorhanden. Denn die Dokumentation muss bei der puren Anzahl an Einstellungsmöglichkeiten, die für die einzelnen Controls zur Verfügung stehen einfach sehr gut ausfallen, sonst ist man nur auf den Support des Anbieters angewiesen. Da ich aber auch weiterhin eigene AngularJs Controls verwenden wollte, war mir eine möglichst native AngularJs Integration auch sehr wichtig und daher verwende ich aktuell Kendo UI.

Mit der aktuellen Kendo UI Version, habe ich bisher das Grid und das Gantt Chart verwendet und hier merkt man teilweise schon sehr das hier eine jQuery Implementierung vorliegt und keine native AngularJs Implementierung. Trotzdem bin ich mit dem was das Grid bzw. das Gantt Chart kann sehr zufrieden und es gliedert sich soweit auch ganz gut in meine AngularJs Anwendung ein. Außerdem ist der Support bisher auch ganz gut, dieser antwortete in der Regel innerhalb von 2 Tagen, bisher auf jedes Problem was ich hatte und keinen passenden Forumseintrag finden konnte. Bei der Verwendung von “einfachen” Controls wie der Datepicker, denkt man schon “fast” das man eine reine AngularJs Implementierung vorliegen hat. Außerdem bin ich auf die nativen Angular 2 Implementierungen vom Kendo UI gespannt.

HINWEIS: Wer sich für ein kommerzielles UI Framework für AngularJs interessiert, dem würde ich meiner Meinung nach auf jeden fall empfehlen das er DevExtreme und Kendo UI einmal selbst ausprobiert und prüft womit man selbst am besten klar kommt.

Außerdem möchte ich darauf hinweisen, das ich beide Frameworks vorher noch nicht verwendet habe und mir durchaus auch ein Fehler bei der Verwendung von DevExtreme unterlaufen sein kann, warum ich z.B. die Autocomplete Textbox nicht mit meinen Ansprüchen zum Laufen bekommen habe oder das TwoWay Databinding nicht so funktionierte wie von mir erwartet.

Hyper-V Entwickler Maschine mit Windows 10 von Microsoft “einrichten”


Microsoft bietet seit kurzem auch Windows 10 Pro Hyper-V Images als Entwickler Maschinen zum Download an die nicht automatisch ablaufen, sondern die mit Hilfe eines Windows 10 Pro Keys aktiviert werden können. Der Lizenz Key muss nicht direkt beim Einrichten eingegeben werden, damit kann die Maschine auch Problemlos ein paar Tage ohne Lizenz betrieben werden. Der Download vom Hyper-V Image ist 20GB groß und es ist bereits die Visual Studio 2015 Community Edition installiert und noch einige Andere SDKs.

Voraussetzungen für den Betrieb von Hyper-V unter Windows 10

Wer Hype-V selbst noch nicht installiert hat, findet es unter “Programme und Features” bei “Windows-Features aktivieren oder deaktivieren” meine Installationseinstellungen sehen z.B. folgendermaßen aus

image

Nachdem man Hyper-V erfolgreich installiert hat, findet man unter Start jetzt auch den “Hyper-V-Manager”.

image

Damit wir später beim Einrichten des Images weniger Probleme haben, muss im Bios für den Prozessor auch die Virtualisierung aktiviert sein, bei meinen bisherigen Rechnern war dies meist standardmäßig im Bios deaktiviert.

Außerdem kam beim Start des Images folgende Fehlermeldung:

Virtual machine [VM Name] could not be started because the hypervisor is not running”

Dafür musste ich auf der Admin Konsole folgenden Befehl eingeben, damit der passende Dienst auch immer gestartet wird.

bcdedit /set hypervisorlaunchtype auto

Damit sollten zumindest die Vorrausetzungen geschaffen sein, damit man das Hyper-V Image auch starten kann.

Einrichten des Hyper-V Images

Nach dem Entpacken des Hyper-V Downloads sieht die Ordern Struktur folgendermaßen aus

image

Jetzt einfach den “Hyper-V-Manager” starten und bei Aktion –> Neu –> Virtueller Computer auswählen und einen passenden Namen für den Computer angeben

image

Die erste Generation wählen und danach angeben wieviel RAM der Rechner haben soll und bei Netzwerk Konfiguration, erst einmal “Nicht verbunden” einstellen (wie wir Zugang zum Internet bekommen wird weiter unten erklärt).

image

Bei der Auswahl der Virtuellen Festplatte, jetzt die VHD auswählen die wir vorher entpackt haben und das ganze fertigstellen.

image

Jetzt kann man zwar Windows starten, aber der Zugang zum Internet muss noch eingerichtet werden. Dafür muss im “Hyper-V-Manager” unter Aktion –> Manager für virtuelle Switches… ausgewählt werden.

 

image

Dann unter “Neuer Virtueller Netzwerkswitch” “Extern” auswählen und den Virtuellen Switch erstellen.

image

und dann einen passenden Namen vergeben und bei “Externes Netzwerk” eure Externe Netzwerkkarte auswählen

image

Jetzt kann man bei den Einstellungen für seinen Virtuellen Rechner

image

Bei Netzwerkkarte den neu angelegten Virtuellen Switch bei mir “LAN Extern” genannt auswählen und man sollte in der VM auch Zugriff auf das Internet haben.

image

So jetzt kann man den Virtuellen Computer starten und muss nur noch ein paar Installationseinstellungen für Windows 10 vornehmen und schon kann man loslegen und Visual Studio auf der Developer Maschine verwenden.

Package Installer Extension für Visual Studio


Inzwischen sollte man auch als .NET Webentwickler mitbekommen haben, das es neben NuGet auch noch npm und weitere Paketmanager gibt. Hier gibt es wie auch bei NuGet eine Konsole, aber meist keine direkte Visual Studio Integration. In den meisten Fällen möchte man aber nur schnell ein Paket installieren und nicht erst in die Doku schauen welche Konsolenbefehle man dafür genau benötigt. Genau hier kommt jetzt die Package Installer Extension zum Einsatz.

image

Mit dem Package Installer kann man Bower, npm, TSD, Typings oder NuGet Pakete sehr einfach und schnell installieren.

Wenn die Visual Studio Extension einmal installiert ist, steht mit einem Rechtsklick auf das Projekt der Menüpunkt “Quick Install Package…” zur Verfügung.

image

Hier öffnet sich dann ein kleines Popup in dem man die Quelle auswählen kann und danach gibt man nur noch den Paketnamen an.

image

Und der Package Installer lädt das passende Paket herunter und legt auch die passende Konfigurationsdatei an wie z.B. “typings.json” oder “package.json”.

Blokierende Parallele AJAX Requests und ASP.NET


Bis gestern dachte ich eigentlich das ich mich in ASP.NET ganz gut auskenne, aber da wollte es mir ASP.NET mal wieder richtig zeigen, das man auch hier nie auslernt. Denn wenn man mehrere AJAX Requests parallel startet um die Daten für einen View asynchron zu laden und in einem der Requests in die Session schreibt, dann werden die AJAX Requests zwar laut Browser zum gleichen Zeitpunkt abgeschickt, aber von ASP.NET der Reihe nach abgearbeitet und nicht parallel. Diese Problematik tritt auch nur dann auf wenn man in die Session schreibt.

1. Das Beispiel ohne Sessionzugriff – hier funktioniert alles wie erwartet

//Controller Code

public JsonResult LoadTodoItem(int todoItemId)
{
    System.Threading.Thread.Sleep(2000);
    return Json(TodoCreateModelBuilder.LoadTodoItem(todoItemId), JsonRequestBehavior.AllowGet);
}

public JsonResult LoadTodoItem2(int todoItemId)
{
    System.Threading.Thread.Sleep(4000);
    return Json(TodoCreateModelBuilder.LoadTodoItem(todoItemId), JsonRequestBehavior.AllowGet);
}

public JsonResult LoadTodoItem3(int todoItemId)
{
    System.Threading.Thread.Sleep(6000);
    return Json(TodoCreateModelBuilder.LoadTodoItem(todoItemId), JsonRequestBehavior.AllowGet);
}

TypeScript (Angular) Aufruf für diese Funktionen

 init() : void {
     this.todoSrv.loadTodoItem(this.todoId).then((result: My.ITodoCreateViewModel) => {
         this.viewModel = result;
     });
     this.todoSrv.loadTodoItem2(this.todoId).then((result: My.ITodoCreateViewModel) => {
         this.viewModel = result;
     });
     this.todoSrv.loadTodoItem3(this.todoId).then((result: My.ITodoCreateViewModel) => {
         this.viewModel = result;
     });
 }

Das Zeitdiagramm im Browser beim Aufrufen:

image

2. Beispiel mit dem Zugriff auf die Session im Controller – keine Parallele Verarbeitung in ASP.NET

Hier ändert sich nur der Controller um den Sessionzugriff, aber nicht der Aufruf im TypeScript (Angular).

public JsonResult LoadTodoItem(int todoItemId)
{
    Session["test"] = "blubb";
    System.Threading.Thread.Sleep(2000);
    return Json(TodoCreateModelBuilder.LoadTodoItem(todoItemId), JsonRequestBehavior.AllowGet);
}

public JsonResult LoadTodoItem2(int todoItemId)
{
    System.Threading.Thread.Sleep(4000);
    return Json(TodoCreateModelBuilder.LoadTodoItem(todoItemId), JsonRequestBehavior.AllowGet);
}

public JsonResult LoadTodoItem3(int todoItemId)
{
    System.Threading.Thread.Sleep(6000);
    return Json(TodoCreateModelBuilder.LoadTodoItem(todoItemId), JsonRequestBehavior.AllowGet);
}

Dabei ist zu beachten, wenn man auf die Controller Funktionen das erste mal zugreift, dann hat man ein Ablaufdiagramm wie oben und man “denkt” es hat alles geklappt. Wenn man dann aber auf die Funktionen ein zweites mal zugreift, dann kommt es zu dem hier dargestellten Ablaufdiagramm, in dem man schön sehen kann das sich die Zeiten addieren und nicht mehr parallel ablaufen. Obwohl das Zeitdiagramm des Browsers dies anders suggeriert, denn hier starten alle Aufrufe parallel.

image

Wenn man von diesem Laufzeitverhalten aber noch nie etwas gehört hat, dann kann die Suche hier schon etwas Zeit in Anspruch nehmen. Natürlich gibt es auch für dieses Problem eine Lösung und nachdem ich wusste wo das Problem liegt habe ich auch schnell Artikel im Netz dazu gefunden:

http://johnculviner.com/asp-net-concurrent-ajax-requests-and-session-state-blocking/

http://www.stefanprodan.com/2012/02/parallel-processing-of-concurrent-ajax-requests-in-asp-net-mvc/

http://weblogs.asp.net/imranbaloch/concurrent-requests-in-asp-net-mvc

JavaScript IntelliSense mit Visual Studio 2013


Schon oft habe ich versucht mit der IntelliSense von JavaScript und Visual Studio 2013 warm zu werden, meist hat dies aber nicht wirklich funktioniert. Jetzt habe ich mich doch noch einmal damit auseinander gesetzt und es sogar hinbekommen. Dabei ist es eigentlich ganz einfach, wenn man einmal weiß worauf man zu achten hat.

Damit die IntelliSense für JavaScript im VS 2013 auch funktioniert, ist die Datei “_references.js” direkt im “Scripts” Ordner notwendig (per Konvention). In dieser Datei werden alle JavaScript Dateien referenziert für die man eine intelligentere IntelliSense von VS angezeigt bekommen möchte, z.B.:

image

Datei “_references.js”:

/// <autosync enabled="true" />
/// <reference path="jquery-2.1.3.js" />
/// <reference path="jquery-2.1.3.intellisense.js" />
/// <reference path="angular.js" />
/// <reference path="angular.intellisense.js" />
/// <reference path="moment-with-locales.min.js" />
/// <reference path="bootstrap.js" />
/// <reference path="testApp.js" />

Damit die Dateien hier erscheinen gibt es zwei Möglichkeiten.

1. Man fügt diese hier selbst per Drag And Drop hinzu, in dem man einfach eine JavaScript Datei anklickt und in die Datei “schiebt”

2. Man kann über die rechte Maustaste der Datei “_references.js” das Untermenü aufrufen und hier findet man die folgenden zwei Menüpunkte:

image

Wenn man auf “Update JavaScript References” klickt, dann werden alle JavaScript Dateien des aktuellen Projekts der Datei hinzugefügt. Wenn man dann noch “Auto-sync JavaScript References” auswählt, dann wird der Datei der Eintrag “autosync” hinzugefügt, der bereits in meinem Beispiel vorhanden ist. Wenn die “autosync” Funktion aktiviert ist, erkennt VS von selbst wenn neue Dateien dem Projekt hinzugefügt werden und fügt diese von selbst der “_references,js” hinzu. Außerdem werden Dateien auch automatisch umbenannt oder wenn man diese Verschiebt wird der Pfad in der “_references.js” Datei von VS automatisch angepasst.

So das war es prinzipiell schon zum “aktivieren” vom “verbessertem” JavaScript für das Visual Studio. Wer sich aber die Referenzliste oben genau anschaut, der erkennt schnell, das hier z.B. auch zwei Dateien verlinkt sind die “*.intellisense.js” heißen. Dabei handelt es sich um eine erweiterte IntelliSense für diese Bibliotheken, soweit ist weiß (hier bin ich gern für Kommentare offen). Es kann zumindest nicht schaden, diese Dateien zumindest für jQuery einzubinden, denn ich bekomme hier z.B. die folgende IntelliSense angezeigt:

image

Wenn man eigene JavaScript Dateien schreibt und hier auch eine IntelliSense mit Kommentaren und Typen haben möchte, dann kann man einfach JsDoc Kommentare in den eigenen JavaScript Dateien einfügen, z.B.:

/**
 * Erstellen eines Benutzers
 * 
 * @param {string} name Der Name des Benutzers der angelegt werden soll
 * @param {number} alter Das Alter des Benutzers der angelegt werden soll
 * @returns {boolean} 
 */
function CreateUser(name, alter) {
    //Wurde erfolgreich erstellt
    return true;
}

/**
 * Erstellen eines Benutzers
 * 
 * @param {string} name Der Name des Benutzers der angelegt werden soll
 * @param {string} nachname Der Nachname des Benutzers der angelegt werden soll
 * @param {number} alter Das Alter des Benutzers der angelegt werden soll
 * @returns {boolean} 
 */
function CreateUser(name, nachname, alter) {
    //Wurde erfolgreich erstellt
    return true;
}

Dann erhält man zumindest eine einfache IntelliSense wenn man auf diese Funktionen zugreift:

image

Probleme beim Einstellen der IntelliSense für JavaScript

Natürlich hatte ich auch Probleme beim Einrichten der IntelliSense und bei mir lag es primär an der Verwendung von Resharper. Denn wenn ich die IntelliSense von Resharper für JavaScript verwendet habe, dann wurde immer nur “alles” angezeigt und nicht “intelligent” ausgewählt. Erst nachdem ich die IntelliSense von Resharper für JavaScript deaktiviert hatte unter “Resharper –> Options –> Environment –> IntelliSense –> General” habe ich einfach “Custom IntelliSense” eingestellt und für JavaScript deaktiviert bzw. VS aktiviert. Dann habe ich noch in den Visual Studio Optionen unter “Tools -> Options –> Text Editor –> JavaScript –> General” die folgenden beiden Optionen ausgewählt und dann wurde auch die passende IntelliSense im Editor angezeigt.

image

Außerdem ist die Liste der IntelliSense Optionen für eine Bibliothek sinnvoll beschränkt. Wie z.B. für MomentJs werden nur die passenden Funktionen angezeigt.

image

Ob die IntelliSense für JavaScript bei Resharper immer Probleme macht, kann ich nicht beurteilen, ich zumindest habe das Verhalten bei mehreren Installationen so beobachten können.