SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

PPTX
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
PPTX
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
PPTX
#ADC 2016 - C# Script in Action
PPTX
ADC Core 2017 - Warum warten auf die IDE?
PPTX
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
PPTX
BASTA! 2016 - Roslyn & Visual Studio Extensions
PPTX
Dream-Team: Roslyn & Visual Studio Extensions
PPTX
#ADC 2016 - Roslyn & Visual Studio Extensions
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
Magdeburger Developer Days 2018 - Warum warten auf die IDE?
#ADC 2016 - C# Script in Action
ADC Core 2017 - Warum warten auf die IDE?
BASTA! 2017 Jubiläumskonferenz - Warum warten auf die IDE!?
BASTA! 2016 - Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions

Was ist angesagt? (6)

PDF
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
PDF
Dataservices - Data Processing mit Microservices
PPT
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
PDF
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
PDF
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
PPTX
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Dataservices - Data Processing mit Microservices
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Anzeige

Mehr von Robin Sedlaczek (20)

PPTX
Developer Week 2019: Identity & Access Management in der Realitaet
PPTX
Developer Week 2019: Architekturen für .NET Core-Anwendungen
PPTX
.NET Core Architecture (UI)
PPTX
Architekturen für .NET Core-Anwendungen
PPTX
Azure Hybrid Connections
PPTX
Architectures for .Net Core Applications
PPTX
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
PPTX
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
PPTX
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
PPTX
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
PPTX
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
PPTX
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
PPTX
DNUGBB 2017 - .Net, .Net Core, .Net Standard
PPTX
.NET Summit 2017 - .NET, .NET Core, .NET Standard
PPTX
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
PPTX
#ADC 2016 - Conversational User Interfaces
PPTX
Roslyn - Ein offener Compiler. Ja, und nun?
PPTX
Thread-safe .NET durch Immutables
PPTX
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
PPTX
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Architekturen für .NET Core-Anwendungen
.NET Core Architecture (UI)
Architekturen für .NET Core-Anwendungen
Azure Hybrid Connections
Architectures for .Net Core Applications
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
DNUGBB 2017 - .Net, .Net Core, .Net Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#ADC 2016 - Conversational User Interfaces
Roslyn - Ein offener Compiler. Ja, und nun?
Thread-safe .NET durch Immutables
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
Anzeige

BASTA! Spring 2017 - C# Script in Action

Hinweis der Redaktion