Skip to content

Universal Windows Platform Workshop

In der Woche ab 1. August gibt es von mir einen Workshop *Programming Universal Apps“ in Wien: viele coole Features für UWP Applikationen. Inhalte sind z.B. XAML mit compiled data binding, adaptive triggers, aber auch Zugriff auf Services wie z.B. Cognitive Services.

Apps on multiple Devices

In diesem Workshop lernen Sie Programmieren von Apps die auf der Windows 10 Plattform laufen – inkl. XAML, dem MVVM Pattern, Aufruf der Windows Runtime, Verwenden von Services und mehr:

Foundations

  • Überblick Universal Windows Platform (UWP) Apps
  • Visual Studio und Blend for Visual Studio
  • Sharing Code
  • Platform SDKs
  • Application Lifecycle

Creating the User Interface

  • Überblick und Goals von XAML
  • XAML Controls
  • Layout (RelativePanel, SplitView, Grid, WrapGrid…)
  • Data Binding und Compiled Data Binding
  • Adaptive Triggers
  • Styles und Templates
  • Tiles und Toasts

Creating Reusable and Testable Applications

  • MVVM Pattern
  • Erstellen von Views, View-Models, und Models
  • Change Notification
  • Repository Pattern
  • Messaging mit Events
  • Verwenden von Dependency Injection Frameworks
  • Unit Testing
  • Automated UI Testing
  • HockeyApp

Communication between Apps

  • App Contracts
  • Sharing Data
  • Drag and Drop
  • Communication via App Services

Special Features

  • Navigation Framework
  • Using Maps
  • Inking und Ink Controls
  • Using Sensors
  • Using Cognitive Services

C# Kenntnisse werden beim Workshop vorausgesetzt.

Summary

Abhängig vom Wissen und den Wünschen der Kursteilnehmer können die Inhalte des Workshops auch angepasst werden. Auf jeden Fall wird das eine großartige Woche – alles was man bruacht um mit UWP Applikationen loszulegen.

Interesse an diesem Workshop?? Programming Universal Apps gibt es auch als Firmenkurs, und da kann alles angepasst werden.

Have fun with programming and learning!
Christian

Related Information

Compiled Data Binding with UWP
Portable Library
Dependency Injection
Using .NET Core Libraries
Professional C# – What’s in there for UWP

Image © Monicaodo | Dreamstime.com [Laptop, Tablet PC and Smart Phone with Apps](https://www.dreamstime.com/royalty-free-stock-image-laptop-tablet-pc-smart-phone-apps-modern-communication-technology-illustratiom-image34496856#res4560951 „Laptop, Tablet PC and Smart Phone with Apps)

ASP.NET MVC 6 Workshop

Mein Buch Professional C# 6 and .NET Core 1.0 ist fertig, .NET Core 1.0 Release Candidate 2 ist da, und auch mein ASP.NET MVC 6 Workshop ist fertig!

Professional C#

ASP.NET Core ist die neue Technologie von Microsoft für die Entwicklung von Web Applikationen die nicht nur unter Windows, sondern auch unter Linux und Mac laufen. ASP.NET ist in die Jahre gekommen mit einem Release im Jahr 2002. Nach einiger Zeit macht es Sinn, neu zu starten. ASP.NET Core reduziert die Abhängigkeiten, erlaubt mehr Flexibilität, bessere Performance, implementiert neue Patterns, und ist komplett Open Source. Während es bei der alten ASP.NET Version unterschiedliche Implementierungen zwischen den ASP.NET MVC und den ASP.NET Web API Controller gibt, ist das jetzt Eins.

Um was geht es im Workshop?

.NET Core

Zuerst gibt es eine Einführung in .NET Core – die neuen dotnet tools, NuGet Packages, Basis-Features wie das neue dependency injection framework Microsoft.Extensions.DependencyInjection, die neue Art der Konfiguration inklusive der user secrets, sowie die neuen Logging Möglichkeiten.

Package Manager und Tools

Statt alle Libraries un NuGet Packages vorzufinden sind jetzt die Tools der Scripting-Gemeinde in Visual Studio integriert. Bower, NPM und Gulp werden hier erklärt und genutzt.

ASP.NET Core

Der nächste Teil behandelt die Foundation von ASP.NET Core – da wird eine neue Website von Grund auf gebaut. Damit lässt sich dann auch ASP.NET MVC viel leichter verstehen. Aufgebaut wird da auf den Features vom ersten Teil wie dependency injection, configuration, und logging – und dazu gibt es dann die Requests und Responses – was natürlich so etwas wie Cookies, Sessions, und Encoding beinhaltet. Besonders interessant wird es aber dabei Services zu injecten, und auch Middleware einzubauen. Außerdem werden hier eigene Routes definiert.

ASP.NET MVC

Mit ASP.NET MVC wird auf dem Wissen von ASP.NET Core aufgebaut. Controllers werden hier gebaut, sowie Views um HTML Code anzuzeigen. Sie lernen wie Controllers mit Views kommunizieren, sharing von Views, Partial Views, dem Razor Syntax, und vielem mehr. Ganz besonders spannend sind neue Themen von ASP.NET MVC 6 wie Tag Helpers und den View Components.

Entity Framework Core

Die meisten Websites brauchen auch eine Datenbank. Auch hier kommt eine neue Technologie zum Einsatz: Entity Framework Core. Auch da war ein Rewrite angebracht. Läuft das neue Entity Framework jetzt doch auch unter Linux und ist nicht nur mehr für relationale Datenbanken gedacht – auch NoSQL Technologien werden mit den richtigen Providern unterstützt.
Im ASP.NET MVC Workshop gibt es einen Einstieg in Entity Framework Core – das wichtigste was für Websites benötigt wird.

ASP.NET Web API

Schreiben von REST Services ist auch ein wichtiger Bestandteil von Web Applikationen. Können diese doch direkt von JavaScript am Client, aber auch vom ASP.NET Controller – sowie auch von UWP oder Xamarin Clients aufgerufen werden. Neben dem Einstieg in die REST Programmierung mit der ASP.NET Web API darf Swagger auch nicht fehlen – auch wenn der neue Name OpenAPI nicht so cool ist, ist es doch schon fast ein Standard.

SignalR und WebHooks

Der Kurs könnte jetzt schon aus sein, es geht aber doch noch weiter! Mit SignalR und WebHooks sind zwei Technologien im Einsatz bei denen es um real-time Communication zwischen Server und Client geht. Wobei diese Technologien nicht in Konkurrenz zueinander stehen, sondern im Gegenteil recht praktisch miteinander sind. Beide Technologien werden im Workshop in einer Einführung betrachtet.

Summary

Mit all diesen neuen Technologien und Features ist die beste Möglichkeit einen Workshop zu ASP.NET MVC 6 zu besuchen – vom Autor von Professional C# 6 and .NET Core 1.0. Für schnell entschlossene gibt es einen offenen Workshop am 6. Juni in Wien. Bei einem Firmenworkshop sind die Themen natürlich flexibel anpassbar. Bei Interesse bitte einfach ein Email.
Die zweitbeste Möglichkeit ist das Lesen des Buches Professional C# 6 and .NET Core 1.0.

Viel Spaß beim Lernen und Programmieren von ASP.NET Core!

Christian

C# 6 – String Interpolation

Die – meiner Meinung nach – zwei besten C# 6 Features sind der null propagation operator und string interpolatation. Falls Du diese Features noch nicht einsetzt, gibt es hier eine kurze Einführung zu String Interpolation.

Interpolation

English Version

String Interpolation

String interpolation wird mit C# 6 mit dem $ Prefix gestartet. Statt das zu schreiben:

string s1 = "World";
string s2 = string.Format("Hello, {0}!", s1);

ist es jetzt möglich diesen Code zu schreiben:

string s1 = "World2;
string s2 = $"Hello, {s1}!";

String Interpolation reduziert den Code und macht ihn leichter lesbar!

Der Compiler generiert dabei den gleichen IL Code, kann den Code aber auch optimieren (abhängig von den Formaten die verwendet werden). Es ist auch möglich Format Strings zu verwenden!

Ein interpolierter String kann auch einer Variable vom Typ FormattableString zugewiesen werden. Mit diesem Typ können auf die Bereiche im String zugegriffen werden – und damit interessante Funktionalität gebaut um den String zu ändern:

int x = 3, y = 4;
FormattableString s = $"The result of {x} + {y} is {x + y}";
WriteLine($"format: {s.Format}");
for (int i = 0; i y s.ArgumentCount; i++)
{
WriteLine($"argument {i}: {s.GetArgument(i)}");
}

Das Ergebnis:

format: The result of {0} + {1} is {2}
argument 0: 3
argument 1: 4
argument 2: 7

FormattableString erlaubt es eigene Features mit String Interpolation zu definieren

Mit FormattableString als Argument ist es einfach möglich das String Ergebnis zu ändern, z.B. mit der Invariant Culture:

string Invariant(FormattableString s) =>
s.ToString(CultureInfo.InvariantCulture);

Das Beispiel zeigt ein DateTime Objekt mit dem das Datum im Default und Invariant Format geschrieben wird:

var day = new DateTime(2025, 2, 14);
WriteLine($"{day:d}");
WriteLine(Invariant($"{day:d}");

Die FormattableString Klasse definiert selbst die static Methode Invariant die das gleiche macht:

WriteLine(FormattableString.Invariant($"{day:d}");

There’s More!

Andere C# 6 Features, wie z.B. der Null Propagation Operator kommt in einem weiteren Blog Post. String Interpolation wie null propagation, static using, expression-bodied methods, expression-bodied properties, auto implemented property initializers, read-only auto properties, der nameof Operator, dictionary intitializers, exception filters, await in catch und viel mehr werden in meinem neuen Buch Professional C# 6 and .NET Core 1.0 beschrieben. String interpolation gibt es im Detail in Kapitel 10, „Strings and Regular Expressions“, und wird in vielen Samples im gesamten Buch verwendet. Mehr Informationen zu den C# 6 Features gibt es auch in meinen .NET Workshops.

Welche C# 6 Features findest Du am interessantesten?

Christian

ASP.NET Core on Linux

Bei den Linuxwochen in Wien habe ich eine Einführung in ASP.NET Core auf Linux gebracht. Die letzten Jahre habe ich ja fast nur auf der Windows Plattform gearbeitet. Das „fast nur“ bezieht sich auf Android und iPhone, und damit auch OS X das in den letzten Jahren dazu kam. Vor meiner Windows Zeit (die hat mit Windows NT 3.1 gestartet) entwickelte ich vor allem auf DEC-OSF/1, Ultrix und OpenVMS. Jetzt musste ich mit Linux feststellen dass sich seit damals gar nicht so viel geändert hat. Bei der Installation von Ubuntu konnte ich auf dieses Wissen aufbauen🙂

Tux

Bei meiner Präsentation gab es nicht nur eine Einführung in ASP.NET, auch Tools auf Windows und Linux. Natürlich waren die vorgezeigten Tools nicht vollständig, es sind viele weitere in Entwicklung. Interessant war es von den Teilnehmern zu hören dass die meisten Teilnehmer auf Windows arbeiten und Linux im Backend verwenden, die wenigsten haben selbst auf Linux entwickelt. Das könnte aber auch daran liegen dass ich in der Session eine Microsoft Technologie vorstellte. Vielleicht aber auch nicht – auch von einem Linux Trainer habe ich gehört das er und seine Teilnehmer meist Linux im Backend verwenden.

Meine Slides liegen auf docs.com.

Den Source Code gibt es auf GitHub.

Links und Infos zum Starten mit ASP.NET Core:

  1. Microsoft Azure – da läßt sich rasch eine virtuelle Maschine mit Ubuntu einrichten.
  2. Zur Verbindung von Windows zu Linux habe ich die ssh von Bash on Ubuntu on Windows verwendet – integriert mit Windows 10 ab dem Summer Update. Jetzt schon über einen Insider Build verfügbar.
  3. get.asp.net, da findet sich auch Informationen zur Installation auf verschiedensten Plattformen
  4. .NET Core CLI – die neuen .NET Core Command Line (CLI) tools, sie ersetzen dnvm/dnu/dnx mit RC2
  5. Visual Studio Code – ein Multi-Platform Editor mit Project Management Features und viel Community Support
  6. Source Code von .NET Core
  7. Source Code von ASP.NET Core
  8. Professional C# Source Code auf Github mit mehr Samples, da gibt es einen Branch für RC1, Updates for RC2 und RTM folgen laufend
  9. Workshops

Viel Spaß in der neuen alten Zeit!
Christian

Tux Image by Larry Ewing, Simon Budig, Anja Gerwinski[1], Attribution, https://commons.wikimedia.org/w/index.php?curid=753970

Dotnet CLI Tools

Ein Grund der Verzögerung von .NET Core (ein ursprünglicher Plan für den Release war Q1 2016) sind die dotnet Tools. Die dotnet Tools ersetzen die komplexeren DNX Tools with dnu, dnvm, und dnx. Die dotnet CLI Tools machen vieles einfacher – man braucht sich nur noch ein Programm zu merken, und erweiterbar ist das auch. Damit warte ich gern etwas länger auf den Release.

Dotnet CLI

Installation

Installiert werden die dotnet Tools über MSI, Debian, oder OSX Packages, oder via ZIP oder tar File: https://github.com/dotnet/cli. Distributions gibt es neben Windows schon für Ubuntu 14.04, Mac OSX und CentOS 7.1.

Erstellen eines Hello, World! Programmes

Es war noch nie so simple ein Hello, World! Programm zu erstellen.

Der Command

dotnet new

reicht.
Dieser Command erstellt den Code für eine Console-Anwendung mit project.json, Program.cs, und NuGet.Config. Zukünftig können auch andere Projekttypen mit dotnet new erstellt werden, z.B. Web Projekte, Libraries, oder auch Test-Projekte. Dazu dient dann die Option –type (oder -t).

Für andere Sprachen (neben C# geht es auch schon mit F#) dient die Option –lang (oder -l), z.B.

dotnet new --lang F#

für ein Hello, World! mit F#.

Das generierte C# File Program.cs enthält tatsächlich ein simples Hello, World!:

using System;
namespace ConsoleApplication
{
  public class Program
  {
    public static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");
    }
  }
}

Interessanter ist das generierte project.json File:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "NETStandard.Library": "1.0.0-rc2-23901"
  },
  "frameworks": {
    "netstandardapp1.5": {
      "imports": "dnxcore50"
    }
  }
}

Das emitEntryPoint setting besagt das es einen Entry Point in das Programm gibt, eine Main Methode. Bei Libraries ist dieses Setting nicht notwendig, sehr wohl aber jetzt auch bei Web Applikationen mit ASP.NET Core 1.0.

Unter frameworks findet sich das Framewrok netstandardapp1.5. Das ist der neue Moniker für .NET Core Applikationen, ein Executable für .NET Core 1.0. Nachdem viele NuGet Packages diesen neuen Moniker noch nicht kennen, gibt es ein import von dnxcore50. Das war der Moniker zu Zeiten als .NET Core noch 5.0 war. Irgendwann wird dieses Import nicht mehr notwendig sein.

Unter dependencies finden sich die NuGet Packages die für das Kompilieren des Programmes notwendig sind. Nachdem die Einheiten von .NET Core jetzt viel kleiner sind, um es uns zu ersparen jedes NuGet Package hier aufzuzählen, wird das Reference Package NETStandard.Library hier eingetragen. Das ist praktisch eine Liste einer Vielzahl von Packages. Je nach Version unterscheidet sich diese Liste – und damit auch die Unterstützung von verschiedenen .NET Versionen.

Um die Hello, World! Applikation auch für .NET 4.6 zu kompilieren, kann net4.6 bei den frameworks eingetragen werden:

"frameworks": {
"net46": { },
  "netstandardapp1.5": {
    "imports": "dnxcore50"
  }
}

Laden der NuGet Packages

Der nächste dotnet Command der erforderlich ist, ist das Laden der NuGet Packages. Das passiert mit Hilfe von dotnet restore. Die Packages werden auf den NuGet Servern die in NuGet.Config angegeben sind gesucht und heruntergeladen. Den Command das erste mal abzusetzen kann schon dauern. Danach werden die Packages aber im User Profil gespeichert unter %UserProfile%/.nuget gespeichert, und damit sind weitere Aufrufe (auch von anderen Projekten) schneller.

dotnet restore

Kompilieren des Programmes

Kompiliert wird das Programm mit dotnet build.

dotnet build

Mit entsprechenden Optionen kann die Architektur für das Binary (–arch oder -a, momentan nur x64), das Framework (–framework oder -f), die Konfiguration (–configuration oder -c, z.B. release/debug), und anderes gewählt werden.

Native Code

Auch native Code lässt sich schon kompilieren:

dotnet build --native

Unter Windows dazu das VS2015 x64 Native Tools Command Prompt von Visual Studio verwenden, dann funktioniert das auch.

Weitere Optionen

Für Unit testing (dotnet test), und Entity Framework Core migrations (dotnet ef) werden auch weitere Features bei den dotnet Tools integriert.

Weitere Informationen dazu in meinem neuen Buch Professional C# 6 and .NET Core 1.0, oder in meinen .NET Core Workshops.

Have Fun!

Christian

www.cninnovation.com

BASTA! Spring 2016 – Vorteile von .NET Core und CLI

.NET Core und CLI

Von meiner BASTA! Spring Session „Vorteile von .NET Core und CLI“ meine Präsentation zum herunterladen.

Code Samples sind auf GitHub.

Samples zu meinem Buch Professional C# 6 sind auch auf GitHub!

Viel Spaß!

Christian

http://www.cninnovation.com

Compiling .NET Core Apps unter Linux

.NET Core läuft nicht nur auf Windows, sondern auch auf Linux und OS X. Dieser Blog Artikel zeigt die Vorbereitung von Linux um .NET Core mit den .NET CLI Tools darauf kompilieren zu können.

Mittlerweile ist es doch schon 3 Jahre her das ich nur Windows im Einsatz hatte. Der Marktanteil von Microsoft auf den mobilen Plattformen geschuldet habe ich neben meinen Windows Devices (mein hauptsächlich genutzes Phone ist tatsächlich ein Windows Phone), ein Android Phone, ein iPhone, und auch einen Mac. All das braucht man doch für die Entwicklung mit Xamarin.

Am Desktop gab es aber weiterhin nur Windows (Mac ist hier eine Ausnahme). Vor meiner Windows Zeit war ich aber Entwickler unter OpenVMS und Unix (damals Ultrix und DEC-OSF/1 von Digital Equipment), und bringe damit auch viel Erfahrung von anderen Plattformen mit. Seit damals hat sich aber doch eine Menge geändert.

Da .NET Core jetzt auch auf Linux und OS-X läuft, heisst es sich damit wieder vermehrt zu beschäftigen.

Ein Linux Image mit Microsoft Azure

Eine einfache Möglichkeit Linux zum laufen zu bringen ist ein virtuelles Image mit Microsoft Azure (https://portal.azure.com/) zu erstellen. Ubuntu 14.04, Windows, Mac OS X und CentOS 7.1 werden momentan mit Installers unter https://github.com/dotnet/cli angeboten, andere Distributions folgen.

Für Ubuntu 14.0.4 wird ein fertiges Image unter Microsoft Azure angeboten:

Ubuntu 14.04 mit Microsoft Azure

Ubuntu 14.04 mit Microsoft Azure

Connect to Ubuntu

Nachdem das Image unter Microsoft Azure eingerichtet ist, brauchen wir eine Verbindung. Bei Windows Images genügt dafür der Connect Button unter Microsoft Azure, damit wird schon eine Remote Desktop Verbindung geöffnet. Unter Linux wird dafür eine Secure Shell benötigt.

Es gibt den Plan unter Windows 10 eine Secure Shell bereitzustellen: OpenSSH unter Windows. Bis das so weit ist wird es aber noch etwas dauern.  Bis dahin verwende ich  PuTTY. Das ist ein simples Executable für SSH und nicht mehr.

Bei der PuTTY Konfiguration braucht nur die IP Adresse aus der Azure Konfiguration übernommen zu werden,

PuTTY Configuration

PuTTY Configuration

und mit dem unter Azure konfigurierten User und Password wird die Verbindung hergestellt:

Connection to Ubuntu

Connection to Ubuntu

 

Installation von .NET Core Command-Line (CLI) Tools

Nachdem die Verbindung hergestellt ist, können auch schon die .NET Core command-line (CLI) tools installiert werden.

Ubuntu Desktop und xrdp können über apt-get installiert werden, wie von Tom McKearney beschrieben ist.

Für Ubuntu gibt es ein Debian Package. Das kann mit wget heruntergeladen werden:

wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-ubuntu-x64.latest.deb

Stattdessen kann aber gleich der apt-get Feed für .NET Core konfiguriert werden:

sudo sh -c ‚echo „deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main“ > /etc/apt/sources.list.d/dotnetdev.list‘

sudo apt-key adv –keyserver apt-mo.trafficmanager.net –recv-keys 417A0893

sudo apt-get update

Näheres ist hier: get started with .NET Core.

Dann lässt sich auch schon .NET Core von diesem Feed installieren:

sudo apt-get install dotnet=1.0.0.001331-1

.NET Core CLI Tools

Damit können auch unter Linux die .NET Core CLI tools verwendet werden:

mkdir HelloWorld

für ein neues Verzeichnis der Applikation,

cd HelloWorld

dotnet new

zum erstellen einer Hello, World! App,

dotnet restore

zum Herunterladen der NuGet Packages. Dann ein

dotnet build

um das Programm zu kompilieren, und

dotnet run

es zu starten.

Christian

Weitere Informationen zu .NET Core

 

BASTA! 2016 Spring