C# Script in Action
Robin Sedlaczek | CTO Fairmas GmbH | .NET User Group Berlin
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Robin Sedlaczek
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
 Fairmas GmbH Berlin (CTO)
 Community Leader DNUG Berlin
 Freier Autor
(Windows Developer, Entwickler.de, Heise, DNP...)
 Open Source
(ForceFeedback, Roslyn, SharpGL, FxCopAnalyzers...)
 Sprecher
(BASTA!, .NET Summit, ParallelConf, DevOpenSpace, MDD...)
 Blogger / .NET Code Geek
 MSDN Moderator
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Was sind Skriptsprachen?
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS SIND SKRIPTSPRACHEN?
 Auch als „Glue“-Sprachen bezeichnet
 Fügen Dinge zusammen
 Beispiele:
 Bash, Cmd, PowerShell
 TCL, LUA, Sleep, S-Lang, GNU Guile
 VBA, VBScript
 BPEL
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS SIND SKRIPTSPRACHEN?
 Dynamische Typisierung
 PHP: Typen/Klassen ab Version 7
 JavaScript: Klassen mit ECMAScript 6/2015 – ECMAScript 2016 ebenfalls fertig
 TypeScript
 Interpretiert zur Laufzeit, keine Kompilierphase
 PHP wird kompiliert vor der Ausführung
 ASM.JS, WebAssembly
 Automatische Speicherverwaltung (automatische
Speicherbereinigung)
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS SIND SKRIPTSPRACHEN?
 Geeignet für kleine Aufgaben/Programme, nicht für große Systeme
und Serveranwendungen (Wikipedia)
 NodeJS
 PHP
Und jetzt auch noch C# !
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
WAS SIND SKRIPTSPRACHEN?
Skriptsprachen
 Kombinieren Dinge, wofür sie nicht gedacht waren!
 Jede Sprache kann eine Skripsprache sein.
 Skripte werden quelloffen ausgeliefert.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
Visual Studio | C# Interactive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# Scripting - Übersicht
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - ÜBERSICHT
 Ermöglicht einfaches Ausführen von C# Code zu jeder Zeit
 Teil der Microsoft .NET Compiler Plattform („Roslyn“)
 https://github.com/dotnet/roslyn
 NuGet-Paket: Microsoft.CodeAnalysis.CSharp.Scripting (v1.3.2)
 http://www.nuget.org/packages/Microsoft.CodeAnalysis.CSharp.Scripting/1.3.2
 v2.0.0 kommt mit Visual Studio 2017
 Min. Target Framework: .NET Framework 4.6+ (v1.3.2)
 .NET Core ab 1.1 (seit Roslyn v2.0.0-rc3)
 Universal Windows Application & .NET Native nicht unterstützt
 Momentan nur C# Scripting unterstützt
 VB.NET Scripting geplant, Roadmap aber ungewiss
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - ÜBERSICHT
 Hinzufügen zur Solution oder zum Projekt
Install-Package Microsoft.CodeAnalysis.CSharp.Scripting
 Namespace-Import:
using Microsoft.CodeAnalysis.CSharp.Scripting
 Einstieg in die API bildet die statische Klasse CSharpScript:
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# Scripting - API
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
 Evaluieren von Skripten mit CSharpScript.EvaluateAsync():
 EvaluteAsync<T>() führt Skript aus und gibt Ergebnis zurück
 Ergebnis ist vom Typ Task<T> (im Beispiel Task<int>)
 CompilationErrorException wenn Typangabe nicht zu Ergebnistyp passt
 Nicht-generische Überladung führt implizite Typkonvertierung nicht durch
// Value of result will be 3 of explicit type int.
int result = await CSharpScript.EvaluateAsync<int>("1 + 2");
// Value of result will be 3 of type object.
object result = await CSharpScript.EvaluateAsync("1 + 2");
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
 Ausführen von Skripten mit CSharpScript.RunAsync():
 RunAsync<T>() führt Skript aus und kapselt Ergebnis in ScriptState<T>
 Ergebnis ist vom Typ Task<ScriptState<T>> (im Beispiel Task<ScriptState<int>>)
 CompilationErrorException wenn Typangabe nicht zu Ergebnistyp passt
 Nicht-generische Überladung führt implizite Typkonvertierung nicht durch, Ergebnistyp ist dann Task<ScriptState>
 ScriptState<T> kapselt Ergebnis und weitere Informationen über das Skript
// Variable result will contain return value 3 of explicit type int.
ScriptState<int> result = await CSharpScript.RunAsync<int>("1 + 2");
// Variable result will contain return value 3 of type object.
ScriptState<object> result = await CSharpScript.RunAsync("1 + 2");
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
 Skript-Ergebnisse auswerten – die Klasse ScriptState:
 ScriptState beinhaltet Laufzeitinformationen über das Skript
 Skript-Variablen und ihre Werte über Eigenschaft Variables abrufbar
 Skript-Rückgabewert über Eigenschaft ReturnValue abrufbar
 Ableitung ScriptState<T> typisiert ReturnValue mit generischem Typ
 Skript-Abstraktion über Eigenschaft Script abrufbar
var a = 5;
var b = 7;
return a + b;
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
 Skripte erzeugen und verwalten mit CSharpScript.Create():
var snippet =
@"
var a = 5;
var b = 7;
return a + b;
";
// Creates script with return type of int.
Script<int> script2 = CSharpScript.Create<int>(snippet);
// Creates script with return type of object.
Script script = CSharpScript.Create(snippet);
 CSharpScript.Create<T>() kapselt Code-Snippet in einer Instanz
der Klasse Script<T>
 Code-Snippet wird dabei aber nicht sofort ausgeführt
 Die Klasse Script<T> liefert Informationen und bietet viele
Funktionen für den Umgang mit Skripten
 Z.B. kann über die Eigenschaft ReturnType der Typ des
Rückgabewertes des Skriptes abgerufen werden
 Typparameter T bestimmt Rückgabetyp
 Nicht-generische Überladung gibt Instanz von Script<object>
zurück  Rückgabetyp ist dann object
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# SCRIPTING - API
 Umgang mit Skripten – die Klasse Script:
 ScriptState beinhaltet Laufzeitinformationen über das Skript
 erfüllt verschiedene Aufgaben, wie z.B. das Ausführen von Skripten zu späteren
Zeitpunkten, Fortführung von Skripten, Bereitstellung von Compiler-
Informationen, Bereitstellung von Kontext innerhalb von Skripten etc.
RobinSedlaczek
RobinSedlaczek.wordpress.com
RobinSedlaczek@live.de
C# Script in Action
Have Fun!
RobinSedlaczek.wordpress.com
RobinSedlaczek
RobinSedlaczek@live.de

BASTA! Spring 2017 - C# Script in Action

Hinweis der Redaktion