Alexander Schmidt: Windows 10 Pin-Abfrage statt Passwort

Gleich nach der Windows 10 Einrichtung wurde man höflich darauf hingewiesen, dass Passwörter veraltet sind und man doch lieber einen Pin wählen sollte. Genau wie Passwörter ist das Verfahren sicher, wenn man es richtig einsetzt. Nur Komfortabel hat es Microsoft nicht gemacht; man muss erst den Sperrbildschirm weg klicken, den Nummernblock aktivieren nur um dann … Windows 10 Pin-Abfrage statt Passwort weiterlesen

Karsten Kempe: TFS 2015 Card Customization (Rules & Styles)

VisualStudioLogoDas Verändern der Kärtchen auf dem Kanban- und Task-Board ist eine von vielen Erneuerungen des neuen Team Foundation Server. Diese und einige andere Neuerungen sollen die Visualisierung und Planung von Arbeitspaketen noch weiter verbessern. Die Anwendung von Regeln und Styles auf Kärtchen ist derzeit nur in der online Variante des TFS verfügbar und wird vermutlich durch ein Update für den TFS 2015 zur Verfügung gestellt werden.

In meinem Beitrag „Kanban Customization“ habe ich darüber berichtet, wie man zusätzliche Felder z. B. ID, Tags, Priorität, etc. auf den Kärtchen ein- und ausblenden kann. Mit der Anwendung von auf Regeln basierenden Styles, lassen sich die Kärtchen noch weiter individualisieren. Jedes Team ist in der Lage, sein Kanban- oder Task-Board zu individualisieren.

Kundennutzen und Priorität

Wenn viele Kärtchen auf den Boards sind, dann fällt es oft schwer, die Übersicht zu bewahren. Durch die Regeln, Work Items mit hoher Priorität oder hohem Kundennutzen farblich zu markieren, lassen sich die vermeintlich wichtigsten Arbeitspakete hervorheben.

TFS_Kanban_Styles_PriorityAbbildung 1: Regeln für hohen Kundennutzen und hohe Priorität

Jede Regel erhält einen Namen, eine Farbe und eine oder mehrere Kriterien zugewiesen. In Abbildung 1 erkennt man, wie einfach das Kriterium dafür zu definieren ist. Im ersten Drop-Down wird das Work Item Feld ausgewählt, im zweiten der Operator und im dritten Feld der Vergleichswert.

Sollten mehrere Regeln auf einem Board existieren, kann man per Drag & Drop die Reihenfolge der Regeln festlegen. Regeln, die in der Sortierung oben stehen, werden zuerst angewendet. Falls das Kriterium zutrifft, wird die zweite Regel für das bereits markierte Work Item ignoriert. D. h., hat ein Work Item einen Kundennutzen größer zehn, wird das Kärtchen blau markiert. Hätte es zusätzlich eine hohe Priorität, wird aber diese Regel ignoriert.

Blocked Backlog Items oder Bugs

Ein weiterer Anwendungsfall ist die Markierung von geblockten Work Items. Man kennt es vielleicht von traditionellen Kanban-Boards, dass Kärtchen durch farbige Klebepunkte markiert werden, um dem Team zu visualisieren, dass dieses Arbeitspaket gerade geblockt ist. Natürlich konnte man im Team Foundation Server ein Work Item als blockiert kennzeichnen, nur musste man das Work Item immer erst öffnen, um den Wert dieses Feldes zu erkennen. Durch das Anwenden einer Regel, könnten nun alle geblockten Arbeitspakete farblich markiert oder ausgegraut werden.

TFS_Kanban_Styles_BlockedAbbildung 2: Regel für blockierte Arbeitspakete

Team Farben

Solltet Ihr in Eurem TFS Team Projekt mehrere Teams definiert haben und über ein Kanban-Board alle Kärtchen, von allen Teams anzeigen wollen, dann könnte Euch diese Regel helfen.

In der Regel werden Teams über den Area Path identifiziert und da in der Auswahl der Work Item Felder auch der Area Path auswählbar ist, kann man jedem Team eine eigene Farbe zuweisen.

TFS_Kanban_Styles_TeamsAbbildung 3: Regel für den Area Pfad von Teams

Dadurch, dass relativ viele Kriterien für eine Regel definiert werden können, auch in Kombination, ist man sehr flexibel in der Visualisierung der Kärtchen. Ich bin mir sicher, Euch fallen noch ein paar weitere Szenarien ein. Diese könnt Ihr gerne als Kommentar hinterlassen.

Wie bereits erwähnt, gibt es dieses nützliche Feature derzeit erst in der Online-Variante des TFS, was sehr schade ist. Aber bis es für den Team Foundation Server zur Verfügung steht, werden sicherlich noch ein paar weitere Funktionen in das Card Styling fließen. Das Warten könnte sich also lohnen.

Hinweis: Es lassen sich nicht nur die Kärtchen auf dem Kanban-Board umgestalten, sondern auch die Kärtchen des Task-Boards.

[1] TFS 2015 Planungskomponenten im neuen Gewand

[2] TFS 2015 Kanban Customization

[3] TFS 2015 Card Customization (Rules & Styles)

 

Sven Hubert: Neu in TFS 2015 – IntelliTest

Eine oft unterschätzte Aufgabe ist die Arbeit an einer Codebasis, die keine ausreichende Testabdeckung besitzt. Ob sich eine Änderung durch einen ungewünschten Seiteneffekt auf andere Stellen auswirkt, ist in diesem Fall nur schwer zu beurteilen.

Bisher muss das Arbeiten „nach bestem Wissen und Gewissen“ oftmals ausreichen, welches durch das Vier-Augen-Prinzip und manuelle Tests der QS-Kollegen noch unterstützt wird. Eine erhebliche Verbesserung im Vergleich zu diesem Vorgehen stellt die Absicherung aller geänderter Stellen mit Hilfe von Unit Tests dar. Dies ist jedoch sehr zeitintensiv und der Nutzen beschränkt sich auf das Nachvollziehen direkter Auswirkungen von Änderungen. Seiteneffekte an anderen Stellen können auch hiermit nicht erkannt werden.

Um diesem Dilemma zu entfliehen, stellt Microsoft mit Visual Studio Enterprise 2015 nun eine sehr gut integrierte Weiterentwicklung von Pex zur Verfügung: IntelliTest. IntelliTest generiert mit nur wenigen Klicks eine hohe Testabdeckung als Baseline für vorhandenen Code.

Wie geht das?

Über das Kontextmenü im zu testenden Bereich (Methode oder Klasse) wird die Analyse über den Eintrag Run IntelliTest gestartet (1). Im Hintergrund analysiert IntelliTest nun die betroffenen Methoden und generiert Testfälle, die alle Pfade durch die betroffenen Methoden abdecken.

Image2

Das Resultat ist eine Übersicht der generierten Testfälle (2), die auf Knopfdruck (3) als Unit Tests in einem eigenen Test-Projekt gespeichert werden können. Die zu erwartenden Ergebnisse der Unit Tests ergeben sich dabei aus dem Verhalten der Methoden zum Zeitpunkt der Analyse.

Image5

Wenn ab sofort Änderungen am Code vorgenommen werden und dadurch das Ergebnis einer Methode verändert wird, so wird durch einen roten Unit Test darauf hingewiesen.

Im Falle, dass dies ein ungewollter Seiteneffekt der Änderungen ist, kann das Problem sofort behoben werden. Handelt es sich jedoch um eine gewollte Veränderung, so können die bestehenden Unit Tests durch erneutes Ausführen von Run IntelliTest automatisch angepasst werden.

Fazit

IntelliTest generiert Unit Tests auf Basis des aktuellen Verhaltens von Code. Analysiert IntelliTest eine Methode, die ein fachlich falsches Ergebnis liefert, wird dies von IntelliTest natürlich nicht erkannt. Vielmehr wird der generierte Unit Test ab sofort darauf prüfen, dass sich dieses (fachlich falsche) Ergebnis in Zukunft nicht unbemerkt ändert. Für das Erzeugen einer Baseline für Code ist dies jedoch das gewünschte Verhalten: Auswirkungen durch Änderungen sollen nicht länger unerkannt bleiben.

IntelliTest kann noch mehr

IntelliTest bietet noch weitere nützliche Features. Beispielsweise macht es Vorschläge für erweiterbare Factory-Methoden für komplexe Eingabeobjekte oder macht mit Warnungen darauf aufmerksam, falls Methoden durch unbehandelte Exceptions zum Abbruch gebracht werden können. Ein genauerer Blick lohnt sich!

Holger Sirtl: Azure News on Friday (KW31/15)

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

Datum Nachricht
29.07. Security Reviews in Preview in Azure AD Premium!
In Azure AD sind ab sofort Security Reviews als Preview verfügbar.
28.07. Monitoring your SQL Sentry data with Power BI
In Power BI können jetzt auch SQL Sentry Daten visualisiert und ausgeweitet werden.
28.07. Hybrid Management in Azure Automation
Cloud und On-Premises Ressourcen in Azure Automation via Hybrid Management verwalten
28.07. SQL Server 2016 Community Technology Preview 2.2 is available
Ab sofort ist die SQL Server 2016 Community Technology Preview verfügbar.
28.07. Create and Edit DocumentDB Server Side Scripts in the Azure Preview Portal
Stored Procedures, UDFs und Trigger in DocumentDB können jetzt im Azure Preview Portal verwaltet werden
28.07. Everything you need to know about Shared Access Signatures from multiple languages
Dieser Blogpost erklärt, wie unter Node, PHP, Java und C# Shared Access Signatures erzeugt und für Storage-Zugriff genutzt werden können.

Sven Hubert: Neu in TFS 2015 – Das Build-System mit Node.js

In einem vorigen Blog-Artikel hatte ich das neue Build-System vorgestellt. Auch in jenem Standard-Szenario eines Builds einer .NET-Solution bietet das neue Build-System einige Verbesserungen. Im heutigen Artikel möchte ich nun auf einen weiteren großen Vorteil eingehen: Builds für verschiedene Technologien – nicht nur aus der Microsoft-Welt. Anhand einer Build-Definition für eine Node.js-App zeige ich, dass das neue Build-System einfach und schnell erweitert und angepasst werden kann.

image

Da es für einen Node.js-Build keine Vorlage gibt, startet man am besten mit einer leeren Build-Definition. Wie im Bild oben zu sehen ist, gibt es schon einen Build-Schritt für die Ausführung von “npm install”, womit die Abhängigkeiten der Node.js-App aufgelöst und Pakete heruntergeladen werden. Danach werden Tests mit dem Framework Mocha.js ausgeführt, die Testergebnisse veröffentlicht, das Paket für die Veröffentlichung vorbereitet und anschließend wird dieses Paket auf dem Server als Build-Artefakt abgelegt.

Für den zweiten und vierten Schritt wird per “npm run <scriptname>” einfach ein Skript ausgeführt, welches schon im Paket enthalten ist. Da es sich beim Ausführen der Skripte um eine in npm schon integrierte Funktionalität handelt, klappt dies auf jeder Plattform. Leider gibt es für einen Aufruf von npm noch keinen eigenen Build-Schritt, daher wird hier ein PowerShell-Skript eingesetzt, welches einfach alle Argumente an npm weiterleitet:

   1: Write-Output "Call npm with args: $args"

   2: npm $args

Dies ist ein Paradebeispiel für einen neuen Build-Schritt, welchen man selbst anlegen werden kann. Damit ein Build-Schritt auf allen Plattformen funktioniert, kann ein Schritt aus mehreren Skripten bestehen, beispielsweise ein PowerShell-Skript für Windows und ein Bash-Skript für Unix-Systeme. Da man allerdings bisher keine eigenen Build-Schritte anlegen kann, wurde hier direkt ein PowerShell-Skript benutzt, womit der Build natürlich nur auf einem Windows-Agent ausgeführt werden kann.

Mit dem Mocha-Framework werden JavaScript-Tests ausgeführt und die Ergebnisse können in eine XML-Datei im xUnit-Format geschrieben werden. Ein Fehlschlagen dieses Schrittes kann nun zwei Dinge bedeuten: Entweder hat der Schritt selbst nicht funktioniert, z.B. da eine Datei nicht gefunden wurde und damit auch keine XML-Datei für die Testergebnisse erzeugt werden konnte, wodurch beim Veröffentlichen der Testergebnisse auch ein Fehler auftauchen wird. Oder mindestens ein Test schlug fehl, die XML-Datei wurde normal generiert, doch der Testrunner (in diesem Fall das Mocha-Framework) beendete den Prozess mit einem Exit-Code ungleich 0, was dem TFS mitteilt, dass der Build-Schritt fehlgeschlagen ist. Falls Testergebnisse erzeugt wurden, können diese mit dem Build-Schritt “Publish Test Results” direkt veröffentlicht werden. Die Formate der nUnit-Familie sind weit verbreitet und werden vom TFS unterstützt.

In den letzten beiden Schritten wird das npm-Paket geschnürt, indem nur die relevanten Dateien in einen Ausgabeordner kopiert werden und diese dann als zip-Datei im Server abgelegt werden. Natürlich wäre es auch möglich, das npm-Paket direkt in der öffentlichen npm-Registry zu veröffentlichen, was in einem weiteren Build-Schritt mit einem Skript geregelt werden kann.

Alle im Build genutzten Technologien müssen natürlich auch auf dem Build-Agent zur Verfügung stehen. Im Reiter “General” werden sie explizit als “Demand” gelistet:

image

Manche Demands werden automatisch hinzugefügt basierend auf den eingesetzten Build-Schritten. Zum Beispiel wurde durch den Schritt “npm install” der Demand „npm“ und durch den Schritt “PowerShell” der Demand „DotNetFramework“ hinzugefügt. Diese können nur gelöscht werden, indem die Build-Schritte entfernt werden. Andere Demands können händisch eingefügt werden, z.B. “node”, da Node.js zum Ausführen der Mocha-Test notwendig ist. Das Gegenstück zu den Demands sind “Capabilities” des Build-Agents, die meisten werden wieder automatisch ermittelt. Ein Build kann natürlich nur auf einem Agent ausgeführt werden, der alle Demands erfüllt. Dies ersetzt die Tags im alten Build-System und bietet eine deutlich übersichtlichere und einfachere Verwaltung.

Gerade Node.js Apps werden häufig auf GitHub gehostet. Mit dem neuen Build-System ist dies kein Problem, denn es unterstützt nun auch eine Anbindung an GitHub oder anderen externen Git Repositories:

image

Damit öffnet sich Microsoft noch stärker der Open-Source-Community und ermöglicht die Nutzung des TFS in den unterschiedlichsten Projekten.

Fazit:

Mit dem neuen Build-System können Build-Definitionen für praktisch alle Technologien für Windows, Mac OSX und Linux erstellt und ausgeführt werden – vorausgesetzt man kann den Vorgang über ein Skript steuern – egal ob das Projekt einen Compiler für C#, C++, Objective-C benötigt oder gar keinen, da es simpler JavaScript-Code ist. Open-Source-Projekte in Git Repositories können ebenfalls genutzt werden, wodurch nun mehr Projekttypen den TFS bzw. VSO nutzen können.

Falls es nicht schon einen vorgefertigten Build-Schritt gibt, kann einfach ein Skript genutzt werden. Für generische Aufgaben wird die Erstellung eines eigenen Build-Schrittes möglich sein. Diese Anpassungsmöglichkeiten sind – vor allem im Vergleich zu den alten XAML-Definitionen – sehr flexibel und simpel umzusetzen. Das Erlernen einer eigenen Sprache, wie sie in den XAML-Definitionen angewendet wurde, ist nicht mehr notwendig.

Norbert Eder: C# 6: String Interpolation

String.Format ist eine der ersten Funktionen, die beim Erlernen von einer Sprache unter .NET zum Einsatz kommt. Damit kann man sich ja quasi ein Template mit Platzhaltern definieren. In diese Platzhalter werden dann Werte eingefügt und – falls angegeben – entsprechend formatiert. Das ist bei einem Wert oder zweien nicht so schlimm, kann aber bei zunehmender Anzahl an Werten sehr unübersichtlich werden. Vor allem ist es mühsam herauszufinden, wo welcher Wert denn nun genau steht. Besser wäre es, wenn dies auf den ersten Blick ersichtlich wäre. Hier kommt die String Interpolation zum Zug. Gleich ein Beispiel:

var name = "Norbert";
Console.WriteLine($"{name}"); 

Dabei muss man sich natürlich an eine vorgegebene Struktur halten. Diese sieht wie folgt aus:

$ " <text> { <interpolation-expression> <optional-comma-field-width> <optional-colon-format> } <text> ... } "

Hier ein paar Beispiele:

Console.WriteLine($"Hallo {name, 15}");
-->Hallo         Norbert
Console.WriteLine($"Hallo {name}! {{Herzlich}} willkommen.");
-->Hallo Norbert! {Herzlich} willkommen.
Console.WriteLine($"{costs,15:c} | {actuals,15:c} | {diff,15:c}");
-->     2.000,00 € |      2.800,00 € |       -800,00 €

Ein interpolierter String kann überall dort verwendet werden, wo String-Literale gültig sind.

The post C# 6: String Interpolation appeared first on Norbert Eder.

Dmitrij Doberstein: Jasper Reports >>> Create custom scriptlet and use it in Jasper Soft

A scriptlet is a Java class used to execute specific operations during report generation. Here is the simplest scriptlet implementation:



Additional we can use our (custom function) which we can use in Expresion Editor for example in Jasper Studio.


How to create a Scriptlet?

Step 1:
Create new Java Project in Eclipse and new class for example MyScriptlet.

Step 2:
Add jasperreports-X.X.X.jar to classpath. You find this lib for example in

C:\Program Files\Jaspersoft\Jaspersoft Studio-5.5.1.final\configuration\org.eclipse.osgi\bundles\413\1\.cp\lib\

Step 3:
Create new function


Step 4:
Create JAR for this: Right click on your project >>> click on 'Export' >>> choise 'Java' -> 'JAR file' >>> click on 'Next' >>> fill 'Select the export destination' >>> click on 'Finish'



How to use scriptlet in your project?

Step 1:
Create new Jasper Report Project: 'File' -> 'New' -> 'Project' >>> Select 'JasperReports Project' >>> click on 'Next' >>> set project name >>> click on 'Finish'

Step 2:
Create new Jasper Report: right click on your project >>> 'New' -> 'Jasper Report' >>> select 'Report Template' >>> click on 'Next' >>> set 'File name', also the report name >>> click on 'Next' >>> select your 'Data Adapter' or create one new >>> click on 'Finish'

Step 3:
Add MyScriptlet.jar, that we created above to classpath.

Step 4:
Now we have to set scriptlet in the report properties. See next image:


Step 5:
Create 'Text Field' (1) and double click on it to enter 'Expresion Editor' (2). Now select 'Parameters' (3) >>> 'REPORT_SCRIPTLET' (4). And on right side you can see your scriptlet function (5).


Note: In some case you can´t see the scriptlet functions. To resolve it, readd (remove and than add) scpriptlet JAR file to classpath and restart Jasper Soft.


























Sven Hubert: Neu in VS 2015 – Gründe für den Umstieg auf .NET Core

Von Microsoft sehen wir oft Auflistungen von Features und große Show-Präsentationen. Oft bleibt aber unklar welchen konkreten Business-Wert diese Features bringen. Auch Entwickler haben oft Probleme einen Umstieg zu rechtfertigen. Deshalb gehen wir mit diesem Blog-Post auf die neuen Features, aus Sicht des Nutzens, genauer ein. Aufgrund der Größe und des Feature-Reichtums des neuen .NET 2015 beschränken wir uns ausschließlich zunächst auf .NET Core und behandeln ASP.NET 5 und .NET 4.6 in folgenden Posts.

Was sind also die neuen Features und welche Auswirkungen haben Sie auf das Business?

http://t3n.de/news/wp-content/uploads/2014/11/microsoft_open-source.net_.jpg

Open Source
Dabei denken viele im ersten Moment an abstürzende Software und Bugs. Microsoft, sowie viele andere auch, zeigen wie es auch anders geht. Dies würde aber den Rahmen dieses Posts sprengen. Der Business-Wert liegt in der neuen Dimension der Anpassbarkeit der Common-Language-Runtime. Sie benötigen speziellen Code zur Laufzeit für ihr eingebettetes System? Sie müssen jeden Aufruf von “File.Open” auf Ihrem System protokollieren? Sie betrifft ein CLR-Bug, können nicht auf das nächste Release warten und wollen ihn sofort beheben? Das alles ist jetzt möglich. Wenn sie jetzt aber an einen eigenen umfangreichen.NET Installer denken, dann werden Sie überrascht sein.

  • Anpassbarkeit/Flexibilität

CLR als NuGet Paket
Ganz im Gegenteil wird jetzt die CLR von dem Framework abgetrennt, womit es nun möglich wird sowohl zwischen verschiedenen Laufzeiten zu wählen (.NET Core, Mono, .Net) als auch eine selbst erstellte Laufzeit zu nutzen. Dadurch ist man natürlich auch nicht mehr auf die installierte Version angewiesen, weshalb nun das Testen für verschiedene, bereits installierte, Laufzeiten entfällt (läuft meine Anwendung auch mit dem Update .Net 4.5.X?). Aus weniger Testaufwand folgen letztlich natürlich auch geringere Kosten. Man kann nun auch auf “festgefahrenen” Systemen die aktuellste Version seiner Software ausliefern ohne die Nutzer zu einer neuen .Net Version zu zwingen (und damit ggf. andere Anwendungen zu brechen).

  • Wahl zwischen .NET Core, Mono, .NET und eigener Runtime (sowohl auf Basis von Mono als auch .NET Core)
  • Testen verschiedener Versionen entfällt (.Net 4, .net4.5, .Net 4.5.1, …)
  • Unabhängig von der Installierten Version. (Nur .Net 4.0 installiert –> egal)

Framework Libraries als NuGet Paket
Zusätzlich zur Entkopplung der Laufzeit wurde nun auch das Framework selbst in seine Einzelteile zerlegt und als NuGet Pakete zur Verfügung gestellt. Dies hat im Grunde dieselben Vorteile die auch für die Laufzeit gelten (Anpassbarkeit, Testen nur gegen eine Version usw.). Zusätzlich wird es aber nun für Microsoft möglich neue Versionen für Teile des Frameworks herauszugeben. Was natürlich dazu führt, dass man auf neue Versionen nicht mehr bis zum nächsten “großen” Release-Zyklus warten muss. Weiter ermöglicht dieses Aufbrechen des Frameworks, dass man nur .NET Framework Komponenten ausliefert, die auch benötigt werden. So kann man .NET nun auch auf Geräten nutzen für die eine komplette .NET Installation nicht möglich ist (ohne dabei auf APIs verzichten zu müssen!). Zusätzlich sind jetzt alle Abhängigkeiten vereinheitlicht: “System.Console” ist aus der Sicht des Projekts genau wie “Json.Net” eine NuGet-Abhängigkeit. Dies vereinheitlicht (=> weniger Kosten) natürlich den Umgang mit Abhängigkeiten sowohl im Entwicklungs- als auch den Test- und Release-Prozess.

  • Einzelne Anpassungen möglich
  • Nur benötigte Komponenten ausliefern
  • .NET Framework: Einfach nur eine Bibliothek. Ein Prozess für alle Abhängigkeiten! .NET ist kein Spezialfall mehr.

Neues Packaging
Die Installation von .NET-Anwendung war in der Regel immer schon ein XCOPY-Deployment, allerdings mit der Einschränkung, dass das .NET Framework vorher schon, in der richtigen Version, installiert sein musste. Diese Einschränkung entfällt nun. Es gibt nun mit .NET Core diverse Deployment-Optionen. So ist es nun möglich mit Visual Studio 2015 ein Paket zu erstellen, welches alle Abhängigkeiten enthält und direkt gestartet werden kann. Andererseits kann man aber die Software auch dann direkt starten, wenn sie nur als Source-Code vorliegt! Es sind also völlig neue Deployment-Szenarien möglich. Schließlich kennt das neue Build-System nur noch die Abhängigkeiten und deren Versionen und zieht verschiedene Quellen in Betracht. So ist es nun möglich ein Paket durch dessen Quellcode zu ersetzen (dieser wird dann einfach beim Kompilierungsprozess mit erstellt), damit wird sowohl die Fehlerbehebung, die Fehleranalyse als auch der Wechsel (die Ausgliederung) von Projektteilen zu NuGet vereinfacht.

  • Auflösen und packen der Abhängigkeiten zur Entwicklungszeit.
  • Optional aber auch herunterladen der Abhängigkeiten zur Laufzeit (bevor das Programm startet)
  • Direktes ausführen des Quellcodes (one-step auflösen und herunterladen der Abhängigkeiten)
  • vereinheitlichte Abhängigkeiten –> Quelle kann NuGet, Dateisystem usw. sein.
  • Produktivität, da man einfach zwischen Code und NuGet hin und herwechseln kann.

Cross Plattform
Der Name .NET Core ist wörtlich zu nehmen. Es handelt sich um den Kern. Das heißt, nun ist es möglich auf Geräte zu gehen für die es entweder nicht möglich war ein komplettes .NET Framework zu installieren, zum Beispiel eingebettete Geräte, oder bei denen man vorher auf spezifische Versionen angewiesen war (Cloud-Provider zum Beispiel). Weiter kann man nun bestehende Linux Infrastruktur mit seinen .NET Core Anwendungen nutzen und ggf. Lizenzkosten einsparen.

  • Cloud-Ready
  • (Lizenz-)Kosten minimieren
  • Embedded Devices
  • Bestehende (Linux) Infrastruktur nutzen

All diese Änderungen führen dazu, dass man sich nicht mehr auf veraltete Technologien beschränken muss, nur weil das Zielsystem nicht das neuste .NET installiert hat.

  • Software läuft sowohl auf veralteten als auch auf neuen Rechnern (da alle Abhängigkeiten mitgeliefert werden)!

Nachteile bzw. wann sollte man nicht Umsteigen?
Nicht alle APIs sind (und werden) unterstützt. Will/Muss man eine solche API nutzen muss man auf dem normal .NET Framework bleiben. Des Weiteren ist nicht klar wir sich .NET Core entwickelt und ob, zum Beispiel bei fehlender Adaption, weiter von Microsoft voll unterstützt wird oder sich zum reinen Open-Source Projekt entwickelt. Diese (Rest-)Unsicherheit bleibt natürlich bei jeder neuen Technologie.

Norbert Eder: C# 6: nameof Expression

nameof ist eine richtig hilfreiche Sache um all diese magischen Strings aus dem Sourcecode raus zu bekommen. Gerade zu WPF-Zeiten waren entsprechende Workarounds besonders in Zusammenhang mit INotifyPropertyChanged etc. gefragt. Hier ein solches Beispiel:

public class Person : INotifyPropertyChanged
{
    private string firstName;

    public string FirstName
    {
        get { return firstName; }
        set
        {
            firstName = value;
            NotifyPropertyChanged("FirstName");
        }
    }

    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this,
                new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

Der Nachteil besteht nun darin, dass bei einer Änderung der Property auch der String entsprechend geändert werden muss, damit die Funktionalität erhalten bleibt. Dies ist zwar in diesem Beispiel einfach zu finden, geht aber schon einmal unter.

NotifyPropertyChanged("FirstName"); kann nun wie folgt verbessert werden:

NotifyPropertyChanged(nameof(FirstName);

Dadurch werden Umbennungen auch hierfür durchgeführt.

Besonders interessant ist nameof auch bei der Verwendung der ArgumentNullException bzw. der ArgumentOutOfRangeException.

Zu beachten ist, dass nameof nur den eigentlichen Namen der Klasse, Methode oder Eigenschaft zurückliefert. Namespaces und übergeordnete Typnamen bleiben außen vor.

The post C# 6: nameof Expression appeared first on Norbert Eder.

Sven Hubert: Neu in TFS 2015 – Das Build-System

Das Build-System hat im TFS 2015 eine Runderneuerung bekommen. Was muss man nun aber machen, um eine simple Build-Definition für eine .NET-Solution aufzusetzen? Was bietet das neue System für Vorteile? Dieser Artikel gibt eine kurze Einführung von den Build-Agents über die Build-Schritte bis hin zum Abrufen der Testergebnisse.

image

Wie im Bild zu sehen, ist die komplette Oberfläche des neuen Build-Systems in das Web-Interface des TFS ausgelagert worden, zu finden im Reiter “BUILD”. Auch im Visual Studio 2015 können nur noch die alten XAML-Definitionen bearbeitet werden. Zum Editieren einer neuen Definition wird man an das Web-Interface weitergeleitet.

Auch die Verwaltung der Build-Agents findet im Web statt. Diese sind nun nicht mehr in Build Controller organisiert, sondern in Agent Pools und Build Queues:

Pools-Queues-Overview

Jede Collection kann mehrere Queues besitzen, wobei jede Queue genau einem Pool zugewiesen ist. Ein Pool ist für jede Collection verfügbar. Jeder Pool kann mehrere Agents benutzen, wobei ein Agent an nur genau einem Pool registriert sein darf. Ein Rechner wiederrum kann mehrere Agents beherbergen.

Damit ist sofort offensichtlich, dass es prinzipiell möglich ist, einen Build-Rechner über alle Collections hinweg zu nutzen. Wir haben also nicht mehr eine strikte Baumstruktur wie zuvor. Das neue System ist durch die Agent Pools flexibler und skalierbarer.

Zudem ist es nun möglich, die Verwaltung der Agenten von Benutzern ohne spezielle Adminrechte in der Collection oder im Projekt vornehmen zu lassen. Zwar werden immer noch Adminrechte für das Anlegen der Queues und Pools benötigt, jedoch hat jeder Pool eine eigene Administratorengruppe, deren Mitglieder Agenten nur bei diesem Pool registrieren und abmelden dürfen.

Microsoft geht nun auch das große Thema Cross-Plattform-Builds an. Somit gibt es momentan 2 Agents: einen Windows-Agent und einen Node.js-Agent für Mac OSX und Linux. Die Installation des Windows-Agents erfolgt über Copy & Paste und die Konfiguration über das Ausführen eines PowerShell-Skripts. Der Node.js-Agent wird als npm-Paket angeboten und die Installation ist ausführlich dokumentiert. Damit können Build-Rechner mit unterschiedlichen Betriebssystem leicht ins Build-System integriert und wiederverwendet werden.

Sind diese ersten Hürden beim Einrichten der Pools, Queues und Agents genommen, kann man eine neue Build-Definition anlegen. Dabei gibt es schon eine Vorlage für eine Visual-Studio-Build-Definition. Diese sieht initial wie folgt aus:

image

Neu ist, dass der Ablauf des Builds nun durch Build-Schritte definiert werden kann, welche per Drag & Drop in der Reihenfolge verschoben werden können. Wählt man einen Schritt aus, so erscheinen dessen Details auf der rechten Seite. Für den Schritt “Visual Studio Build” kann man z.B. die Solutions mit Wildcards auswählen. Auch der Schritt zum Ausführen der Tests kann konfiguriert werden. Das Veröffentlichen der Testergebnisse ist in diesem Schritt schon fest integriert. Weiterhin werden in der Standardvorlage die Quellen indiziert, die Symbole veröffentlicht und die Build-Ergebnisse können im Server oder auf einem Fileshare veröffentlicht werden.

Ein essentieller Schritt fehlt hier jedoch: das Abrufen der Quellen. Dies kann oben im Reiter “Repository” eingestellt werden.

Die restlichen Einstellungsmöglichkeiten sollten aus den XAML-Definitionen bekannt sein. Ist dies nicht der Fall, so gibt es nützliche Hinweise direkt neben den Konfigurationsfeldern.

Eine wichtige und lang ersehnte Neuerung ist die Versionierung der Build-Definitionen, welche unter dem Reiter “History” zu finden ist.

Generell ist es nun um einiges einfacher Build-Definitionen anzupassen, da keine eigene Domain Specific Language wie XAML verwendet wird. Microsoft scheint hier den “Best of Breed”-Ansatz zu verfolgen und nutzt schon vorhandene Dinge, anstatt das Rad neu zu erfinden.

Hat man nun die Build-Definition nach seinen Wünschen konfiguriert, so kann man einen neuen Build in die Warteschlange einreihen. Hierbei kann man eine Build-Queue auswählen, welche der aktuellen Collection zugeordnet ist. Eine Standard-Queue für eine Build-Definition kann natürlich auch angegeben werden.

Den Fortschritt des Builds kann man live im Web-Interface mitverfolgen. Dabei kann man sehen, dass hinter den Build-Schritten sich tatsächlich simple Skripte verbergen, z.B. für den “Visual Studio Test”-Schritt wird das Skript “VSTest.ps1” ausgeführt, welches Teil des Agents ist.

image

Nach Beendigung des Builds kann die Übersicht abgerufen werden:

image

Die Testergebnisse wurden automatisch veröffentlicht und weitere Details können mit Klick auf die Test Results eingesehen werden.

Fazit:

Für eine .NET-Solution kann man eine Standardvorlage einer Build-Definition nutzen. Die gegebenen Build-Schritte decken die häufigsten Szenarien ab und vieles funktioniert Out-of-the-Box. Für alle anderen Individuallösungen kann ganz einfach ein Build-Schritt hinzugefügt werden, der ein PowerShell-Skript ausführt. Es wurde angekündigt, dass es prinzipiell natürlich möglich sei, eigene Build-Schritte zu erstellen, jedoch sollte dies nur gemacht werden, wenn der Schritt sehr generisch angelegt und leicht wiederverwendet werden kann. Ansonsten ist ein Skript zu bevorzugen.

Wie flexibel man dadurch die Build-Definitionen gestalten kann, werde ich in einem kommenden Beitrag anhand einer Build-Definition für eine Node.js App zeigen.

Manfred Steyer: Online-Artikel-Serie zu Security für Web-Sites und APIs in ASP.NET MVC 6

Da ASP.NET MVC 6 nicht nur der Nachfolger von MVC 5 sondern auch von ASP.NET Web API ist, stellt sich die Frage, wie Entwickler die damit entwickelten Services absichern können. Als Antwort findet man derzeit im GitHub Repository des Projektteams Middleware-Komponenten für Token-basierte Verfahren sowie Basisklassen für eigene Middleware-Komponenten.

Infos dazu findet man in meinen Online-Artikeln bei entwickler.de:

Authentifizierungsszenarien mit ASP.NET Identity ASP.NET 5
https://entwickler.de/online/asp-net-identity-159813.html

Sichere Web-APIs: Servicesecurity bei ASP.NET MVC 6
https://entwickler.de/online/asp-net-web-apis-165823.html

Florian Geisenhof: Sysinternals ohne Installation aus dem Explorer starten

Es ist möglich Sysinternals direkt aus dem Explorer zu starten, ohne Sysinternals heruntergeladen zu haben. Der Vorteil dieser Variante ist, dass immer die aktuellste Version der Sysinternal-Tools verfügbar ist. Um die Tools aufzurufen muss einfach in der Adresszeile des Explorers folgende Adresse eingegeben werden. \\live.sysinternals.com Nach kurzer Wartezeit erscheinen mehrere Ordner. Im Ordner […]

Holger Schwichtenberg: Visual Studio 2015 Enterprise noch bis 27. August vergünstigt

Mit einem Upgrade-Trick können Kunden die Enterprise-Editon von Visual Studio 2015 günstiger erwerben.

Holger Schwichtenberg: Microsoft veröffentlicht Beta 6 von Entity Framework 7

Die Verschiebung von .NET Core 5 und ASP.NET 5 gibt auch dem Entity Framework 7 mehr Zeit, sodass Microsoft von den angekündigten Einschränkungen nun teilweise wieder abrückt.

Sven Hubert: Neu in TFS 2015 – Cross Plattform Apps entwickeln

Mit den Visual Studio Tools for Apache Cordova lassen sich Cross Platform Apps für iOS, Android und Windows Phone Geräte entwickeln. Apache Cordova, bekannt durch PhoneGap, ist ein Open Source Framework, welches es erlaubt Standard Web Technologien wie HTML5, CSS3 und JavaScript zur Entwicklung von Apps zu verwenden, ohne die nativen Programmiersprachen der einzelnen Plattformen verwenden zu müssen. Für die jeweiligen Plattformen wären dies:

· C#, C++ für Windows Phone

· Java für Android

· Objectiv C, Swift für iOS

In dem gerade kürzlich von Microsoft veröffentlichtem Visual Studio 2015 sind die Tools for Apache Cordova direkt integriert. Der entsprechende Projekttyp kann bei der Erstellung eines neuen Projektes ausgewählt werden:

ProjektTemplate

Mit der Hilfe der Tools und lassen sich Apps für folgende Plattformen entwickeln:

· Android 2.3.3 oder später
· iOS 6, 7, und 8
· Windows 8 und 8.1
· Windows Phone 8 und 8.1

Ohne die Visual Studio Tools für Cordova müssten viele Erweiterungen und Abhängigkeiten von Hand installiert und konfiguriert werden, um eine App für die oben genannten Plattformen zu entwickeln (siehe Tabelle).

Abhängigkeiten die installiert werden müssen: Was muss konfiguriert werden:
· Joyent Node.js
· Google Chrome
· Git Command Line Tools
· Apache Ant
· Oracle Java 7
· Android SDK
· Apple iTunes
· SQLite
· WebSocket4Net
· Command line Targets
· Umgebungsvariablen
· Veröffentlichungseinstellungen
· Build Server
· Web Server
· Und einiges mehr…

Somit spart man sich erheblich Zeit bei der Einrichtung, denn die richtigen Versionen und Einstellungen müssen nicht mühsam per Hand gesucht und konfiguriert werden. In Visual Studio 2015 ist alles vorinstalliert und -konfiguriert, so dass man direkt mit der Entwicklung starten kann. Entwickelt wird mit den Web Technologien HTML5, CSS3 und JavaScript, wobei die gewohnten Features und Bequemlichkeiten wie IntelliSense von Visual Studio genutzt werden können.

Neben der eigentlichen Entwicklung der App ist natürlich das Testen der App auf den verschiedenen Plattformen ein wichtiger Punkt, gerade wenn eine App für die verschiedenen Plattformen entwickelt werden soll. Um die Apps auf den verschiedenen Plattformen zu testen, gibt es zwei Möglichkeiten. Die Erste ist eine Webapp für Google Chrome: Der Apache Ripple Emulator. Dieser kann verwendet werden, um die Ausführung der App auf verschiedenen Geräten und Plattformen zu simulieren. Leider jedoch nur für Android und iOS und nicht für Windows Phone.

Für einen richtigen Test unter dem jeweiligen Gerät eignet sich der Emulator nicht, da er nicht komplett das Verhalten eines originalen Gerätes simulieren kann. Zur Überprüfung der Optik ist der Emulator hingegen sehr gut geeignet. Im Vergleich zu den entsprechenden Emulatoren ist er sehr schnell gestartet und es lassen sich kleine Änderungen, z. B. an der UI, zügig testen.

Ripple

Die zweite Möglichkeit ist, die entsprechenden Emulatoren für die verschiedenen Plattformen zu verwenden. Diese gibt es sowohl für Windows Phone als auch für Android. Für iOS gibt es ebenfalls einen Emulator, für den jedoch aber noch mehr benötigt wird. Der „vs-mda-remote“-Agent muss auf einem Mac installiert, gestartet und die Verbindung zum Agent im Visual Studio Agent konfiguriert sein. Die beiden Emulatoren kommen den original Geräten schon sehr nahe und eigenen sich sehr gut für Tests. Sind aber auch etwas schwerfälliger im Vergleich zum Ripple Emulator. Aber auch Sie können und sollten nicht die finalen Tests auf einem Smartphone ersetzen.

AndroidEmulator

Eine etwas unangenehme Einschränkung gibt es leider für die Windows Phone und Android Emulatoren. Wer schnell unter Azure VM die Entwicklung einer App ausprobieren möchte (eine fertig eingerichtete Windows 10 Maschine mit Visual Studio 2015 existiert bereits im Azure Portal), muss dabei auf die Emulatoren verzichten und muss sich mit dem Ripple Emulator begnügen. Die Emulatoren verwenden Hyper-V. Die Maschinen unter Azure sind aber bereits virtualisiert, weswegen sich Hyper-V auf diesen System nicht verwenden lässt.

Wird eine virtuelle Maschine auf dem eigenen Rechner ausgeführt kann zumindest noch auf einem nativen Device, das an den Rechner angeschlossen ist, getestet und debuggt werden.

Im Rahmen einer kleinen Serie sollen weitere Themen zu den Visual Studio Tools for Apache Cordova hier im AIT Blog behandelt werden, u. a. wie debuggt man universelle Apps, oder wie erstellt man für jede Plattform spezifischen Code um zum Beispiel das UI der Zielplattform anzupassen.

Marco Scheel: Links for 2015-07-27 [del.icio.us]

Dmitrij Doberstein: Add an existing Android Studio project to GitHub

At first we should enable the Version Control Integration in our project by pressing "VCS -> Enable Version Control Integration"



In the popup select Git for the version control system and click OK


Now right click on the project and select Git >>> + Add


And then Git >>> Commit Directory


 or VCS >>> Commit Changes


In this popup set Commit Message and click Commit


In the next step we will push the changes. For this select VCS >>> Git >>> Push


and we will see next popup


Here click on "Define remote" and enter URL of the GitHub repository and click OK.


Now we will see above popup with data... And click Push...


As result we will we  next error on the right top >>> Push rejected


This error is caused, because our repository contains files and we must pull this file as first. Also select VCS >>> Git >>> Pull


In the next popup click on Refresh button (1) then select Branches to merge (2) and click Pull (3).


And now we can repeat Push (VCS >>> Git >>> Push)...


Ready!!!

codefest.at [MS]: Wir bauen eine Windows 10 “Hosted Web App” (Project Westminster)

Viele Unternehmen wählen heutzutage als mobile Strategie einen "Mobile Web"- Ansatz.
Die Vorteile eines solchen liegen auf der Hand: dazu gehören u.a. die Unabhängigkeit von Stores, leichtere und schnellere Update-Möglichkeiten uvm. Mit Windows 10, der Universal Windows Platform und den dazugehörigen Universal Windows Platform Bridges bietet Microsoft nun eine Möglichkeit, die für Unternehmen mit einem "Mobile Web"- Ansatz mit Sicherheit interessant ist.: Project Westminster.

Vor einigen Wochen hat Rina bereits erste Informationen dazu gepostet und nun hat unser deutscher Kollege Patric Boscolo (MSFT)eine Schritt-für-Schritt Anleitung publiziert, mit deren Hilfe man eine erste “Hosted Web App” erstellen kann.

Viel Spaß beim Programmieren…

Sven Hubert: Neu in TFS 2015 – Welche Features Microsoft uns bring und Start der Blog-Serie

Am 17. Oktober 2013 war es so weit: der Team Foundation Server und das Visual Studio 2013 wurden veröffentlicht. Seit dem sind 641 Tage vergangen, und am 20.7. hieß es endlich: Der Team Foundation Server 2015 RC2 ist veröffentlicht. Wir werden in diesem und den nachfolgenden Artikeln beleuchten, was Microsoft und seine Entwickler in dieser Zeit für uns alles implementiert haben, welche Hindernisse gelöst und welche Szenarien nun adressiert werden können. Ich freue mich mit Ihnen zusammen auf einen Rundgang durch modernstes Application Lifecycle Management!

Betrachten wir die Zeitachse der TFS Releases der letzten zwei Jahre fällt auf, dass, wie von Microsoft angekündigt, die Quarterly Updates in einem Abstand von 80-100Tagen als RTM veröffentlicht wurden. Mit dem letzten Update 5 für den TFS 2013 hatte sich das Dev-Team aber etwas mehr Zeit gelassen. Warum? Lesen wir die Release Notes kommen wir schnell drauf: Team Project Rename. Ein seit den Anfängen des TFS gehegter Wunsch, Team Projekte umbenennen zu können, wird erfüllt. Und dafür also so viel Aufwand? Wegen ein paar kleinen Spalten in der Datenbank? Ja und nein: Zum Einen musste die Kompatibilität zum TFS 2015 und VSO sichergestellt werden, zum Anderen liegt ein Team Projekt Rename auf der direkten Linie mit dem zweit heißesten gewünschten Feature auf User Voice: „Team Projekte einzeln archivieren und zwischen Team Project Collections verschieben zu können“ (Link). Wer weiß also, wo die nächsten Quarterly Updates noch enden…

 

 

TFS release dates

 

Das Microsoft diese, zugegebenermaßen ärgerlichen, aber dennoch nicht primär erfolgsentscheidenden Features nun adressiert, zeigt das die User Voice nach wie vor einen Einfluss auf die Produktgestaltung hat und auch das der TFS als Produkt erwachsen wird. Nach 10 Jahren sind die großen Bereiche des Softwareentwicklungsprozesses weitestgehend abgedeckt, und es geht schon lange nicht mehr um die groben „Hobelarbeiten“. Bei VSO wurde schon vor über 2 Jahren mit dem  Feinschliff begonnen – in kurzen Sprintzyklen hat das VSO Team alle zwei Wochen neue Features bereitgestellt.

Wird es also ein Release der kleinen Features? Keineswegs. Das Buildsystem wurde beispielsweise vollständig überarbeitet.(*) Wo früher noch XAML-Dateien ein MSBUILD aufgerufen haben, verwenden wir heute JSON und starten jeden Build-Schritt den wir uns vorstellen können: Ein PowerShell-Script, ein embedded Compiler oder ein Test-Framework – alle dies sind nun nur noch einzelne, kombinierbare Aufgaben statt eines unübersichtlichen langen Build Workflows. Mehr Flexibilität und mehr Cross-Plattform.

Seien Sie also gespannt, was wir in den nächsten Tagen und Wochen alles in detaillierter Form zu berichten haben.

 

 

(*) Bestehende Build-Definitionen aus der früheren TFS Version können natürlich auch weiterhin verwendet werden.

Marco Scheel: Links for 2015-07-26 [del.icio.us]

Johnny Graber: Neues in .Net

Im Schlepptau der Veröffentlichung von Visual Studio 2015 gibt es zahlreiche Neuigkeiten rund um .Net. Bei all den Versionen und Ankündigungen verliert man jedoch schnell den Überblick und alleine die Videos vom “Final Release Event” kommen zusammen auf fast 5 Stunden Demos und Erklärungen. Damit man ein wenig gezielter nach Neuigkeiten suchen kann, habe ich hier eine kleine Auslegeordnung der für mich wichtigsten Punkte vorgenommen.

 

.Net 4.6 und C# 6

Das .Net Framework wird kräftig weiterentwickelt und bietet mit Roslyn ganz neue Möglichkeiten zur Codeanalyse. Im Moment hört sich in diesem Bereich noch vieles nach einer netten Spielerei an. Richtig angewendet dürfen wir uns auf eine ganz neue Generation von Analysewerkzeugen freuen, die weit über Dinge wie die Null-Check Warnhinweise von ReSharper hinausgehen.

Für Entwickler wohl am deutlichsten spürbar ist der neue Null-Conditional Operator, der einem zahlreiche mühsame Null-Kontrollen erspart. Ob die Variablen customers oder Orders auf dieser Zeile Null sind spielt keine Rolle, der Code wird ausgeführt und liefert das gewünschte Ergebnis:

int? first = customers?[0].Orders?.Count();

Weitere Neuerungen wie die Filter bei Exceptions muss ich erst selber ausprobieren. Hat man jahrelang ohne diese Funktion programmiert fällt es einem oft schwer den Nutzen zu erkennen. Dies dürfte sich je nach Anwendungsfall aber schnell ändern, von dem her sollte man damit erst ein wenig herumexperimentieren bevor man ein Urteil fällt.

 

ASP.NET 4.6 ist nicht vNext

Im letzten Jahr war bei ASP.NET vor allem die Rede von vNext. Diese Neuentwicklung bricht mit dem bisherigen ASP.NET und hat als eines der auffälligsten Merkmale die project.json Datei. Zwischenzeitlich wurde vNext in ASP.NET 5 umbenannt. Damit es aber richtig kompliziert wird nennt man die Verschmelzung von ASP.NET MVC und Web API nun ASP.NET MVC 6. Dies da ASP.NET MVC 5 ja bereits im Oktober 2013 mit Visual Studio 2013 erschienen ist.

ASP.NET vNext resp. 5 ist noch in der Entwicklung und dürfte nach aktueller Roadmap erst im 1. Quartal 2016 erscheinen. Somit bleibt noch ein wenig Zeit bis man sich in ein grundlegend neues Framework einarbeiten muss.

Das jetzt veröffentlichte ASP.NET 4.6 enthält vor allem Optimierungen und Detailverbesserungen für die aktuellen Versionen von MVC, Web Forms und Web API. Damit findet man sich schnell zurecht, da die grossen Änderungen ja erst 2016 kommen. Dennoch lohnt sich ein Update, denn die verbesserte Unterstützung von IntelliSense für Bootstrap und AngularJS spürt man deutlich.

 

Änderungen an den Visual Studio Versionen

Die Premium und die Ultimate Version von Visual Studio 2013 wurden bei 2015 in der Enterprise Version kombiniert. Dementsprechend müssen sich bisherige Besitzer der Premium Version bei der nächsten Vertragserneuerung auf höhere Lizenzkosten gefasst machen.

Am unteren Ende der Versionspalette befindet sich die Visual Studio Community Edition, die gerade für kleinere Teams und Firmen mit weniger als 250 PCs oder 1 Million $ Jahresumsatz eine interessante Alternative darstellt. Entgegen der bekannten Express-Edition kann man hier die IDE erweitern und beispielsweise auch ReSharper verwenden.

Welche Version man nun mit welchen Funktionen erhält findet man auf der Übersichtseite von Microsoft.

 

Fazit

Diese Woche bringt für.Net Entwickler viel Neues. Leider erschwert der nicht gerade übersichtliche Mix aus 4.6, 5 und 6er Versionen das Zurechtfinden. Diese Verwirrung dürfte sich aber bald legen und mit ein wenig produktiver Erfahrung wird man die neuen Möglichkeiten von C# auch besser einordnen können. Angesichts von ASP.NET 5 wird es auch im 2016 spannend bleiben…


Einsortiert unter:.Net, dnugBern Tagged: .Net, C#, VisualStudio

Manfred Steyer: Online-Artikel-Serie zu Web APIs mit ASP.NET MVC 6

Mit ASP.NET 5 und .NET Core will Microsoft eine neue Ära von .NET einläuten. Das Framework soll modularer sowie plattformunabhängig werden. Außerdem sollen verschiedene Versionen künftig einfacher nebeneinander auf einem Server betrieben werden können. Da dieser nach über zwölf Jahren durchgeführte Frühjahrsputz ohnehin Breaking Changes notwendig macht, nutzt Microsoft die Gelegenheit, Mehrgleisigkeiten zu entfernen. Dazu gehört die Tatsache, dass in den letzten Jahren mit ASP.NET MVC und ASP.NET Web API zwei sehr ähnliche Frameworks nebeneinander existierten. Während der Fokus bei MVC auf Webanwendungen und bei Web-API auf HTTP-basierten Services – so genannten Web-APIs – lag, teilten sie viele zum Teil nur geringfügig anders implementierte Konzepte, wie Controller, Model, Model Binding oder Routing.

Infos dazu findet man in meinen Online-Artikeln bei entwickler.de:

Web-APIs mit ASP.NET MVC 6, Teil 1: Grundlagen
https://entwickler.de/online/web-apis-mit-asp-net-mvc-6-160060.html

Web APIs mit ASP.NET MVC 6, Teil 2: Unter der Motorhaube
https://entwickler.de/online/web-apis-mit-asp-net-mvc-6-2-160327.html

Marco Scheel: Links for 2015-07-24 [del.icio.us]

Martin Hey: SSLPeerUnverifiedException in Verbindung mit Android und IIS8

Das Backend für meine App sollt nur über eine https-Verbindung erreichbar sein. Alles kein Problem dachte ich mir, schnell ein SSL-Zertifikat besorgt und dieses der https-Bindung der Webanwendung zugewiesen. Alles kein Problem und auch der Browser zeigt das kleine grüne Schloss an und der Zertifizierungspfad war ok.


Um so überraschter war ich, dass meine Android App nun jeden Request mit einer Exception quittierte: 
javax.net.ssl.SSLPeerUnverifiedException (SSL peer not authenticated)

Laut Dokumentation passiert das, wenn man ein selbst signiertes Zertifikat verwendet und die Tipps im Web sind sehr breit gestreut - unter anderem "stelle den HttpClient doch so ein, dass er allen Zertifikaten vertraut". Das hilft bei selbst signierten Zertifikaten für eine Demo sicher, für eine echte App mit Kundendaten verwende ich diesen Tipp lieber nicht.

Was war nun aber Ursache für das Problem? Ich hatte im IIS in der https-Bindung den Haken bei "Require Server Name Indication (SNI)" gesetzt. Diese Einstellung sorgt eigentlich dafür, dass sich mehrere verschlüsselt abrufbare Websites unterschiedlicher Domains einen Server mit nur einer IP Adresse teilen können. Allerdings können ältere Browser damit Probleme haben. Offenbar zählt der HttpClient in Android / Java dazu, denn kaum hatte ich den Haken entfernt, ließ sich problemlos auf meine REST-API über HTTPS zugreifen.

Holger Sirtl: Azure News on Friday (KW30/15)

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

Datum Nachricht
22.07. Azure Data Factory Visual Studio Extension for authoring pipelines
Visual Studio Extension für die Azure Data Factory ist allgemein verfügbar - Daten-Workflows in VS editieren
22.07. Introducing pen remoting for Windows 10 and Windows Server 2016
Unter Windows 10 wird die Möglichkeit zur Stifteingabe in Remote Desktop Sessions nochmals vereinfacht.
22.07. Announcing general availability of premium encoding
Premium Encoding in Azure Media Services sind ab sofort allgemein verfügbar.
22.07. Azure Search – New regions, samples and datasets
Azure Search ist jetzt in weiteren Regionen (Australien, Japan, Brasilien) verfügbar.
22.07. SQL Server 2016 Upgrade Advisor Preview and CTP 2.2 now available
Umstieg von einer früheren Version auf SQL Server 2016 geplant? Preview des SQL Server 2016 Upgrade Advisors
22.07. Using the Enterprise Mobility Suite to Protect Your Organization with Identity-driven Security
Absicherung von Unternehmens-Ressourcen mit Hilfe der Enterprise Mobility Suite und deren Möglichkeit zur Verwaltung mobiler Geräte.
22.07. Monitoring and Exploring your Visual Studio Online Work Items with Power BI
Visual Studio Work Items mit PowerBI visualisieren und auswerten.
22.07. Microsoft and Particle make connected devices simple with new Azure integration
Kooperation von Microsoft und Particle.IO: IoT Szenarien mit Particle-Tools, Event Hub, Stream Analytics etc.
22.07. Microsoft Advanced Threat Analytics coming next month
Infos zu Microsoft Advanced Threat Analytics (ATA) und dessen Möglichkeiten zur Analyse von Bedrohungsszenarien.
21.07. Power BI - GA and beyond...
Letzte Vorbereitungen und Aktivitäten vor der allgemeinen Verfügbarkeit von Power BI.
21.07. Power BI Weekly Service Update
Neuerungen in Power BI: Team Zusammenarbeit, Aktualisierung von Datenquellen gleichen Namens etc.
21.07. Leveraging the OMS Search API in an Azure Automation Runbook
Überwachung eines Accounts via Operations Management Suite (OMS) Search API in einem Azure Automation Runbook.
21.07. Every developer can now build their career with Azure Vidyapeeth
Mit Azure Vidyapeeth gibt es nun ein neues Trainingsangebot für alle Azure-Interessierten: Videos, MVA, Webinare etc.
21.07. Microsoft Passport and Azure AD: Eliminating passwords one device at a time!
Windows 10, Microsoft Passport und Azure AD schicken sich an Passwort-Eingaben in Zukunft bei steigender Sicherheit überflüssig zu machen.
21.07. Tuesdays with Corey: Linux Announcements and MOAR ARM
Corey Sanders fasst alle Ankündigungen der letzten Tage zu Linux auf Azure zusammen
20.07. Released Today: Visual Studio 2015, ASP.NET 4.6, ASP.NET 5 & EF 7 Previews
Release-Feuerwerk: Visual Studio 2015, ASP.NET 4.6, ASP.NET 5 & EF 7 Previews und das neue Azure SDK for .NET 2.7
20.07. Announcing the Azure SDK 2.7 for .NET
Neben dem Launch von Visual Studio 2015 fast untergegangen: das neue Azure SDK 2.7 für .NET ist da!
20.07. Application Insights Tools in Visual Studio 2015 RTM
Wie geht's meiner Anwendung? Detaillierte Informationen via Azure Application Insights und Visual Studio

Norbert Eder: C# 6: Auto-Property Initializers

In C# 3 wurden die Auto-Implemented Properties eingeführt. Auf Deutsch besitzen sie den wohlklingenden Namen Automatisch implementierte Eigenschaften. Sie werden so definiert:

public DateTime CreateDate { get; set; }

Dabei erstellt der Compiler im Hintergrund ein „unsichtbares“ Attribut, welches einen etwaigen Wert enhält. Nun ist es aber unpraktisch, einer derartigen Eigenschaft einen Default-Wert zu verpassen:

public DateTime CreateDate { get; set; }

public Address()
{
    CreateDate = DateTime.Now;
}

Mit C# 6 kann ein Default-Wert auch folgendermaßen gesetzt werden:

public DateTime CreateDate { get; set; } = DateTime.Now;

Das sieht schon mal ganz gut aus, funktioniert aber auch, wenn nur ein Getter vorhanden ist, der Wert also nicht verändert werden können soll (immutable):

public DateTime CreateDate { get; } = DateTime.Now;

In diesem Falle kann CreateDate nicht verändert werden (außer im Konstruktor).

Viel Spaß!

The post C# 6: Auto-Property Initializers appeared first on Norbert Eder.

Jürgen Gutsch: ASP.NET 5 Middlewares im Detail

Wie im ersten Beitrag erwähnt, implementiert ASP.NET 5 die OWIN Spezifikation und ist somit dem Projekt Katana recht ähnlich und übernimmt auch einige der Konzepte. So auch das Konzept der Middlewares, die sich in die Request- und Response-Pipeline hängen können.

Middleware

Die eingehängten Middlewares sind verkettet. Jede Middleware kennt die nächste und ruft diese auf.

Middlewares lassen sich mit HttpModulen aus der klassischen ASP.NET Welt vergleichen, der unterschied ist jedoch, dass die Reihenfolge fest vorgegeben ist und dass sich die Middlewares selber nacheinander aufrufen.

Eigene Middleware

Middlewares werden in der Startup.cs in der Methode Configure über den IApplicationBuilder angehängt. In einem neuen Projekt über ein Visual Studio Template sind schon einige Middlewares angehängt. So auch in unserer Startup.cs, allerdings in Form einer Extension-Methode auf dem IApplicationBuilder, was die Lesbarkeit etwas erhöht:

app.UseStaticFiles();
app.UseWelcomePage();

Die beiden Extensein-Methoden fügen die Middlewares für statische Dateien und für die Welcome-Page an.

Die einfachste Art Middleware ist die in Form einer Lambda-Expression. Dafür wird die Methode Use des IApplicationBuilder verwendet:

app.Use(next => async context =>
{
    // do something before the next MiddleWare starts

    await next.Invoke(context);

    // do something after the next MiddleWare started
});

Was wir hier sehen ist eine doppelte Lambda. Use() erwartet eine Func die ein RequestDelegate bekommt und eines zurück gibt. Ausgeschrieben sähe das in etwa so aus:

app.Use(FuncDelegate);

//[…]

private RequestDelegate FuncDelegate(RequestDelegate next)
{
    return async context =>
    {
        // do something before the next MiddleWare starts

        await next.Invoke(context);

        // do something after the next MiddleWare started
    };
}

Die Reihenfolge in der die Middlewares ausgeführt werden ist die Reihenfolge, in der die Middlewares eingebunden werden.

Diese Schreibweise ist perfekt für kleine Aktionen, oder zum debuggen. Würde man allerdings alle Middlewares auf diese Art schreiben, würde die Startup.cs relativ schnell sehr unübersichtlich werden. Vor allem bei Middlewares die recht aufwendig sind. Spätestens dann, sollte man größere Middlewares als eigene Klasse anlegen.

public class MyMiddleware
{
    private readonly RequestDelegate _next;
   
    public MyMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        // do something before the next MiddleWare starts

        await _next.Invoke(context);

        // do something after the next MiddleWare started
    }
}

Hier können wir nun alles Mögliche machen, indem wir auf den Context zugreifen und diesen Auswerten.

Beispiel:

Als Beispiel für eine etwas komplexere Middleware, möchte ich hier eine Logging-Middleware zeigen, die interessante Request-Informationen auf der Konsole ausgibt:

public class LoggingMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;

    public LoggingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
    {
        _next = next;
        _logger = loggerFactory.CreateLogger("ExtendedLogging");
    }

    public async Task Invoke(HttpContext context)
    {
        _logger.LogInformation("{0} - {1} - {2}",
            context.Request.Method,
            context.Request.Path,
            context.Request.QueryString.Value);

        await _next.Invoke(context);
    }
}

public static class LoggingMiddleWareExtension
{
    public static void UseExtededLogging(this IApplicationBuilder app)
    {
        app.UseMiddleware<LoggingMiddleware>();
    }
}

In der Program.cs müssen wir die Middleware nun noch einbinden:

public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(); 
     
    loggerFactory.MinimumLevel = LogLevel.Verbose;
    app.UseExtededLogging();
 
    app.UseStaticFiles();
    app.UseWelcomePage();
}

In der Konsole werden nun die Informationen ausgegeben, die wir in der Middleware gesammelt haben:

image

Was passiert, wenn man die nächste Middleware nicht aufruft? Wie zu erwarten ist, werden nachfolgende Middlewares nicht ausgeführt ;) Das heißt aber konkret, dass die Abarbeitung des Requests hier tatsächlich am Ende ist. Das macht z. B. Sinn, wenn man eine Middleware zur Authentifizierung erstellt. Ist die Authentifizierung nicht erfolgreich könnte ein HTTP-Status 401 (Unauthorized) gesendet werden und die Verarbeitungskette abgebrochen werden.

Auch gibt es die Möglichkeit, in eine andere Verarbeitungsketten zu verzweigen. Um so bestimmte Requests auf eine andere Art zu behandeln. Das könnte Sinn machen, wenn man Web API und MVC unterschiedlich authentifizieren möchte. Das kann mit der Methode Map gemacht werden:

app.Map("/static", a =>
{
    a.UseStaticFiles();
});

Hier werden bei Anfragen die mit dem Pfad “/static” beginnen, ausschließlich statische Dateien behandelt.

Alexander Schmidt: Back to the roots

Nachdem immer mehr Leser im Feedback angegeben haben, dass das Lesen der Beiträge eher schwieriger wurde, haben wir das Layout komplett neu gewählt. Wir setzen jetzt erst einmal ein Standard „Twenty Fifteen“ von WordPress ein und konzentrieren uns auf kleinere Anpassungen hier. In den nächsten Tagen werden also Updates erfolgen und Ihr seid live dabei!

Karsten Kempe: TFS 2015 Kanban Customization

VisualStudioLogoDie Planungskomponenten des Team Foundation Servers sind nach wie vor einer der Hauptgründe, warum sich Entwicklungsteams für ein Upgrade auf eine neue Version des TFS entscheiden. Zum Release des TFS 2015 wird es einige Erneuerungen für die Visualisierung und Planung von Arbeitspaketen geben. In diesem Beitrag möchte ich Euch das „neue“ Kanban Board vorstellen, dass mit seinen zahlreichen Neuerungen so manches Team begeistern kann.

Generell kann man sagen, dass das neue Kanban Board des TFS 2015 aufgeräumter und übersichtlicher wirkt, als das alte. Zudem hat es größere Kärtchen zur Darstellung zusätzlicher Informationen und bietet einige neue Möglichkeiten für teamspezifische Anpassungen. Außerdem kann nun auch auf dem Board die Abarbeitungsreihenfolge (Backlog-Reihenfolge) geändert und die wichtigsten Arbeitspakete an das obere Ende der Spalte geschoben werden.

TFS_Kanban_Task_2015_RCAbbildung 1: Kanban Board aus TFS 2015 RC2

Neu ist zudem, dass nun der Einstellungs-Dialog mit Hilfe eines Buttons über dem Kanban Board aufgerufen wird. Die on-premise Variante des Team Foundation Server ermöglicht die Anpassung von drei Bereichen auf dem Board – Columns, Swimlanes und Cards.

Positiv aufgefallen ist mir, dass, wie bereits erwähnt, jedes Team eigene Einstellungen vornehmen kann, was gerade in Unternehmen mit vielen Teams und Hierarchie-Ebenen durchaus sinnvoll ist.

TFS_Kanban_Customizing_2015_RC2Abbildung 2: Kanban Einstellungen aus TFS 2015 RC2

Der Einstellungsdialog für Columns hat sich nicht groß geändert. Nach wie vor können zusätzliche Kanban-Spalten erzeugt und deren Reihenfolge angepasst werden. Je nachdem von welcher Version ausgegangen wird, findet man folgende Zusatzfunktionen:

  • Split Column: die Kanban-Spalte wird nochmal unterteilt in „Doing“ und „Done“
  • Definition of Done: zu jeder Spalte können Kriterien festgehalten werden, die das Arbeitspaket erfüllen muss, um den jeweiligen Zustand erfolgreich abzuschließen

TFS_Kanban_Columns_2015_RC2Abbildung 3: Kanban Column-Einstellungen in Team Foundation Server 2015 RC2

Neu hinzugekommen ist die Eigenschaft, sogenannte Swimlanes zu definieren. Swimlanes sind horizontale Bereiche auf einem Kanban Board, um Arbeitspakete nach bestimmten Kriterien zu gruppieren. Zum Beispiel, um hochpriorisierte Arbeitspakete leichter zu identifizieren oder um Arbeitspakete in bestimmte Tätigkeitsbereiche einzusortieren (z.B. Wartung, Features, Architektur, Design, etc.).  Damit erhöht sich die Übersichtlichkeit auf dem Board und die Durchlaufzeit eines Pakets könnte reduziert werden.

TFS_Kanban_Swimlanes_2015_RC2Abbildung 4: Swimlane-Einstellungen im Team Foundation Server 2015 RC2

Eine weitere Neuerung des Team Foundation Server ist das Anpassen von den Kanban-Kärtchen. Für jeden Kärtchen-Typ, Product Backlog Item oder Bug, können individuelle Styles vergeben werden. Bisher können folgende Werte konfiguriert werden:

  • Show ID: damit wird die Work Item ID auf dem Kärtchen gezeigt
  • Assigned To: bietet eine Auswahl, ob ein Foto mit Bearbeitername, nur ein Foto oder nur der Name angezeigt werden soll
  • Show Effort: zeigt das Effort-Feld des Work Items
  • Show Tags: zeigt alle Tags des Work Items
  • Show additional fields: einige weitere Work Item Felder können angezeigt werden

TFS_Kanban_Cards_2015_RC2Abbildung 5: Card Customization des Team Foundation Server 2015 RC2

Mit der Möglichkeit weitere Felder anzuzeigen, wird es in Zukunft auch möglich sein, zusätzliche Visualisierungen auf den Kärtchen abhängig vom Inhalt des Felds zu realisieren. Diese Art des Card-Stylings zeige ich im nächsten Teil, in dem es um Rules und Styles geht.

Zum Abschluss noch ein kleiner Ausblick was bereits jetzt in Visual Studio Online möglich ist. Und zwar werden dort schon die einzelnen Dialoge in einem einzigen Settings-Dialog zusammengefasst.

TFS_Kanban_Customizing_2015_VSOAbbildung 6: Settings-Dialog in Visual Studio Online (Release 17.07.2015)

Wer sich jetzt frägt, ob es diese Einstellungsmöglichkeiten auch auf dem Task-Board gibt, dem muss ich jetzt leider mit „Ja, aber…“ antworten. All diese Möglichkeiten gibt es auch auf dem Task-Board, aber noch nicht zum Release des Team Foundation Server 2015. Visual Studio Online Anwender hingegen dürfen sich schon freuen, dort gibt es alle Features bereits jetzt.

[1] TFS 2015 Planungskomponenten im neuen Gewand

[2] TFS 2015 Kanban Customization

[3] TFS 2015 Card Customization (Rules & Styles)

 

codefest.at [MS]: Free Refactoring Essentials for Visual Studio 2015

Wer mit Visual Studio arbeitet liebt sie – und braucht sie: Tools um produktiv zu arbeiten. Aus der Community gibt es eine sehr coole kostenfreie Extension für Visual Studio 2015, die "Refactoring Essentials for Visual Studio"!

Die Refactoring Essentials bieten – wie der Name verrät – Refactoring und Code Analyzer direkt in Visual Studio an. “The premier free Visual Studio 2015 extension for C# and VB.NET refactorings, including code best practice analyzers to improve your projects.”

Die Extension wurde ganz aktuell (gestern) auf Version 1.1. aktualisiert:
VisualStudioGallery: Refactoring Essentials for Visual Studio

image

Die Installation der VS Extension erfolgt wie gewohnt ruck zuck
– und funktioniert auch für die niegel-nagel-neue Visual Studio 2015 RTM Version.

image image

Nach der Installation stehen die Code Analyzer sofort bereit, wie etwa in diesen Beispielen hier.

Mit CTRL + . (oder Anklicken des Icons) können die Empfehlungen jederzeit geöffnet werden.

image

…an verschiedensten Stellen raten die Refactoring Essentials zur Vereinfachung:

image

Das Besondere daran ist, dass die Refactoring Essentials kostenfrei sind, eine tolle Qualität besitzen, Extensions für eigene Anpassungen unterstützen und dass sie vom icsharpcode-Team entwickelt wurden – siehe Contributors.

Hier geht es zur http://vsrefactoringessentials.com/ Website.

image

Wow, sogar Scott Hanselman hat die Tools in seinem Blog beschrieben:
VS Refactoring Essentials (formerly) NR6Pack - Free analyzers and refactoring for Visual Studio 2015

image

Die Refactoring Essentials Sourcen sind auf GitHub unter MIT-Lizenz verfügbar:
icsharpcode/RefactoringEssentials. Issues können hier gemeldet werden.

VS Refactoring Essentials sind aus SharpDevelop in NRefactory und danach in NRPack übergegangen. Die letzte stabile Version (Ende Mai 2015) war NRefactory Version 6. Mit Refactoring Essentials wurde die IDE komplett überarbeitet (code completion, refactorings, etc.) und verwendet nun den neuen Roslyn Compiler (Open Source auf GitHub).

Weitere Infos über die Extensions sind hier zu finden:
Andreas Weizel: NRefactory & NR6Pack Finally Roslyn-ized und
Christoph Wille: Refactoring Essentials for Visual Studio.

Die Refactoring Essentials sind eine große Hilfe zur Verbesserung der eigenen Code-Qualität und stellen eine echte Alternative zu kommerziellen Tools dar (nein, ich nenne sie jetzt nicht “ReSharper für Arme” – seht euch die Funktionalität einfach selbst einmal an).

Ein großes Danke an die Autoren der coolen kostenfreien Extensions “Refactoring Essentials for Visual Studio 2015”!

Für die letzten Neuerungen folgt den Refactoring Essentials auf Twitter: @vsrefactoring!

Norbert Eder: C# 6: Null-conditional Operator

Wer kennt es nicht, das ständige Prüfen auf null bevor auf Eigenschaften zugegriffen oder Methoden ausgeführt werden. Damit wollen wir eine NullReferenceException möglichst vermeiden. Diese Prüfungen sehen etwa wie folgt aus:

Person firstPerson = null;
var newAddress = new Address();

if (firstPerson != null)
{
    firstPerson.Relocate(newAddress);
}

Weit schlimmer sieht das bei komplexeren Objektbäumen/Datenstrukturen aus. Mit C# 6.0 bietet mit dem null-conditional Operator eine Vereinfachung:

Person firstPerson = null;
var newAddress = new Address();

firstPerson?.Relocate(newAddress);

Mit ?. wird der Zugriff nur ausgeführt, wenn die Variable auf ein Objekt zeigt. Das funktioniert mittels ?[ allerdings auch für Index-Operationen:

var street = firstPerson?.Addresses?[0]?.Street;

Das sieht doch weit besser aus als:

string street;
if (firstPerson != null 
    && firstPerson.Addresses != null 
    && firstPerson.Addresses.Count > 0)
{
    if (firstPerson.Addresses[0] != null)
    {
        street = firstPerson.Addresses[0].Street;
    }
}

Oder nicht?

Der Einsatz bei Delegates/Events klappt ebenfalls wunderbar (thread-sicher):

public delegate void ChangeAddress(Address address);
...
public event ChangeAddress AddressChanged;
...
public void Relocate(Address address)
{
    PhysicalAddress = address;

    AddressChanged?.Invoke(address);
}

Die bisherige Variante im Vergleich dazu:

var changed = AddressChanged;
if (changed != null)
{
    changed(address);
}

Viel Spaß damit :)

The post C# 6: Null-conditional Operator appeared first on Norbert Eder.

Code-Inside Blog: Semantic Versioning in a nutshell

I made a short tweet today and it seems I hit a nerve:

Because I like blogging I decided to write a small blogpost about SemVer.

Why Semantic Versioning (SemVer)

In our industry we use version numbers a lot. The typical naming is MAJOR.MINOR.PATCH, sometimes also MAJOR.MINOR.PATCH.BUILD or instead of PATCH you could say REVISION - it is more or less the same.

But the problem is: This is not very self describing. What is MAJOR or a REVISION? When should I change the MAJOR version and when should I increase the MINOR version etc. You see: It sounds simple, but it is really complicated.

SemVer

SemVer is a pretty simple concept to give each part a better description.

Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,
  • MINOR version when you add functionality in a backwards-compatible manner, and
  • PATCH version when you make backwards-compatible bug fixes.
  • Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

If you change your API with breaking changes: Increase the MAJOR version. A new feature? Increase the MINOR version. Bugfix? Simple…

So in short: Breaking.Feature.Bugfix

It’s a technical solution - don’t try to get nice Marketing-Version-Numbers

SemVer is a technical solution - if you want to get great Marketing-Version-Numbers this will probably fail, so maybe you should split the “commercial” and “technical” version number.

Learn more

I had read the “Breaking.Feature.Bugfix” summary somewhere else, but I can’t remember the original author (Kudos!), but I received this Tweet with a full talk about exactly this topic, so if you want to learn more:

Well…

Just for fun:

;)

Hope this helps!

Sven Hubert: TFS PowerShell Scripting: Product Backlog Item (PBI) und Arbeitsaufgaben für ein Team erstellen

Nutzt man das Backlog des TFS auch für die Verwaltung von administrativen Aufgaben kommt es häufig vor, dass man ein Product Backlog Item (PBI) erstellt, unter dem dann jedes Team Mitglied einen Task hinterlegen muss. Typisch hierfür ist z. B. die Vervollständigung der Zeitabrechnung am Monatsende. Schnell wird das Anlegen der Tasks und damit die Bearbeitung vergessen. Kann man hier nichts automatisieren? Klar! Mit PowerShell lässt sich dies sehr leicht lösen.

Referenzen und TFS Dienste laden

Zu allererst ist es nötig die TFS Referenzen in die PowerShell zu laden:

#Load Reference Assemblies 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.ProjectManagement") 

 


Weiter werden auch einige TFS-Dienste benötigt:

$TeamProjectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($Url) 
$TeamProjectCollection.EnsureAuthenticated()

# Service instances 

$css4 = 
   ($TeamProjectCollection.GetService([type]"Microsoft.TeamFoundation.Server.ICommonStructureService4")) -as 
     [Microsoft.TeamFoundation.Server.ICommonStructureService4] 

$teamService = 
   ($TeamProjectCollection.GetService([type]"Microsoft.TeamFoundation.Client.TfsTeamService")) -as 
     [Microsoft.TeamFoundation.Client.TfsTeamService] 

$teamConfigService = 
   ($TeamProjectCollection.GetService([type]"Microsoft.TeamFoundation.ProcessConfiguration.Client.TeamSettingsConfigurationService")) -as 
     [Microsoft.TeamFoundation.ProcessConfiguration.Client.TeamSettingsConfigurationService] 

$store = 
   ($TeamProjectCollection.GetService([type]"Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore")) -as 
     [Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore]

TFS-Team finden

Mit dem „ICommonStructureService4“-Dienst können wir die Project-Uri abfragen, mit deren Hilfe wir, zusammen mit dem „TfsTeamService“-Dienst Zugriff auf die Teams erhalten. Nun muss nur noch das richtige Team anhand des Namens gefunden werden:

$proj = $css4.GetProjectFromName($ProjectName) 
$allTeams = $teamService.QueryTeams($proj.Uri) 

$foundTeam = $null 

ForEach($t in $allTeams) 
{ 
        if ($t.Name -eq $Team) 
        { 
                $foundTeam = $t 
        } 
} 

if (!$foundTeam) { 
        throw "The Team $Team could not be found!" 
}

 


Standard-Area des Teams abfragen

Das Team benötigen wir einerseits natürlich für die Team-Mitglieder, aber andererseits können wir auch die Standard-Area des Teams abfragen, damit die erstellten Arbeitsaufgaben auch innerhalb des Teams gefunden werden (Wir erinnern uns: Arbeitsaufgaben werden zu Areas hinzugefügt, welche ihrerseits an Teams weitergegeben werden):

# Get default area of team 

$ids = [System.Linq.Enumerable]::Repeat($foundTeam.Identity.TeamFoundationId, 1) 
$teamConfigs = [System.Linq.Enumerable]::ToArray($teamConfigService.GetTeamConfigurations($ids)) 
$teamConfig = $teamConfigs[0].TeamSettings 

$defaultTeamArea = $teamConfig.TeamFieldValues[0].Value 
Write-Host "Using default area of team: $defaultTeamArea"

 

PBI erstellen

Nun müssen wir die “WorkItemType”-Instanzen abrufen um “WorkItems” erstellen zu können, denn Arbeitsaufgaben können immer nur mit einem bestimmten Typ erstellt werden:

$project = $store.Projects[$ProjectName]
$wit = $project.WorkItemTypes[$WorkItemType] 

if (!$wit) { 
        throw "The WorkItemType $WorkItemType could not be found in project $ProjectName" 
} 

$taskType = $project.WorkItemTypes["Task"]

if (!$taskType) { 
        throw "The WorkItemType Task could not be found in project $ProjectName" 
}

 


Der WorkItemType „Task“ sollte fast immer verfügbar sein, den Typ für das PBI haben wir hier Variabel, je nach Aufgabe, gewählt. Es bleibt dem interessierten Leser überlassen auch „Task“ variabel zu gestalten (Bei sehr speziellen TFS-Konfigurationen zum Beispiel). Nun können wir, dank all der Vorarbeit, auch schon das PBI erstellen:

# Create Product Backlog Item (PBI) 
Write-Host "Creating Product Backlog Item" 
$pbi = New-Object Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem ($wit) 
$pbi.Title = $Title 
$pbi.AreaPath = $defaultTeamArea 
$pbi.Save()

 

Arbeitsaufgaben erstellen und mit PBI verlinken

Um nun für jedes Teammitglied eine Arbeitsaufgabe, quasi als Kind dieser PBI, zu erstellen, benötigen wir die ID des gerade erstellten Tasks, einen „System.LinkTypes.Hierarchy“ LinkTyp für die „Parent“-Beziehung, und natürlich die Team-Member. Das alles lässt sich aber relativ einfach abfragen:


$linkType = $store.WorkItemLinkTypes["System.LinkTypes.Hierarchy"] 
$pbiId = $pbi.Id 

# http://blog.johnsworkshop.net/tfs11-api-query-teams-and-team-members/ 
$members = $foundTeam.GetMembers($TeamProjectCollection, 
    [Microsoft.TeamFoundation.Framework.Common.MembershipQuery]::Expanded)

 

Nun bleibt nur noch das iterieren der Mitglieder, das Erstellen der Arbeitsaufgaben (funktioniert genau wie beim PBI) und das Einfügen der Beziehung zwischen den Aufgaben:

ForEach ($member in $members) { 
    if(!$member.IsContainer) { 

        # Filter out groups 
        $user = $member.DisplayName 

        if (!$user) { throw "User $member is invalid." } 

        Write-Host "Creating Task for user $user" 

        $workItem = New-Object Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem ($taskType) 
        $workItem.Title = "$Title" 
        $workItem["Assigned To"] = $user

        $workItem.AreaPath = $defaultTeamArea 
        $taskLink = 
            New-Object Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemLink ($linkType.ReverseEnd, $pbiId) 

        $workItem.Links.Add($taskLink) 
        $workItem.Save() 
    } 
}

 


Mit diesem PowerShell-Script lässt sich das Einfangs formulierte Problem automatisiert lösen. Dazu genügt beispielsweise ein Aufruf wie:

.\Create-Team-Work-Items -Url "https://ait.visualstudio.com/DefaultCollection" -ProjectName "AIT" -Team "Team.Phoenix" -Title "Abrechnung Erledigen " -WorkItemType "Requirement"

Das vollständige Script steht zum Download auf GitHub unter https://github.com/AITGmbH/AIT.Scripts.WorkItems/blob/master/Create-Backlog-Item-And-Tasks-For-Team-Members.ps1 zur Verfügung.

Referenzen / Weitergehende Blogs (u. U. auf Englisch):

http://blog.johnsworkshop.net/tfs11-api-query-teams-and-team-members/

http://www.nivot.org/blog/post/2009/10/09/PowerShell20AsynchronousCallbacksFromNET

http://blogs.msdn.com/b/abaturytski/archive/2007/06/11/effective-queries-in-tfs.aspx

http://blog.johnsworkshop.net/tfs11-api-reading-the-team-configuration-iterations-and-areas/

Norbert Eder: Visual Studio 2015 ist da!

Seit 20. Juli 2015 ist Visual Studio 2015 verfügbar. Zeitgleich wurde .NET in der Version 4.6 veröffentlicht. Und es hat sich eine ganze Menge getan:

  • JSON Editor
  • Support für JavaScript Package Manager (Grunt, Gulp, etc.)
  • Zusammenführung ser Debugging und Diagnostic Tools
  • Neue Sprachfeatures für C#, VB und C++
  • ASP.NET 4.6 inkl. Unterstützung für HTTP/2
  • Cross-Platform Mobile Development Tools mit Support für iOS, Android und Windows
  • Verbesserungen für die Teamzusammenarbeit im agilen Umfeld

Alle Änderungen findest du in den Visual Studio Release Notes näher beschrieben.

Und nun ab zum Visual Studio 2015 Download.

Edit: Visual Studio 2013 Update 5 kam gleichzeitig.

The post Visual Studio 2015 ist da! appeared first on Norbert Eder.

Jürgen Gutsch: ASP.NET 5 Release-Plan und Roadmap

Gestern, am 20. Juli wurde das Visual Studio 2015 released, sowie das .NET 4.6 und das Update 5 für das Visual Studio 2013. Mehr dazu hier in diesem Beitrag: Visual Studio 2015 and .NET 4.6 Available for Download

Was nicht released wurde ist ASP.NET 5. Der Grund ist unter anderem wohl der, dass .NET Core noch nicht soweit ist. 

So wie es auf Github steht, wird es noch 3 Beta-Versionen geben, im November dann eine RC1 und Anfang nächsten Jahres (Q1) ein Release:

Milestone Release Date
Beta6 27 Jul 2015
Beta7 24 Aug 2015
Beta8 21 Sep 2015
RC1 Nov 2015
1.0.0 Q1* 2016

Nichts desto trotz lohnt es sich jetzt schon, ASP.NET 5 und .NET Core genauer anzuschauen, zumal die Toolunterstützung in Visual Studio 2015 und Visual Studio Code bereits jetzt schon vorhanden ist.

(via Visual Studio 2015 Released plus ASP.NET 5 Roadmap)

Marco Scheel: Links for 2015-07-20 [del.icio.us]

Manfred Steyer: Visual Studio Code mit TypeScript und Angular 2 nutzen

Das neue Visual Studio Code, welches derzeit in der Version 0.5 vorliegt, ist ein leichtgewichtiger und plattform-übergreifend verfügbarer Code-Editor mit unterstützung für TypeScript 1.5. Auch Angular 2 setzt auf TypeScript 1.5 und somit bietet es sich an, erste Gehversuche mit Angular 2 unter Nutzung von Visual Studio Code zu unternehmen. Das dürfte auch einer der Gründe sein, warum selbst auf Google-Konferenzen Mitglieder aus dem Angular-Team immer auf Visual Studio Code zurückgreifen.

Um ein erstes Beispiel mit der vorliegenden Version 0.5 zum Laufen zu kriegen, sind ein paar Schritte notwendig, die ich nachfolgend in Form einer Schritt-für-Schritt-Anleitung festhalte. Dabei beziehe ich mich auf den 5 Min Quickstart auf angular.io. Da sich bei Angular 2 Details noch laufend ändern, findet man dort die aktuellsten Informationen.

  1. Visual Studio Code installieren (wer hätte das gedacht): https://code.visualstudio.com/
  2. Sicherstellen, dass NodeJS installiert ist, da im nachfolgenden der Node-Package-Manager npm genutzt wird: http://node.org/
  3. TypeScript installieren: npm install -g typescript
  4. Sicherstellen, dass die neueste Type-Script-Version über die Umgebungsvariable path zuerst gefunden wird. Zum Testen kann man auf der Kommandozeile via tsc -v die aktuelle Version abrufen.
  5. Den Package-Manager für Type-Script-Typ-Definitions-Dateien installieren. Laut 5 Min Quickstart auf angular.io erfolgt dies mit npm install -g tsd@^0.6.0
  6. Im Root des Projektes mit Visual Studio Code eine Datei tsconfig.json anlegen:
    {
     "compilerOptions": {
         "module": "commonjs",
         "sourceMap": true,
         "target": "ES5",
         "experimentalDecorators": true,
         "emitDecoratorMetadata": true
     } 
    }
  7. Ggf. muss man ab nun Visual Studio Code ab und an neu starten, damit Änderungen an zentralen Steuerungsdateien erkannt werden.
  8. Konsole im Root des Projektes öffnen (Strg+Shift+C) und die Typ-Definitionen für Angular 2 gemäß dem 5 Min Quickstart auf angular.io laden: tsd install angular2 es6-promise rx rx-lite
  9. Eine Datei app.ts und index.html gemäß den Angaben des 5 Min Quickstart auf angular.io anlegen. Der Vollständigkeit halber wiederhole ich die beiden Dateien am Ende.
  10. Zum Kompilieren Strg+Shift-b drücken
  11. Visual Studio Code legt nun eine Datei tasks.json an. Hier setzt man am besten die Eigenschaft args auf ein leeres Array, damit sämtliche TypeScript-Dateien berücksichtigt werden. Darüber hinaus sollte man isShellCommand auf true setzen:
     "args": [], 
     "isShellCommand": true,
  12. Beim Kompilieren mit Strg+Shift+b sollten nun eine app.js und eine app.js.map erstellt werden.
// app.ts
import {Component, View, bootstrap} from 'angular2/angular2';

@Component({
    selector: 'my-app'
})
@View({
    template: '<h1>Hello {{ name }}</h1>'
})
class AppComponent {
    name: string;

    constructor() {
        this.name = 'Susi';
    }

}

bootstrap(AppComponent);
<!-- index.html -->
<html>
  <head>
    <title>Angular 2 Quickstart</title>
    <script src="https://github.jspm.io/jmcriffey/bower-traceur-runtime@0.0.87/traceur-runtime.js"></script>
    <script src="https://jspm.io/system@0.16.js"></script>
    <script src="https://code.angularjs.org/2.0.0-alpha.31/angular2.dev.js"></script>
  </head>
  <body>

    <!-- The app component created in app.ts -->
    <my-app></my-app>

    <script>System.import('app').catch(console.error.bind(console));</script>

  </body>
</html>

Automatisch kompilieren

Zum automatischen Kompilieren könnte man die Tastenkombination STRG+s zusätzlich mit dem Kompilierungsschritt belegen. Dazu wählt man die Option File | Preferences | Keyboard Shortcuts. Danach trägt man die folgenden Daten im erscheinenden Fenster ein:

[
    {
        "key": "ctrl+s",          
        "command": "workbench.action.tasks.build" 
    }
]

Alternativ dazu könnte man auch in der tsconfig.json einen Eigenschaft watch mit dem Wert true eintragen. Das bewirkt, dass der Type-Script-Kompiler nach dem ersten Kompilieren mit STRG+SHIFT+b das gesamte Projektverzeichnis überwacht und bei Änderungen an .ts-Dateien die Kompilierung erneut durchführt.

Kompilate (.map- und .js-Dateien) ausblenden

Um die aus .ts-Dateien kompilierten Dateien auszublenden wählt man die Option File | Preferences | User Settings. Anschließend trägt man das nachfolgend gezeigte Schnippsel ein. Die ersten beiden zu ignorierenden Dateien sind dabei den Standardeinstellungen von Visual Studio Code entnommen. Darauf folgt die Angabe, .js-Dateien auszublenden, sofern eine gleichnamige .ts-Datei existiert. Die letzte Zeile blendet sämtliche .map-Dateien aus.

{
    "files.exclude": {
        "**/.git": true,
        "**/.DS_Store": true,
        "**/*.js": { "when": "$(basename).ts"},
        "**/*.map": true
    }
}

codefest.at [MS]: Visual Studio 2015 Final Release Event

MS_VS-Download_Hero-1180x295

Der zweite Teil des Visual Studio 2015 Launch Events läuft noch und schon ist weiterer technischer Inhalt online. In 60 Feature-Videos werden einzelne neue oder verbesserte Funktionen in Visual Studio 2015, Team Foundation Server 2015 und Visual Studio Online erklärt.

Darunter sind Funktionen wie IntelliTest oder auch das neue Build System. Der x-Plattform Ansatz hinter dem neuen Build System zeigt für mich sehr stark wie offenen das Toolset geworden ist.

Die Inhalte sowie auch die Keynote sind on-demand auf channel9 abrufbar.

Eines meiner Highlights an neuen Funktionen: Team Build for 2015 (die 4 Minuten 45 Sekunden zahlen sich aus)

Martin Richter: Ein kleiner Doppelschlag: RTM für VisualStudio 2015 und VisualStudio Update 5

Heute haben zwei neue VisualStudio Versionen das Licht des RTM erblickt 😉

VisualStudio 2015 ist verfügbar und zeitgleich wurde auch VisualStudio 2013 Update 5 veröffentlicht.

Achtung: Wer als Sprache Deutsch angegeben hat, der bekommt aktuell (Stand 21.07.2015) noch die RC-Seite auf der deutschen Microsoft Seite angezeigt. Die englische Seite zeigt den RTM Artikel.

PS: Einzig vermisse ich noch die MBCS Bibliotheken für den RTM. Als RC waren sie verfügbar und der aktuelle Link auf den Microsoft Seiten funktioniert nicht. Auch wenn ich die nur für ein einziges Legacy Programm noch nutze.


Copyright © 2010 Martin Richter
Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.
(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)

Ralf Westphal: Geschätztes Desaster

Glauben Sie noch, dass sich Aufwände in der Softwareentwicklung abschätzen lassen? Ja, wirklich? Dann beruht Ihr Glaube zumindest zum Teil auf der Vorstellungen, dass sich Schätzfehler ausgleichen. Mal schätzen Sie etwas zu wenig Aufwand, ein andermal aber schätzen Sie etwas zu viel Aufwand. Oder? Ja, das hört sich plausibel an. Manche Aufgaben stellen sich als schwieriger heraus, als gedacht,

Karsten Kempe: TFS 2015 Planungskomponenten in neuem Gewand

VisualStudioLogoDer neue Team Foundation Server 2015 steht vor der Tür und bringt einige Neuerungen für den Anwender. Nach wie vor sind die Planungskomponenten des TFS einer der Hauptgründe, warum sich Entwicklungsteams und Unternehmen zu einem Upgrade auf die neue Version entscheiden. Die teamspezifischen Backlogs-, Kanban- und Task-Boards sind eine enorme Hilfe bei der Visualisierung von Arbeitspaketen. In einer mehrteiligen Serie möchte ich Euch einige neue Features vorstellen, die im TFS 2015 enthalten sein werden. Ebenso möchte ich Euch einen kleinen Ausblick auf Neuerungen geben, die es voraussichtlich noch nicht in den RTM geschafft haben, aber bereits in der Cloud-Variante des TFS (Visual Studio Online) zu finden sind.

Das bisherige Kanban Board des TFS 2013 visualisiert Arbeitspakete in bekannter Kanban-Spalten-Optik, transportiert aber außer dem Titel, dem Bearbeiter und der Paketgröße keine weiteren Informationen. Um zusätzliche Infos zu einem Arbeitspaket zu erhalten, wie z.B. ID, Priorität, Business Value, etc., muss das Work Item erst geöffnet werden. Etwas lästig, wenn man in einer Planungsrunde nur schnell ein paar Infos vom Board ablesen möchte. Auch die fehlende Möglichkeit aus der Kanban-Sicht neue Arbeitspakete anzulegen, wurde in der Vergangenheit öfters kritisiert.

TFS_Kanban_Task_2013.4Abbildung 1: Kanban Board des Team Foundation Server 2013 Update 4

In den letzten Wochen und Monaten wurde sehr intensiv von Microsoft an den Planungskomponenten des Team Foundation Servers gearbeitet. Mit Erfolg wie ich finde. Die neue Version des TFS bringt eine neue Kanban-Optik mit größeren Kärtchen, mehr Informationen und mit besseren Möglichkeiten teamspezifische Anpassungen vorzunehmen.

Zusätzlich zu den anpassbaren Kanban-Kärtchen gibt es die Möglichkeiten, die Kärtchen zu priorisieren und die wichtigsten an das obere Ende der Spalte zu schieben. Damit ändert sich auch die Reihenfolge in der Backlog-Ansicht. Bisher ging diese Umsortierung nämlich nur in der Backlog-Ansicht, was immer ein lästiges Hin- und Her-Schalten zur Folge hatte.

TFS_Kanban_Task_2015_RCAbbildung 2: Kanban Board des Team Foundation Server 2015 (RC2)

Außerdem lassen sich jetzt auch neue Kärtchen direkt auf dem Kanban-Board erzeugen, indem man auf das grüne Plus drückt. Diese Funktion ist in Planungsrunden äußerst praktisch, da Kärtchen direkt in der ersten Spalte angelegt und beschriftet werden können.

Auch sehr praktisch ist die Suchfunktion der ersten Spalte. Damit lässt sich bei einem längeren Backlog nach bestimmten Arbeitspaketen suchen, die dann trotz gefilterter Spalteninformation per Drag ‚n‘ Drop verschoben werden können.

Im Task-Board wird es ebenfalls die Möglichkeit geben die Kärtchen anzupassen, um diese mit zusätzlichen Informationen auszustatten – unabhängig vom Karten-Typ (Task, Bug, PBI, etc).

Einen Ausblick auf eine Neuerung im Sprint-Backlog möchte ich Euch zum Abschluss noch mit auf den Weg geben. Zukünftig können neue Produkt Backlog Items oder Bugs auch direkt im Sprint-Backlog angelegt werden. Diese Funktion gibt es bisher nur im allgemeinen Product Backlog und nicht auf Sprint-Ebene.

TFS_TaskBoard_NewPBI_VSOAbbildung 3: Sprint-Backlog aus Visual Studio Online (Release 07.07.15)

Im nächsten Teil der Serie zeige ich Euch, wie man im neuen Team Foundation Server teamspezifische Kanban-Boards erzeugen kann und welche Möglichkeiten es zur Anpassung geben wird.

[1] Teil 1 – TFS 2015 Planungskomponenten in neuem Gewand

[2] Teil 2 – TFS 2015 Kanban Customization

[3] Teil 3 – TFS 2015 Card Customization (Rules & Styles)

Marco Scheel: Links for 2015-07-19 [del.icio.us]

Jürgen Gutsch: ASP.NET 5 Hosting im Detail

ASP.NET 5 lässt sich auf mehrere Arten hosten. Die einfachsten habe ich im letzten Beitrag beiläufig gezeigt. Aber auch der IIS kann ASP.NET 5 Webs ausführen. Auch hier gehe ich nicht auf das Visual Studio ein, sondern rein auf die .NET Utilities und die nötigen Code-Dateien.

WebListener

Wenn man neues ASP.NET 5 Projekt mit dem VS2015 erstellt hat man das Kommando web in der project.json stehen, so wie es letzten Beitrag der Fall war.

Das ist ein kleiner Entwicklungs-Server, mit dem das Testen, Ausprobieren und Debuggen ein bisschen einfacher funktioniert, als über das Deployment per IIS (mehr dazu unten). Dieser WebServer ersetzt den IIS Express für die Arbeit mit ASP.NET 5 (Für ASP.NET 4.6 hat der IIS Express weiter seinen Nutzen.)

Das Kommando sieht wie folgt aus:

[code language="JScript"]"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001"[/code]

Die benötigte NuGet-Dependency ist:

[code language="JScript"]"Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",[/code]

Kestrel

Ebenso schlank und einfach zu handhaben ist der WebServer Kestrel. Dieser basiert auf die freie Bibliothek Libuv und ist optimal geeignet ASP.NET 5 unter Linux auszuführen. Kestrel lässt sich in isolierten Umgebungen problemlos auch produktiv nutzen. Vor allem Ideal auf IoT-Geräten wie den Raspberry PI und in Docker-Containern.

Das Kommando:

[code language="JScript"]"kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"[/code]

Die NuGet-Referenz:

[code language="JScript"]"Kestrel": "1.0.0-beta5"[/code]

Libuv
“libuv is a multi-plattform support library with a focus on asynchronous I/O. It was primarily developed for use by Node.js, …”
(https://github.com/libuv/libuv/)

Mit Kestrel bringt Microsoft das ASP.NET 5 dem Node.js IMHO ein weiteres Stück näher. Nicht nur die Integration von NPM und Node.js in das neue Visual Studio 2015, sondern in die komplette ASP.NET 5 Umgebung. Aber dazu mehr in einem der nächsten Beiträge.

Wie man ein ASP.NET 5 Web mit Kestrel unter Linux auf dem Raspberry PI zum laufen bring habe ich in einen der letzten Beiträge bereits gezeigt.

IIS / Azure

Das Hosting im IIS (gleiches gilt auch für Azure) ist manuell etwas aufwendiger als über das Visual Studio 2015, in dem wir einen Wizzard zum publizieren zur Verfügung haben. Im Prinzip gilt, dass das Projekt erst publiziert werden muss. Während diesem Publizieren, werden die Abhängigkeiten in das Publikationsverzeichnis kopiert und – was am interessantesten ist – die Assembly der Applikation wird eben falls als NuGet Package bereitgestellt. NuGet scheint überall zu sein…

Nehmen wir als Grundlage wieder die project.json und die Startup.cs aus dem vorigen Beitrag für unser Web im IIS. Wir müssen die project.json etwas anpassen um das Hosting im IIS zu ermöglichen. Wir müssen eine Referenz zu "Microsoft.AspNet.Server.IIS" hinzufügen. Die Kommandos könnten wir entfernen, sie schaden hier aber auch nicht. Im Gegenteil helfen sie beim schnellen Entwickeln, ohne jedes Mal publizieren zu müssen.

Nach dieser Anpassung wechseln wir mit einer beliebigen Konsole in das WebVerzeichnis und aktualisieren erst Mal die NuGet referenzen:

[code language="JScript"]> dnu restore[/code]

Dann können wir – auch wieder mit Hilfe des dnu commandos das Projekt publizieren:

[code language="JScript"]> dnu publish --out c:\git\aspnet5deploy --no-source --runtime dnx-coreclr-win-x64.1.0.0-beta5-12103[/code]

Wir müssen ein Output-Verzeichnis angeben sowie die gewünschte Runtime. Der optionale Parameter –no-source gibt an, ob die Sourcen mit ausgeliefert werden sollen oder nicht.

Die Runtime gibt an, mit welchem .NET Framework die Applikation arbeiten soll. Zur Verfügung stehen clr für das .NET Framework und clrcore für das .NET Core, jeweils in 64-bit und 32-bit.

Das Ergebnis im Output-Verzeichnis ist interessant es enthält tatsächlich alle Abhängigkeiten die für die Ausführung benötigt wird. Sogar die Runtime wird mitgeliefert:

image

Schaut man in das Packages-Verzeichnis finden wir dort das NuGet Paket unseres Projektes:

image

Der Ordner wwwroot enthält die eigentliche Web-Anwendung, inklusive einer web.config und eines Bin-Verzeichnisses, welches allerdings nur eine einzige DLL enthält. Eine DLL mit dem Namen AspNet.Loader.dll. Hierbei handelt es sich um eine .NET Framework Assembly die sich wohl um das Laden der ASP.ENT Anwendung und deren Abhängigkeiten kümmert.

Schaut man in die web.config sieht man wie sie die nötigen DLLs finden kann:

[code language="ASPX"]<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="bootstrapper-version" value="1.0.0-beta5" />
    <add key="runtime-path" value="..\approot\runtimes" />
    <add key="dnx-version" value="1.0.0-beta5-12103" />
    <add key="dnx-clr" value="coreclr" />
    <add key="dnx-app-base" value="..\approot\packages\aspnet5\1.0.0\root" />
  </appSettings>
</configuration>[/code]

Die Pfade zur Runtime und zur App-Assemblie sind hier definiert.

Der Ordner wwwroot muss im IIS noch als Web angelegt werden und schon kann das Web über den IIS aufgerufen werden.

Golo Roden: Zug um Zug: Docker-Images effizient aufbauen

Docker-Images sind schichtweise aufgebaut. Die Dokumentation von Docker empfiehlt, die Anzahl der Schichten zu minimieren, ohne allerdings konkrete Hinweise zu geben, wie man das Ziel erreichen könne. Einige Tricks helfen, Docker-Images effizient zu bauen.

Sven Hubert: AIT Sim-Shipping with Visual Studio 2015

Since we have been providing our Visual Studio and TFS extensions for many years, we are proud to announce simultaneous shipping of TFS ASAP and WordToTFS with Visual Studio and Team Foundation Server 2015.

Visual Studio 2015 Launch Partnerl

Years ago we started developing tools that extend Visual Studio and Team Foundation Server to contribute solutions to an awesome tool landscape (please find the complete list of AIT tools here). As a member of the VS Industry Partner Program we have started working on new releases of TFS ASAP and WordToTFS to enable users leveraging the power of these tools as soon as Microsoft ships Visual Studio 2015. For that reason, we will publish these new releases only days after public availability of Visual Studio and TFS 2015. We will blog the availability here as well.

Stay tuned!

Holger Sirtl: Azure News on Friday (KW29/15)

Auch diese Woche gab’s wieder viele Nachrichten zur Microsoft Azure Plattform. Hier sind nähere Infos dazu…

Aktuelle Neuigkeiten

Datum Nachricht
17.07. Enhancing Azure VMs Security with ESET
Neu in der Azure Marketplace Security Extension Kategorie: ESET File Security Extension für Windows-basierte VMs
17.07. Episode 179: Oxford APIs with Mat Velloso
Hintergründe zur Implementierung von How-old.net und Twins-or-not mit Hilfe von AzureML und der Oxford API
17.07. Updates to the Mobile Apps server SDK
Neues Mobile Apps .NET Server SDK (v0.2.549) Achtung: Breaking Changes (um Entwicklung hybrider Apps zu erleichtern)
16.07. Rendering 3D Modelled Scenes with Azure Batch with Karan Batta
Scott zeigt wie in Autodesk Maya 2015 via Plugin Azure Batch für das effiziente Rendering verwendet werden kann
16.07. The growing challenge for consumer health devices: keeping up with medical regulatory requirements
Herausforderung in IoT Szenarien im medizinischen Bereich: Compliance in der Datenverarbeitung bei Gerätevielfalt
16.07. How exactly does Event Hubs Throttling Work?
Hintergründe zum Throttling in den Throughput Units (TU) des Azure Event Hub - faires Ausbremsen und Exceptions
16.07. Integrate your on-premises infrastructure with Azure
Neue Version des Datacenter Extension Reference Architecture Diagram - Guide zu Planung hybrider Cloud-Architekturen
16.07. Announcing the general availability of Media Encoder Standard
Azure Media Encoder Standard allgemein verfügbar - mehr Dateiformate und Codecs, besseres H.264 Encoding etc.
16.07. Azure Site Recovery GA: Move VMware, AWS, Hyper-V and Physical Servers to Azure
Azure Site Recovery jetzt allgemein verfügbar - Absicherung von VMware, AWS, Hyper-V, Linux, Windows Workloads
16.07. Extensible Triggers and Binders with Azure WebJobs SDK 1.1.0-alpha1
Eigene WebJobs Trigger mit quasi beliebigen auslösenden Ereignissen mit dem Azure WebJobs SDK 1.1.0-alpha1
15.07. Azure Marketplace announces new features and functionality
Neues im Azure Marketplace - neue Compute Offerings (z.B. Multi-VM), Docker Hub Integration und Container Apps
15.07. New capabilities added to Power BI
Neue Möglichkeiten in PowerBI: Office 365 App Launcher, eigene URLs, Storage Management
15.07. Announcing new and improved DataStax Cluster deployment experience on Azure Marketplace
Neu im Azure Marketplace: DataStax Cassandra Cluster (BYOL): Mit einem Mausklick einen 4-, 12- oder 36-Kern Cluster bereitstellen
15.07. Working with Marketplace Images on Azure Resource Manager
VM Images aus dem Azure Marketplace via Azure Resource Manager und dem Preview Portal noch leichter nutzen
15.07. Importing Data to DocumentDB Just Keeps Getting Better
Weitere Verbesserungen des Azure DocumentDB Data Migration Tools: Unterstützung für Blob Storage, Amazon DynamoDB etc.
15.07. Configuring Barracuda Web Application Firewall for Azure App Service Environment
Anleitung zum Setup einer Barracuda Web Application Firewall zur Absicherung einer (ggf. verteilten) Azure App Service Umgebung
15.07. Azure HDInsight launches ISV Partner Program at WPC
Ein neues Partnerprogramm hilft ISVs, ihre HDInsight-Lösungen auf Microsoft Azure zu bringen.
15.07. Visualize big data with Power BI and Spark on Azure HDInsight
Anleitung zur Visualisierung von Big Data Workloads mit PowerBI und Spark on Azure HDInsight
14.07. Expanding Linux and OSS Support on Azure
Erweiterte Support-Optionen für Linux- und OSS-Workloads auf Microsoft Azure.
14.07. Manage your Azure Linux VM logs through Operations Management Suite
Linux VMs mit Operational Insights und der Operations Management Suite verwalten.
14.07. Using Azure Resource Manager in Azure Automation Runbooks
Nutzung des Azure Resource Managers in Azure Automation Runbooks zum automatisierten Setup von Azure Umgebungen
14.07. How to use Azure Search with D3.js to Build Interactive Data Visualizations
Nutzung von Azure Search und Aufbereitung und Visualisierung der Ergebnisse via D3.js
14.07. Managing SSH-Enabled Linux Hosts with Azure Automation
Azure Automation unterstützt jetzt neben Windows VMs auch SSH-aktivierte Linux Hosts
13.07. Azure Resource Manager Template for RDS Deployment
Für den Azure Resource Manager ist ein neues Template zum Deployment einer RDS Umgebung verfügbar
13.07. At WPC, Microsoft helps businesses transform data into intelligent action
Ankündigung der Cortana Analytics Suite auf Microsofts Worldwide Partnerkonferenz
13.07. Announcing Cortana Analytics Suite and New Partner Investments at WPC 2015
Cortana Analytics Suite bringt Microsofts digitale Sprachassistentin mit verschiedenen Datenanalyseservices zusammen
13.07. The Power BI app for Android is now available
Die PowerBI App zur Visualisierung und Auswertung von Daten ist jetzt auch auf Android verfügbar

Marco Scheel: Links for 2015-07-17 [del.icio.us]

codefest.at [MS]: Webcast - Microsoft Edge für Developer

Windows 10 bringt neben vielen anderen Neuerungen auch einen neuen Browser – Microsoft Edge.
Aber warum eigentlich ein neuer Browser und was bedeutet dass für Anwender und Webentwickler?

In diesem TechTalk sprechen Daniel und Malte über Microsoft Edge, den neuen Browser in Windows 10. Hierbei geht es insbesondere um die Beweggründe für einem neuen Browser und die Auswirkungen für Entwickler.

Außerdem gibt es einen Einblick in die neuen Funktionen in Microsoft Edge sowie die Tools, welche Entwickler nutzen können um ihre Webapplikationen zu verbessern (z.B. http://dev.modern.ie/tools/staticscan/).

Zum Schluss geben die beiden noch ein paar Tipps, was man für eine standardkonforme Website und alle modernen Browser beachten sollte.

Jürgen Gutsch: ASP.NET 5 ganz klein

Um zu beweisen wie leichtgewichtig ASP.NET 5 ist, möcht ich hier einmal zeigen was es benötigt, um eine ASP.NET 5 Anwendung zu starten. Ich gehe hier mal Schritt für Schritt vor, ohne auf das Tooling direkt einzugehen (Außer dort wo es nötig wird) Es geht also nur um die Code-Dateien, deren Abhängigkeiten und darum wie man die Applikation startet.

Der Editor ist ist beliebig. Wobei Unterstützung für C# und JSON nicht schlecht wäre, es tut aber auch ein einfacher Notepad.

project.json

Im letzten Beitrag habe ich erwähnt, dass es keine Projektdatei mehr gibt. Wir benötigen nun eine Datei mit dem Namen project.json. In dieser Datei legen wir unter anderem die Laufzeitumgebung fest, die NuGet-Referenzen und die Start-Kommandos:

Eine Minimalistische project.json könnte in etwa so aussehen:

{
  "version": "1.0.0-*",
  "webroot": "wwwroot",

  "dependencies": {
    "Kestrel": "1.0.0-beta5",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta5",
    "Microsoft.AspNet.Hosting": "1.0.0-beta5",  
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta5",
    "Microsoft.Framework.Logging.Console": "1.0.0-beta5"
  },

  "commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },

  "frameworks": {
    "dnxcore50": { }
  },

  "exclude": [
      "wwwroot"
  ]
}

Die Version 1.0.0-* wird festgelegt und als webroot wird der Ordner wwwroot angelegt. Der webroot ist der Ordner in dem statische Ressourcen (Bilder, Styles und Scripts) abgelegt werden. Alles was absolut referenziert wird, verweist auf diesen Ordner. Der Ordner muss tatsächlich existieren, sonst gibt es beim Start eine Fehlermeldung.

Darunter haben wir die NuGet Dependencies. Hier werden alle direkten Abhängigkeiten inklusive der Versionsnummer angegeben.

Anschließend sehen wir die Kommandos mit dem Namen web und kestrel wobei der Name egal ist, es kommt auf das eigentliche Kommandos an. Hier wird in beiden Fällen ein minimalistischer Webserver gestartet. Der HttpServer Kestrel ist für die Ausführung unter Linux geeignet, läuft aber genauso unter Windows. Beide hören auf “http://localhost:5001” , bzw. “http://localhost:5004” (In weiteren Beiträgen gehe ich näher auf die beiden Hosting varianten und die Kommandos ein.)

Der vorletzte Block definiert das gewünschte Framework, mit dem diese Applikation laufen soll. In diesem Fall ist es das .NET Core. Hier könnte auch dnx451 für das .NET Framework 4.5.1 stehen.

Der letzte Block listet Elemente die aus der OWIN Pipeline ausgeschlossen werden sollen, also direkt aufrufbar sind. Hier wird der komplette Ordner wwwroot ausgeschlossen

Startup.cs

Diese project.json bringt jetzt natürlich nichts, wenn es keinen ausführbaren Code gibt. Daher benötigen wir eine Startup.cs die mindestens so aussehen könnte:

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
    }
   
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole();
        app.UseStaticFiles();
        app.UseWelcomePage();
    }
}

Hier passiert erst Mal nichts weiter, außer dass ein Console Logger, die StaticFiles Middleware und eine UseWelcomePage Middleware eingehängt werden. Wer Microsofts OWIN Implementation Katana noch kennt wird das alles wiedererkennen. Wir arbeiten hier ebenso mit Middlewares die wir in den Prozess einhängen können.

Damit hätten wir nun einen Webserver das Statische Dateien ausliefern kann. Im Prinzip eine minimalistische ASP.NET 5 Anwendung. Alle Requests (bis auf das wwwroot) gehen durch diese ASP.NET 5 Pipeline und können nun verarbeitet werden.

Erster Aufruf

Der Start erfolgt über eine beliebige Console. Zuerst wechsle ich in das Arbeitsverzeichnis und installiere dann die aktuellste Runtime :

> dnvm install latest -r coreclr -arch x64

Mit dem .NET Version Manager (dnvm) habe ich hier die aktuellste Runtime der coreclr in der 64-bit Version gewählt. Dieses Kommando setzt auch den Pfad zur Runtime in der aktuellen Consolen Session.

Nun müssen wir mit die aktuellste Abhängigkeiten herstellen. Das heißt in unserem Fall die NuGet packages die in der project.json angegeben sind:

> dnu restore

Zu guter Letzt, können wir die ASP.NET 5 Applikation starten:

> dnx . web

image

Rufen wir die angegebene URL auf, sehen wir die Welcome Page, die wir mit app.UseWelcomePage() eingebunden haben:

image

Wir können nun jede beliebige Datei in den Ordner wwwroot legen und im Browser aufrufen.

Wie gehts weiter?

In den nächsten Beiträgen möchte ich in diesem Beitrag entstandene Codebasis nutzen um diese weiteren Themen zu behandeln:

  • ASP.NET Hosting im Detail
  • Middlewares im Detail
  • Dependency Injection im Detail
  • ASP.NET Web API aktivieren
  • ASP.NET MVC 6 Aktivieren

codefest.at [MS]: Sommer Developer Wettbewerb - Web Kategorie

In der letzten Woche haben wir unseren Sommer Developer Wettbewerb gestartet und seit dem werden in den verschiedenen Kategorien fleißig Punkte gesammelt.

Auch die Fertigstellung von Windows 10 steht kurz bevor und somit auch die unseres neuen "browser for doing”Microsoft Edge. Höchste Zeit also für die Details zur Web Kategorie – quasi der Schlüssel für die nächsten 200 Punkte.

Es geht darum eine "vernünftige" Webseite - z.B. eine persönliche Webseite mit üblichen Informationen und zumindest mehr als einer Seite - zu erstellen und zwar gemäß dem HTML5 Standard - damit auch der Edge seine Freude damit hat ;-).
P.S. nachdem wir ja nicht alle bestehenden Webseiten kennen, kann das natürlich auch eine schon bestehende sein…

Gewinnspielanleitung im Detail:

  1. Eine HTML5 konforme Webseite erstellen - Tipps dazu z.B. unter Microsoft Edge | Dev
  2. E-Mail an wettbewerb@microsoft.com, mit dem Link auf Eure Webseite
  3. Wir testen die Konformität der Webseite mittels:
    - W3C Markup Validation Service - keine Fehler oder Warnings
    - Dem Site Scan Tool - kein Fehler in "Modern Web Interoperability"
  4. erspielte Punkte: Abhängig von der Komplexität der Webseite bis zu 200.

Ablauf

  • Sobald du mindestens zwei Kategorien erledigt hast: Mail an uns schicken mit den einzureichenden Infos an: wettbewerb@microsoft.com
  • Wenn du danach noch weitere Punkte sammeln willst, einfach wieder eine Email an uns mit den einzureichenden Infos schicken .
  • Nach jeder Email bekommst du von uns deinen Punktestand.

Alle Details und die weiteren Kategorien findet Ihr im Blog Post Der große Sommer Developer Wettbewerb.

Lets make the Web a nicer place!!!

friends header

bloggers headline

links header

 
Don't contact us via this (fleischfalle@alphasierrapapa.com) email address.