Visual Studio Tipps & Tricks, Teil 58: Windows 10 Extension SDK APIs erkennen

In einem vorherigen Blogpost bin ich bereits ausgiebig auf eines der für mich wichtigsten Features von Windows 10 eingegangen: Die Möglichkeit Code auf unterschiedlichen Geräteklassen ausführen zu lassen. Das heißt, man schreibt Quellcode wirklich nur noch einmal, die Plattform bringt alle notwendigen Voraussetzungen mit, um dem Entwickler das Leben einfach zu machen.

Um trotzdem auf Eigenschaften und APIs zugreifen zu können, die an spezielle Hardware gebunden sind, bedarf es sogenannter “Extension SDKs”, zur Laufzeit arbeitet der Entwickler dann mit Feature-Detection, um zu sehen, ob eine API tatsächlich vorhanden ist.

Inzwischen habe ich mit dieser Botschaft einige User Groups besucht und bei nicht wenigen wurde hier – nachvollziehbar – die Frage nach einer Toolunterstützung gestellt. Der Wunsch war: Wenn man innerhalb des eigenen Codes auf APIs zugreift, die aus Extension SDKs kommen (z.B. die StatusBar aus dem Mobile SDK), dann wäre es wünschenswert, wenn man zur Designzeit (also noch während des Programmierens) darauf hingewiesen wird, dass man als Entwickler dafür zu sorgen hat, dass zur Laufzeit nicht auf ein Objekt zugegriffen wird, das es gar nicht gibt, indem man zum Beispiel über den ApiInformation Namespace IsTypePresent verwendet.

Die Antwort war bisher immer: Das ginge zwar technisch (schließlich müsste man ja nur sehen, von wo eine API stammt), gibt es aber aktuell nicht. Ein eher schwacher Trost war, dass man die Extension SDKs ja auch manuell einbinden musste und von daher zu hoffen ist, dass man weiß was man tut.

Gute Neuigkeiten:

Auf Nuget findet sich ein Package des Autoren Lucian Wischik , mit dem man angezeigt bekommt, ob man eine API aufruft, die aus einem Extension SDK kommt: Den Platform Specific Analyzer:  https://www.nuget.org/packages/PlatformSpecific.Analyzer

Dieses kann man ganz einfach in seine eigene App integrieren….

image

Wenn ich anschließend Code einfüge, um zum Beispiel die StatusBar anzusprechen, bekomme ich durch eine grüne Markierung, den Hinweis, dass hier eventuell etwas nicht stimmt. Als Tooltip erhalte ich den Hinweis: “Platformspecific Code”.

image

Die kleine Glühbirne bietet mir auch gleich eine Lösung an.

image

Wie erwartet ist die naheliegende Lösung hier einfach ein “IsTypePresent” außen herum zu bauen. Alternativ könnte ich auch die Klasse oder Methode als plattformspezifisch flaggen, um die Fehlermeldung loszuwerden. (Dann muss ich mich aber nach wie vor selbst darum kümmern, wie ich mit dem Code umgehe.)

Ich denke, die Extension zeigt – mal wieder – recht eindrucksvoll, wie wertvoll es ist, dass Visual Studio erweiterbar ist. Im Prinzip kann jeder, der ein Feature vermisst sich das Feature selbst nachimplementieren. Im Falle von Lucian Wischiks Extension ist diese sogar vollständig auf GitHub auch in Quelltextform zu finden.

Tl;dr: Das Nuget Package Platform Specific Analyzer warnt bei APIs aus Extension SKDs.

 

Kurzer Text am Rande:

Dieser Post ist Teil einer längeren Serie, in der ich ein paar der vielleicht nicht ganz so bekannten Features von Visual Studio vorstellen werde. Ich hoffe, für Euch ist der ein oder andere Kniff dabei, den Ihr noch nicht kanntet. Und wenn ihr ihn doch schon kennt: Seid stolz auf Euch und verratet den Trick auch dem Entwickler neben Euch.