Connect(); 2016

Band 31, Nummer 12

Visual Studio-Entwicklung: Vorstellung von Visual Studio für Mac

Von Mikayla Hutchinson; 2016

Bei Connect(); stellt Microsoft im November eine Preview von Visual Studio für Mac vor. Dabei handelt es sich um eine spannende Entwicklung, bei der die für mobile Geräte konzipierte Xamarin Studio-IDE sich in ein echtes primär auf Mobil- und Cloudtechnologie ausgelegtes Entwicklungstool für .NET und C# verwandelt und die Visual Studio-Entwicklungsbenutzeroberfläche für den Mac bereitstellt.

Ein neues Mitglied der Visual Studio-Produktfamilie

Im Kern ist Visual Studio für Mac das macOS-Gegenstück zur Windows-Version von Visual Studio. Wenn Ihnen die Visual Studio-Entwicklungsbenutzeroberfläche gefällt, macOS aber verwendet werden muss oder soll, wird Ihnen diese Umgebung sofort vertraut sein. Die UX ist von Visual Studio inspiriert, Aussehen und Verhalten lehnen sich jedoch an das native Erscheinungsbild von macOS an. Ebenso wie bei Visual Studio für Windows steht Visual Studio Code zur Verfügung, wenn keine vollständige IDE benötigt wird und ein einfacher und dennoch leistungsfähiger eigenständiger Quellcode-Editor ausreicht.

Hinter den Kulissen besitzt Visual Studio für Mac auch zahlreiche Gemeinsamkeiten mit den Geschwisterprodukten der Visual Studio-Produktfamilie. Für IntelliSense und Refactoring wird die Roslyn-Compilerplattform verwendet. Das Projektsystem und das Buildmodul verwenden MSBuild, und der Quellcode-Editor unterstützt TextMate-Bundle. Das Produkt verwendet die gleichen Debuggermodule für Xamarin- und .NET Core-Apps und die gleichen Designer für Xamarin.iOS und Xamarin.Android.

Kompatibilität ist ein wichtiger Aspekt von Visual Studio für Mac. Es handelt sich um ein neues Produkt, das nicht alle Visual Studio-Projekttypen unterstützt. Bei allen Gemeinsamkeiten wird jedoch das gleiche MSBuild-Projektmappen- und -Projektformat unterstützt. Wenn Teammitglieder unter macOS und Windows arbeiten oder Sie selbst zwischen den beiden Betriebssystemen wechseln müssen, können Sie Ihre Projekte problemlos plattformübergreifend gemeinsam verwenden. Es ist keine Konvertierung oder Migration erforderlich.

Primär auf Mobil- und Cloudtechnologie ausgelegte Entwicklung

Die von Visual Studio für Mac unterstützten primären Arbeitsauslastungen sind die nativen iOS-, Android- und Mac-Entwicklungen über Xamarin sowie die Serverentwicklung über .NET Core mit Azure-Integration. Das Produkt stellt alle Tools bereit, die Sie für die Entwicklung der leistungsfähigen, nativen mobilen App-Benutzeroberflächen benötigen, die Benutzer in der heutigen Zeit erwarten, sowie die cloudbasierten Server-Back-Ends, die diese Tools im Hintergrund unterstützen.

Der Schlüssel für diese Leistungsfähigkeit ist die Programmiersprache C#, die Sie kennen und schätzen. Die aktuellen C# 7-Produktivitätsoptimierungen sind ebenfalls verfügbar. Sie können die Leistungsfähigkeit kompilierten Codes, die Produktivität einer modernen typsicheren Sprache, Zugriff auf die einzigartigen Features jeder Plattform sowie ein reichhaltiges Ökosystem von Bibliotheken und Tools nutzen. Sie können die vorhandene Benutzeroberfläche in den mobilen und Clouddomänen verwenden und Code zwischen dem Client und dem Server freigeben. Da alle Ihre Projekte in einer Projektmappe zusammengefasst sind, können Sie projektmappenweites und projektübergreifendes Refactoring nutzen. Gleiches gilt für die Codenavigation.

C# ist nicht die einzige Programmiersprache, die in der Preview von Visual Studio für Mac unterstützt wird. Für die funktionalen Programmierer unter Ihnen wird auch ausgezeichnete F#-Unterstützung bereitgestellt, für die der gleiche F#-Compiler verwendet wird, der auch in Visual Studio zum Einsatz kommt.

iOS, Android und Mac

Durch den vielfältigen heutigen Markt für mobile Geräte ist es wichtig, für eine möglichst breite Palette von Zielgeräten zu entwickeln. Weil Visual Studio für Mac auf Xamarin Studio basiert, bietet das Produkt ausgereifte Unterstützung für die auf C# basierende iOS-, Android- und Mac-Entwicklung mit der Xamarin-Plattform. Sie können die vorhandene C#-Benutzeroberfläche und die Bibliotheken verwenden und gemeinsamen Code plattformübergreifend mit vollständigem Zugriff auf die nativen APIs freigeben, damit Sie eine schnelle und ansprechende native App-Benutzeroberfläche erstellen können.

Für noch umfangreichere Codefreigabe können Sie die plattformübergreifende Xamarin.Forms-UI-Bibliothek verwenden, die eine vertraute, auf XAML basierende Entwicklungsumgebung für mehrere Plattformen (einschließlich iOS, Android, macOS und UWP) bereitstellt und eine Zuordnung zur nativen Benutzeroberfläche auf jeder Plattform ermöglicht. UWP-Entwicklung (universelle Windows-Plattform) wird zurzeit jedoch nur in Visual Studio unterstützt. Wenn mehr Kontrolle erforderlich sein sollte, können Sie Xamarin.Forms mit dem direkten Zugriff auf die nativen Toolkits frei kombinieren. Für Xamarin steht über NuGet auch eine große Auswahl von Bibliotheken zur Verfügung, z. B. plattformspezifische Bibliotheken, Bindungen an nativen Code und portable .NET-Standardbibliotheken.

Ebenso wie Visual Studio verfügt Visual Studio für Mac über Drag & Drop-Designer für die iOS- und Android-Entwicklung, mit denen Sie Ihre Benutzeroberfläche schnell assemblieren und optimieren können. Für Xamarin.Forms sind leistungsfähige XAML IntelliSense-Funktionen sowie eine parallele Livevorschau verfügbar. Abbildung 1 zeigt dies. Der Designer und die Livevorschau verwenden einen Simulator, um Ihre App genau so zu rendern, wie sie auf dem Gerät aussehen wird. Dies funktioniert sogar für benutzerdefinierte Steuerelemente.

Die Xamarin.Forms XAML-Livevorschau
Abbildung 1: Die Xamarin.Forms XAML-Livevorschau

Cloud an vorderster Front

Im Hintergrund beinahe jeder mobilen App wird ein Dienst ausgeführt, und durch Visual Studio für Mac wird die Entwicklung des Diensts Ihrer App durch Unterstützung der aktuellen ASP.NET Core Web-Entwicklungsplattform vereinfacht. ASP.NET Core wird unter .NET Core ausgeführt, der aktuellen Version von .NET Framework und der zugehörigen Runtime. Die Anwendung wurde für superschnelle Leistung optimiert, für kleine Installationsgrößen konzipiert und für die Ausführung unter Linux und macOS sowie Windows überarbeitet.

.NET Core bietet Ihnen große Flexibilität bei der Entwicklung und Bereitstellung Ihrer Serveranwendung. Sie können entscheiden, wie und wo diese erfolgt, z. B. im eigenen Datencenter oder auf einer Cloudplattform wie Microsoft Azure. Da .NET Core und die Xamarin-Plattform Open Source sind, stellt Lieferanten-Lock-in kein Problem dar.

Die Visual Studio für Mac-Unterstützung für .NET Core-Projekte ermöglicht außerdem das Schreiben von .NET-Standardbibliotheken, die ein neues und innovatives Verfahren zum Freigeben von Code für .NET-Plattformen bereitstellen. .NET-Standardbibliotheken ersetzen portable Klassenbibliotheken (Portable Class Libraries, PCLs) und bieten eine viel breite gefächerte API-Oberfläche. Da .NET Core und die Xamarin-Plattform mit dem .NET-Standard kompatibel sind, eignen sie sich hervorragend für das Freigeben von Code, z. B. in Ihrer Projektmappe sowie über den NuGet-Paket-Manager.

Ein vertrauter Arbeitsbereich

Der Arbeitsbereich von Visual Studio sollte Entwicklern, die bereits mit Visual Studio arbeiten, vertraut sein. Beim ersten Öffnen werden eine Willkommenseite mit einer Liste der zuletzt geöffneten Projektmappen, ein Feed mit Entwicklerneuigkeiten und andere Informationen angezeigt, die Sie bei Ihren ersten Schritten unterstützen.

Wenn Sie eine neue Projektmappe erstellen möchten, navigieren Sie zum Menü „Datei“ und wählen dann „Neues Projekt“ aus. Nun wird der Arbeitsbereich angezeigt, der Ihre neue Projektmappe enthält. Wie in Abbildung 2 gezeigt, ist ein zentraler Quellcode-Editor mit Registerkarten verfügbar, um den weitere angedockte Fenster oder „Pads“ angeordnet sind, z. B. „Projektmappe“, „Ausgabe“, „Eigenschaften“, „Dokumentgliederung“ und „Toolbox“. Ebenso wie in Visual Studio kann dieses Layout weitgehend angepasst werden, und es ändert sich automatisch abhängig von der ausgeführten Aufgabe: Codieren, Debuggen oder Verwenden des Drag & Drop-Designers.

Der Visual Studio für Mac-Arbeitsbereich
Abbildung 2: Der Visual Studio für Mac-Arbeitsbereich

Die Symbolleiste ist ebenfalls vertraut, weist aber dennoch einige Unterschiede auf:

Auf der linken Seite befindet sich die Schaltfläche „Ausführen“, eine Dropdownliste zum Auswählen der aktiven Konfiguration sowie Dropdownlisten zum Auswählen der Ausführungskonfiguration und des Zielgeräts. Bei der plattformübergreifenden Entwicklung für mobile Geräte ist es wichtig, dass das Gerät oder der Simulator auf einfache Weise umgeschaltet werden kann, auf oder in dem die App getestet oder debuggt wird. Die Ausführungskonfiguration ähnelt dem Startprojekt in Visual Studio. Sie können jedoch nicht nur das Projekt umschalten, das ausgeführt wird, sondern auch benutzerdefiniert benannte Sammlungen von Ausführungsoptionen erstellen.

In der Mitte der Symbolleiste befindet sich ein Infobereich, der Meldungen zu verschiedenen Vorgängen anzeigt, z. B. zum Erstellen oder Wiederherstellen von NuGet-Paketen. Wenn aktuell ein Vorgang ausgeführt wird, wird eine Schaltfläche „Abbrechen“ im Infobereich eingeblendet. Hier werden auch Benachrichtigungen zu Softwareupdates angezeigt. Sie können auf einige Benachrichtigungen (z. B. Buildfehler) klicken, damit ein Pad mit weiteren Informationen angezeigt wird.

Rechts auf der Symbolleiste befindet sich die globale Suchfunktion. Sie unterstützt Sie nicht nur bei der Suche nach Befehlen und Dateien in Ihrer Projektmappe. Durch das camelCase-Filtersystem können Befehle schnell aktiviert werden, oder Sie können zu Dateien oder Typen in Ihrer Projektmappe springen. Außerdem kann das System eine Suche vom Typ „In Dateien suchen“ in Ihrer Projektmappe auslösen oder den NuGet-Paket-Manager öffnen, um nach einem Paket zu suchen.

Das Pad „Projektmappe“ funktioniert sehr ähnlich wie der Projektmappe-Explorer in Visual Studio. Sie können damit die Struktur Ihrer Projektmappe, Ihr Projekt und die darin enthaltenen Dateien durchsuchen und verwalten. Über das Kontextmenü sind zahlreiche kontextspezifische Befehle für die Elemente im Projektmappenbaum verfügbar, z. B. zum Hinzufügen oder Entfernen von Dateien aus Projekten, zum Bearbeiten von Projektverweisen, zum Öffnen von Terminalfenstern in Ordnern sowie zum Erstellen oder Debuggen bestimmter Projekte.

Das Pad „Fehler“ zeigt Buildwarnungen und -fehler an. Hier finden Sie auch die Buildprotokollausgabe in einer geteilten Ansicht. Im Gegensatz zu Visual Studio ist kein einzelnes vereinheitlichtes Pad für alle Ausgabetypen vorhanden. Ein Pad „Anwendungsausgabe“ zeigt die Ausgabe Ihrer App an, wenn Sie diese ausführen oder debuggen, und protokolliert aus NuGet Vorgänge, die in einem NuGet-Konsolenpad angezeigt werden. Das Pad „Eigenschaften“ zeigt kontextabhängig Eigenschaften des Elements an, das aktuell den Fokus besitzt und ausgewählt ist. Es kann zum Anzeigen und Ändern der Buildaktion von Dateien im Projektmappenpad verwendet werden.

Im Mittelpunkt steht natürlich das Herz der IDE: der Quellcode-Editor. Dieser besitzt alle Features, die Sie von einem Mitglied der Visual Studio-Produktfamilie erwarten. Abbildung 3 zeigt C# IntelliSense und Syntaxhervorhebung in einem .NET Core-Projekt. Außerdem sind Codefaltung, Liveunterstreichung von Fehlern und Vorschläge während der Eingabe, konfigurierbare automatische Formatierung, Codenavigationsbefehle sowie ein Array leistungsfähiger Refactoringtools verfügbar.

IntelliSense in einem .NET Core-Projekt
Abbildung 3: IntelliSense in einem .NET Core-Projekt

Nicht alle Funktionen des Editors sind standardmäßig aktiviert. Sie können die Einstellungen von Visual Studio für Mac im Dialogfeld „Einstellungen“ optimieren, auf das über das Mac-Anwendungsmenü zugegriffen werden kann. Dieses Dialogfeld entspricht dem Dialogfeld „Optionen“ im Menü „Extras“ von Visual Studio. Es enthält zahlreiche Optionen, mit denen Sie die IDE so anpassen können, dass sie wie von Ihnen gewünscht funktioniert.

Komponententests werden mithilfe von NUnit unterstützt. Andere Test Runner können über Extensions als Plug-In verwendet werden. Die in Ihrer Assembly ermittelten Tests werden in einem Pad „Komponententests“ angezeigt, auf das über das Menü „Ansicht“ > „Pads“ zugegriffen werden kann. Außerdem ist Git-Versionskontrolle in den Quellcode-Editor integriert. Am unteren Rand des Editors wird eine Reihe von Registerkarten für den Zugriff auf die Protokoll-, Diff- und Blameansicht der aktuellen Datei angezeigt.

Wenn Sie anhand weiterer Tipps und Tricks schnell Fahrt aufnehmen möchten, können Sie sich die Videositzung „Become a Xamarin Studio Expert” aus Xamarin Evolve 2016 (xmn.io/xs-expert) ansehen. Ihr Inhalt gilt auch für Visual Studio für Mac.

Open Source-SDKs

Ebenso wie Xamarin Studio basiert Visual Studio für Mac auf der Open Source MonoDevelop-IDE, die aktiv von Microsoft entwickelt wird. Sie wurde vollständig in C# geschrieben und weist ein umfangreiches Erweiterbarkeitsmodell auf, das zum Hinzufügen von Funktionen (von einfachen Editor-Befehlen bis hin zu ganz neuen Sprachen und Projekttypen) verwendet werden kann. Selbst Kernfeatures wie C#-Bearbeitung, Xamarin.iOS, Xamarin.Android und ASP.NET Core sind als Extensions implementiert.

Ebenso wie in Visual Studio und Visual Studio Code wird die C#-Unterstützung in Visual Studio für Mac durch die Open Source Roslyn-Compilerplattform ermöglicht. Sie arbeiten mit genau der gleichen IntelliSense-Benutzeroberfläche, die Ihnen aus Visual Studio vertraut ist, sowie mit Unterstützung von In-Editor-Liveanalyzern und Codefehlerbehebungen. Visual Studio für Mac enthält sogar standardmäßig die Refactoring Essentials-Sammlung von Analyzern und Codefehlerbehebungen.

Visual Studio für Mac unterstützt die Bearbeitung zahlreicher Sprachen mithilfe der Verwendung von TextMate-Bundlen, die Syntaxhervorhebung und einfache IntelliSense-Funktionen bereitstellen. Zahlreiche Open Source TextMate-Bundle aus Visual Studio Code sind enthalten.

Erstellen einer ASP.NET Core-App

Damit Sie sehen, wie einfach und schnell das Arbeiten mit Visual Studio für Mac ist, zeige ich schrittweise das Erstellen eines einfachen ASP.NET Core-Back-Ends. Es handelt sich um eine hypothetische „Freigegebene Aufgabenliste“ für eine mobile App, die mehreren Benutzern das Hinzufügen von Elementen und allen Benutzern das Anzeigen der Elemente ermöglicht, die gepostet wurden.

Bitte beachten Sie, dass ich diesen Artikel mit einer Vorabversion von Visual Studio für Mac schreibe. Einige Details der Benutzeroberfläche haben sich im Release ggf. geändert. Die in diesem Artikel beschriebenen Ansätze und Konzepte gelten jedoch weiterhin.

Nachdem ich Visual Studio für Mac installiert und geöffnet habe, beginne ich, indem ich auf der Willkommenseite auf die Schaltfläche „Neue Projektmappe“ klicke. Das Dialogfeld „Neues Projekt“ wird geöffnet. Ich navigiere in den Abschnitt „Cloud“, wähle die Vorlage „ASP.NET Core-Webanwendungsvorlage“ aus, klicke auf „Weiter“ und wähle dann die Vorlage „Web-API“ aus. Die Vorlage „Web-API“ erstellt einen RESTful Webdienst, der perfekt für ein mobiles Back-End geeignet ist. Sie können dem Projekt jedoch später Ansichten hinzufügen, um ein Web-Front-End zu erstellen.

Schließlich nenne ich mein Projekt „HelloVSMac“ und klicke auf „Erstellen“. Visual Studio für Mac erstellt die Projekte mithilfe des dotnet-Vorlagenmoduls, öffnet sie und beginnt dann mit der Wiederherstellung der NuGet-Pakete, mit denen Abhängigkeiten vorliegen. Wenn Sie die Projektdatei im Editor mithilfe des Kontextmenüs „Extras“ > „Bearbeiten“ für das Projekt im Projektmappenpad öffnen, können Sie erkennen, dass es sich um eine minimalistische, auf MSBuild basierende Projektdatei handelt, die einfach zu verstehen sein sollte. Wenn Sie diese Datei direkt bearbeiten und speichern, lädt die IDE automatisch Ihre geänderte Version erneut.

Wenn Sie sich das Projekt im Projektmappenpad ansehen, springen die folgenden Schlüsselelemente in das Auge:

Pakete: Die NuGet-Paketabhängigkeiten Ihres Projekts. ASP.NET Core, das .NET Core-Framework und die MSBuild-Ziele, die das Projekt erstellen, werden alle über NuGet-Pakete installiert.

Program.cs: Der Einstiegspunkt Ihrer Web-App. ASP.NET Core-Apps sind Programme. Daher ist ein Einstiegspunkt der Main-Methode vorhanden, die den WebHost im Herzen Ihrer App erstellt und ausführt.

Startup.cs: Definiert eine Startklasse, die an den WebHost übergeben wurde. Diese Klasse enthält die Initialisierungsmethoden Ihrer Anwendung.

appsettings.json: Die Konfigurationseinstellungen Ihrer App. Dies ist das ASP.NET Core-Äquivalent der Datei „web.config“ von ASP.NET.

Für die Zwecke dieser exemplarischen Vorgehensweise lasse ich diese Dateien unverändert und sehe mir die Datei „ValuesController.cs“ im Ordner „Ansichten“ an. Diese Datei enthält eine ValuesController-Klasse, die für die Route [Route("api/[Controller]")] registriert ist. Die Angabe [Controller] ist ein Platzhalter für den Klassennamen und somit die Route „api/values“.

Ich beginne, indem ich eine sehr einfache ToDoItem-Klasse und eine ToDoList-Speicherklasse definiere. „ToDoList“ ist statisch, damit die Klasse von Anforderungen gemeinsam verwendet werden kann. In einer echten App würden Sie zu diesem Zweck eine Datenbank verwenden. In diesem Beispiel ist meine Vorgehensweise aber ausreichend. Ich benenne außerdem die Controllerklasse in „ToDoController“ um (dies ergibt die Route „api/todo“), verbinde die Get- und Post-Methoden mit dem Speicher und lösche die anderen nicht verwendeten Controllermethoden. Das Ergebnisse finden Sie in Abbildung 4.

Abbildung 4: Der Controller und sein einfacher Aufgabenlistenspeicher

[Route("api/[controller]")]
public class ToDoController : Controller
{
  [HttpGet]
  public IEnumerable<ToDoItem> Get()
  {
    return ToDoList.GetAll();
  }
  [HttpPost]
  public void Post([FromBody]ToDoItem item)
  {
    ToDoList.Add(item);
  }
}
public class ToDoItem
{
  public string Title { get; set; }
}
public static class ToDoList
{
  static List<ToDoItem> list = new List<ToDoItem>();
  public static void Add(ToDoItem item)
  {
    lock (list) { list.Add(item); }
  }
  public static IEnumerable<ToDoItem> GetAll()
  {
    lock (list) { return list.ToArray(); }
  }
}

Ihnen liegt nun eine vollständiger (wenn auch sehr kleiner) RESTful-Webdienst vor. Probieren wir ihn aus.

Ich platziere einen Haltepunkt in der Post-Methode und beginne damit, die App zu debuggen. Im Ausgabepad wird nun die Ausgabe aus dem integrierten ASP.NET Core-Kestrelwebserver angezeigt, wenn die App gestartet wird (standardmäßig an Port 5000). Es erfolgen jedoch keine weiteren Aktionen, bis eine Anforderung empfangen wird. Sie können Ihren Webbrowser öffnen und „127.0.0.1:5000/api/todo“ überprüfen. Sie finden dann nur ein leeres Array vor.

Debuggen eines .NET Core-Projekts
Abbildung 5: Debuggen eines .NET Core-Projekts

Da noch kein mobiler Client für diesen Dienst vorhanden ist, ist es an der Zeit, die macOS-Terminal-App zu öffnen und cURL zum Senden einer POST-Anforderung an die App zu verwenden:

$ curl -H "Content-type: application/json" -X POST -d '{ title: "build
  mobile app" }' 127.0.0.1:5000/api/todo

Dies löst den Haltepunkt im Debugger aus. Sie können den Wert untersuchen, der automatisch aus dem JSON-Text der Anforderung analysiert und in das ToDoItem-Objekt konvertiert wurde. Sie können erkennen, dass Visual Studio für Mac automatisch in das Debuglayout gewechselt ist und alle erwarteten Debuggerpads anzeigt: „Stapel“, „Lokale Variablen“, „Threads“, „Haltepunkte“ usw.

Wechseln Sie nun zurück zum Terminal, und verwenden Sie cURL für den Zugriff auf die Get-Methode. Das JSON-Array wird angezeigt, das das hinzugefügte Element enthält:

$ curl 127.0.0.1:5000/api/todo
[{"title":"build mobile app"}]

Der nächste Schritt besteht im Erstellen der mobilen App. Diesen Schritt überlasse ich Ihnen. Wenn Sie ausführlichere Informationen zu ASP.NET Core erhalten möchten, empfehle ich asp.net/get-started. Wenn Sie mehr über die Xamarin-Entwicklung erfahren möchten, finden Sie umfangreiches Referenzmaterial unter developer.xamarin.com. Auch wenn noch nicht viel Dokumentation zu Visual Studio für Mac vorhanden ist: Die Xamarin Studio-Dokumentation ist in den meisten Fällen auch für Mac gültig, und häufig kann die Visual Studio-Dokumentation ebenfalls verwendet werden.

Zusammenfassung

Ich hoffe, dass dieser kurze Überblick Sie neugierig auf Visual Studio für Mac gemacht hat und Sie das Produkt testen und zu Ihrer bevorzugten macOS-IDE für die Entwicklung von Cloud- und Mobiltechnologien erklären möchten. Wenn Sie über einen Mac verfügen, sollten Sie die Preview von VisualStudio.com herunterladen, testen und uns dann mitteilen, wie Ihnen das Produkt gefällt. Wir freuen uns auf Ihr Feedback, das in der Previewphase und darüber hinaus als hilfreicher Leitfaden dienen kann.


Mikayla Hutchinson ist Senior Program Manager für die Xamarin-Plattform bei Microsoft. Zuvor war sie an der Entwicklung der mobilen und Webtools für Xamarin Studio beteiligt und arbeitete als Kernentwicklerin an MonoDevelop. Sie können ihr auf Twitter folgen: @mjhutchinson.

Unser Dank gilt den folgenden technischen Experten von Microsoft für die Durchsicht dieses Artikels: Larry O’Brien und Lluis Sanchez
Larry O'Brien arbeitet in der Xamarin-Dokumentationsgruppe bei Microsoft. Er ist seit langem im Bereich der Softwareentwicklungspublikationen als Autor und Editor aktiv.


Diesen Artikel im MSDN Magazine-Forum diskutieren