SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
Robin Sedlaczek
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
 CTO der Fairmas GmbH in Berlin
 Community Leader DNUG Berlin
 Blogger / .NET Code Geek
 Sprecher
 MSDN Moderator
 Freier Autor
(Entwickler.de, Heise, DotNetPro, Informatik aktuell)
 Open Source
(SharpGL, Roslyn, FxCopAnalyzers, Force Feedback)
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# Scripting – Wozu das denn?
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# SCRIPTING – WOZU DAS DENN?
 C# Script-Engine im eigenen Code
 Ermöglicht Ausführen von C# Code-Snippets
 Ganz einfach und zu jeder Zeit!
 Keine Solution, Projekte, Namespaces oder Klassen-Deklarationen nötig
 Nichts muss, alles kann
 Nur kompilierbar sollte es sein. 
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# SCRIPTING – VORTEILE?
 Einfach einsetzbar
 Voller Sprachumfang und Komfort von C# nutzbar
 Typisiert !!
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# SCRIPTING – NACHTEILE?
Nö!
 Doch:
Sicherheit ist ein Thema!
Ach ja, noch was: die Referenzen… 
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# Scripting - Übersicht
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# SCRIPTING - ÜBERSICHT
 Ermöglicht einfaches Ausführen von C# Code-Snippets, zu jeder Zeit
 Teil der Microsoft .NET Compiler Plattform („Roslyn“)
 https://github.com/dotnet/roslyn
 NuGet-Paket: Microsoft.CodeAnalysis.CSharp.Scripting (v1.3.2, Stand September 2016)
 http://www.nuget.org/packages/Microsoft.CodeAnalysis.CSharp.Scripting/1.3.2
 v2.0.0 zur Zeit in Preview/Beta-Status, kommt mit Visual Studio 15
 Momentan nur C# Scripting unterstützt
 VB.NET Scripting geplant, Roadmap aber ungewiss
 Min. Target Framework: .NET Framework 4.6
 .NET Core, .NET Native, UWP momentan nicht unterstützt
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# SCRIPTING - ÜBERSICHT
 Hinzufügen zur Solution oder zum Projekt mit
 NuGet Package Manager UI in Visual Studio oder
 NuGet Package Manager Console: Install-Package Microsoft.CodeAnalysis.CSharp.Scripting
 Namespace-Import: using Microsoft.CodeAnalysis.CSharp.Scripting
 Einstieg in die API bildet die statische Klasse CSharpScript:
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# Scripting - API
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.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.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.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.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.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.com
RobinSedlaczek@live.de
Visual Studio | C# Interactive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# INTERACTIVE
 Ab Visual Studio 2015 Update 1
 REPL = read-eval-print-loop
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
Real World Example | Application Scripting
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 eigene Anwendung Script-fähig machen
 C# als Script-Sprache verwenden
 Roslyn bietet dafür die C# Scripting API
Fallbeispiel ModelR
 Kollaboratives 3D Modelling Tool
 Client-Server-Anwendung (basierend auf SignalR)
 Integriertes Scripting mit der C# Scripting API
 Script-Editor mit Syntax Highlighting
 Ausgabe von Kompilierfehlern
 Live Script Execution beim Tippen
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 Script erlaubt direkten Zugriff auf Anwendungsobjekte
 es können aber auch eigene Objekte erzeugt werden
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 Nutzen für Benutzer
 Flexibilität – Anwendung kann in sich erweitert werden, ohne Neukompilierung durch den Benutzer
 Erweiterbarkeit – Anwendung kann von allen Benutzer beliebig erweitert werden
 Effektivität – komplexe wiederkehrende Prozesse können vom Benutzer automatisiert werden
 Anpassbarkeit – ein Nutzer kann sich die Anwendung nach seinen Vorstellungen/Vorgaben anpassen
 Nutzen für Entwickler
 Beliebige APIs können dem Scripting zur Verfügung gestellt werden
 APIs sind dann zur Anwendungslaufzeit verfügbar und können dort ausprobiert werden
 Kontextwechsel zwischen Kodieren und Programmausführung fällt weg
 Code kann dort geschrieben werden, wo er seine Auswirkung hat
 Direktes Feedback der Auswirkungen sichtbar
 Steigerung der Effizienz
 Reduktion von Entwicklungskosten
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
APPLICATION SCRIPTING
 ModelR - Code & HowTo
 WaveDev.ModelR von Robin Sedlaczek
 Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/ModelR
 Clonen, Kompilieren, Ausführen: WaveDev.ModelR.Server zuerst starten, danach WaveDev.ModelR
 4 vordefinierte ModelR-Benutzer: Robin (PW: robin), Sarah (PW: sarah), Jan (PW: jan), Sebastian (PW: sebastian)
 Script-Kontext über globale Eigenschaft „ModelR“ bereitgestellt
 Über den Script-Kontext kann auf die Anwendungsobjekte zugegriffen werden (Users, SceneObjects)
 Neue Objekte werden aus Script ausgelesen und automatisch in die Szene übernommen
RobinSedlaczek
RobinSedlaczek.com
RobinSedlaczek@live.de
C# Script in Action
„Und jetzt seid Ihr dran…“
RobinSedlaczek.wordpress.com
RobinSedlaczek
RobinSedlaczek@live.de

Weitere ähnliche Inhalte

Ähnlich wie #ADC 2016 - C# Script in Action

BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesRobin Sedlaczek
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 
Automatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAutomatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAndreas Schreiber
 
Architektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für ClojureArchitektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für ClojureMatthias Köster
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)Robin Sedlaczek
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for BeginnersUlrich Krause
 
Den falschen plan perfekt ausführen
Den falschen plan perfekt ausführenDen falschen plan perfekt ausführen
Den falschen plan perfekt ausführenNils Langner
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...Robin Sedlaczek
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenAndreas Schreiber
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler PlattformRobin Sedlaczek
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickPhilipp Burgmer
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessRalf Abramowitsch
 
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenKai Donato
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & DominoUlrich Krause
 

Ähnlich wie #ADC 2016 - C# Script in Action (20)

BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenBASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
BASTA! Spring 2018 - Architekturen für .NET Core-Anwendungen
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
Thread-safe .NET durch Immutables
Thread-safe .NET durch ImmutablesThread-safe .NET durch Immutables
Thread-safe .NET durch Immutables
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
Automatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAutomatisierung von Windows-Anwendungen
Automatisierung von Windows-Anwendungen
 
Typescript
TypescriptTypescript
Typescript
 
Architektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für ClojureArchitektur einer Eclipse DLTK IDE für Clojure
Architektur einer Eclipse DLTK IDE für Clojure
 
.NET Core Architecture (UI)
.NET Core Architecture (UI).NET Core Architecture (UI)
.NET Core Architecture (UI)
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
C / C++ Api for Beginners
C / C++ Api for BeginnersC / C++ Api for Beginners
C / C++ Api for Beginners
 
Den falschen plan perfekt ausführen
Den falschen plan perfekt ausführenDen falschen plan perfekt ausführen
Den falschen plan perfekt ausführen
 
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
DevOpenSpace 2017 - .NET, .NET Core & .NET Standard - Und ich mal wieder mitt...
 
Java und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzenJava und Python - Das Beste aus beiden Welten nutzen
Java und Python - Das Beste aus beiden Welten nutzen
 
Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014Roslyn DDC Kompakt 2014
Roslyn DDC Kompakt 2014
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
 
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen IBIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
Build Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build ProzessBuild Patterns - Patterns und Best Practices für den Build Prozess
Build Patterns - Patterns und Best Practices für den Build Prozess
 
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehenICIS User Group - Oberflächentests mittels LCT deklarativ angehen
ICIS User Group - Oberflächentests mittels LCT deklarativ angehen
 
C API for Lotus Notes & Domino
C API for Lotus Notes & DominoC API for Lotus Notes & Domino
C API for Lotus Notes & Domino
 

Mehr von Robin Sedlaczek

Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassDeveloper Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassRobin Sedlaczek
 
Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetDeveloper Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetRobin Sedlaczek
 
Developer Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenDeveloper Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenRobin Sedlaczek
 
Azure Hybrid Connections
Azure Hybrid ConnectionsAzure Hybrid Connections
Azure Hybrid ConnectionsRobin Sedlaczek
 
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellMagdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellRobin Sedlaczek
 
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Robin Sedlaczek
 
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!Robin Sedlaczek
 
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkBASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkRobin Sedlaczek
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardRobin Sedlaczek
 
.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET StandardRobin Sedlaczek
 
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...Robin Sedlaczek
 
#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User InterfacesRobin Sedlaczek
 
Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?Robin Sedlaczek
 
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebautBASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebautRobin Sedlaczek
 
Code Reviews - Best Practices
Code Reviews - Best PracticesCode Reviews - Best Practices
Code Reviews - Best PracticesRobin Sedlaczek
 

Mehr von Robin Sedlaczek (16)

Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein RichtungskompassDeveloper Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
Developer Week 2019: .NET, .NET Core und .NET Standard - Ein Richtungskompass
 
Developer Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der RealitaetDeveloper Week 2019: Identity & Access Management in der Realitaet
Developer Week 2019: Identity & Access Management in der Realitaet
 
Developer Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-AnwendungenDeveloper Week 2019: Architekturen für .NET Core-Anwendungen
Developer Week 2019: Architekturen für .NET Core-Anwendungen
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
Azure Hybrid Connections
Azure Hybrid ConnectionsAzure Hybrid Connections
Azure Hybrid Connections
 
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte AnwendungsmodellMagdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
Magdeburger Developer Days 2018 - Das perfekte Anwendungsmodell
 
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
Alleskönner: Azure Cosmos DB - Was kann der neue Datenbank-Service von Micros...
 
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
GUI & DESIGN 2017 - Das perfekte Anwendungsmodell. UIs für jedes Device!
 
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot FrameworkBASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
BASTA! 2017 Jubiläumskonferenz - CUIs & The Microsoft Bot Framework
 
DNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net StandardDNUGBB 2017 - .Net, .Net Core, .Net Standard
DNUGBB 2017 - .Net, .Net Core, .Net Standard
 
.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard.NET Summit 2017 - .NET, .NET Core, .NET Standard
.NET Summit 2017 - .NET, .NET Core, .NET Standard
 
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
#DNUG Berlin-Brandenburg - Conversational User Interfaces (CUIs) und das Micr...
 
#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces#ADC 2016 - Conversational User Interfaces
#ADC 2016 - Conversational User Interfaces
 
Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?Roslyn - Ein offener Compiler. Ja, und nun?
Roslyn - Ein offener Compiler. Ja, und nun?
 
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebautBASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
BASTA! Spring: Roslyn - Refactorings, Analyzer und Code Fixes selbst gebaut
 
Code Reviews - Best Practices
Code Reviews - Best PracticesCode Reviews - Best Practices
Code Reviews - Best Practices
 

#ADC 2016 - C# Script in Action

  • 2. Robin Sedlaczek RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de  CTO der Fairmas GmbH in Berlin  Community Leader DNUG Berlin  Blogger / .NET Code Geek  Sprecher  MSDN Moderator  Freier Autor (Entwickler.de, Heise, DotNetPro, Informatik aktuell)  Open Source (SharpGL, Roslyn, FxCopAnalyzers, Force Feedback)
  • 3. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# Scripting – Wozu das denn? Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
  • 4. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# SCRIPTING – WOZU DAS DENN?  C# Script-Engine im eigenen Code  Ermöglicht Ausführen von C# Code-Snippets  Ganz einfach und zu jeder Zeit!  Keine Solution, Projekte, Namespaces oder Klassen-Deklarationen nötig  Nichts muss, alles kann  Nur kompilierbar sollte es sein. 
  • 5. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# SCRIPTING – VORTEILE?  Einfach einsetzbar  Voller Sprachumfang und Komfort von C# nutzbar  Typisiert !!
  • 6. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# SCRIPTING – NACHTEILE? Nö!  Doch: Sicherheit ist ein Thema! Ach ja, noch was: die Referenzen… 
  • 7. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# Scripting - Übersicht Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
  • 8. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# SCRIPTING - ÜBERSICHT  Ermöglicht einfaches Ausführen von C# Code-Snippets, zu jeder Zeit  Teil der Microsoft .NET Compiler Plattform („Roslyn“)  https://github.com/dotnet/roslyn  NuGet-Paket: Microsoft.CodeAnalysis.CSharp.Scripting (v1.3.2, Stand September 2016)  http://www.nuget.org/packages/Microsoft.CodeAnalysis.CSharp.Scripting/1.3.2  v2.0.0 zur Zeit in Preview/Beta-Status, kommt mit Visual Studio 15  Momentan nur C# Scripting unterstützt  VB.NET Scripting geplant, Roadmap aber ungewiss  Min. Target Framework: .NET Framework 4.6  .NET Core, .NET Native, UWP momentan nicht unterstützt
  • 9. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# SCRIPTING - ÜBERSICHT  Hinzufügen zur Solution oder zum Projekt mit  NuGet Package Manager UI in Visual Studio oder  NuGet Package Manager Console: Install-Package Microsoft.CodeAnalysis.CSharp.Scripting  Namespace-Import: using Microsoft.CodeAnalysis.CSharp.Scripting  Einstieg in die API bildet die statische Klasse CSharpScript:
  • 10. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# Scripting - API Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
  • 11. RobinSedlaczek RobinSedlaczek.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");
  • 12. RobinSedlaczek RobinSedlaczek.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");
  • 13. RobinSedlaczek RobinSedlaczek.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;
  • 14. RobinSedlaczek RobinSedlaczek.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
  • 15. RobinSedlaczek RobinSedlaczek.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.
  • 16. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de Visual Studio | C# Interactive Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
  • 17. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# INTERACTIVE  Ab Visual Studio 2015 Update 1  REPL = read-eval-print-loop
  • 18. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de Real World Example | Application Scripting Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
  • 19. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de APPLICATION SCRIPTING  eigene Anwendung Script-fähig machen  C# als Script-Sprache verwenden  Roslyn bietet dafür die C# Scripting API Fallbeispiel ModelR  Kollaboratives 3D Modelling Tool  Client-Server-Anwendung (basierend auf SignalR)  Integriertes Scripting mit der C# Scripting API  Script-Editor mit Syntax Highlighting  Ausgabe von Kompilierfehlern  Live Script Execution beim Tippen
  • 20. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de APPLICATION SCRIPTING  Script erlaubt direkten Zugriff auf Anwendungsobjekte  es können aber auch eigene Objekte erzeugt werden
  • 21. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de APPLICATION SCRIPTING  Nutzen für Benutzer  Flexibilität – Anwendung kann in sich erweitert werden, ohne Neukompilierung durch den Benutzer  Erweiterbarkeit – Anwendung kann von allen Benutzer beliebig erweitert werden  Effektivität – komplexe wiederkehrende Prozesse können vom Benutzer automatisiert werden  Anpassbarkeit – ein Nutzer kann sich die Anwendung nach seinen Vorstellungen/Vorgaben anpassen  Nutzen für Entwickler  Beliebige APIs können dem Scripting zur Verfügung gestellt werden  APIs sind dann zur Anwendungslaufzeit verfügbar und können dort ausprobiert werden  Kontextwechsel zwischen Kodieren und Programmausführung fällt weg  Code kann dort geschrieben werden, wo er seine Auswirkung hat  Direktes Feedback der Auswirkungen sichtbar  Steigerung der Effizienz  Reduktion von Entwicklungskosten
  • 22. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de APPLICATION SCRIPTING  ModelR - Code & HowTo  WaveDev.ModelR von Robin Sedlaczek  Quellcode ist Open Source auf GitHub: https://github.com/robinsedlaczek/ModelR  Clonen, Kompilieren, Ausführen: WaveDev.ModelR.Server zuerst starten, danach WaveDev.ModelR  4 vordefinierte ModelR-Benutzer: Robin (PW: robin), Sarah (PW: sarah), Jan (PW: jan), Sebastian (PW: sebastian)  Script-Kontext über globale Eigenschaft „ModelR“ bereitgestellt  Über den Script-Kontext kann auf die Anwendungsobjekte zugegriffen werden (Users, SceneObjects)  Neue Objekte werden aus Script ausgelesen und automatisch in die Szene übernommen
  • 23. RobinSedlaczek RobinSedlaczek.com RobinSedlaczek@live.de C# Script in Action „Und jetzt seid Ihr dran…“ RobinSedlaczek.wordpress.com RobinSedlaczek RobinSedlaczek@live.de

Hinweis der Redaktion

  1. 1
  2. 3
  3. 7
  4. 10
  5. 16
  6. 18
  7. 23