#ADC 2016 - C# Script in Action
-
Upload
robin-sedlaczek -
Category
Software
-
view
47 -
download
2
Transcript of #ADC 2016 - C# Script in Action
![Page 1: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/1.jpg)
C# Script in Action Robin Sedlaczek | CTO Fairmas GmbH | .NET User Group Berlin
RobinSedlaczek
![Page 2: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/2.jpg)
Robin Sedlaczek
RobinSedlaczek
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)
![Page 3: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/3.jpg)
Click to edit Master subtitle style
RobinSedlaczek
C# Scripting – Wozu das denn?
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 4: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/4.jpg)
RobinSedlaczek
[email protected]# 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.
![Page 5: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/5.jpg)
RobinSedlaczek
[email protected]# SCRIPTING – VORTEILE?
Einfach einsetzbar Voller Sprachumfang und Komfort von C# nutzbar Typisiert !!
![Page 6: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/6.jpg)
RobinSedlaczek
[email protected]# SCRIPTING – NACHTEILE?
Nö! Doch:
Sicherheit ist ein Thema!Ach ja, noch was: die Referenzen…
![Page 7: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/7.jpg)
Click to edit Master subtitle style
RobinSedlaczek
C# Scripting - Übersicht
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 8: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/8.jpg)
RobinSedlaczek
[email protected]# 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
![Page 9: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/9.jpg)
RobinSedlaczek
[email protected]# 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:
![Page 10: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/10.jpg)
Click to edit Master subtitle style
RobinSedlaczek
C# Scripting - API
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 11: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/11.jpg)
RobinSedlaczek
[email protected]# 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");
![Page 12: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/12.jpg)
RobinSedlaczek
[email protected]# 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");
![Page 13: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/13.jpg)
RobinSedlaczek
[email protected]# 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;
![Page 14: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/14.jpg)
RobinSedlaczek
[email protected]# 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
![Page 15: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/15.jpg)
RobinSedlaczek
[email protected]# 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.
![Page 16: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/16.jpg)
Click to edit Master subtitle style
RobinSedlaczek
Visual Studio | C# Interactive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 17: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/17.jpg)
RobinSedlaczek
[email protected]# INTERACTIVE
Ab Visual Studio 2015 Update 1 REPL = read-eval-print-loop
![Page 18: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/18.jpg)
Click to edit Master subtitle style
RobinSedlaczek
Real World Example | Application Scripting
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 19: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/19.jpg)
RobinSedlaczek
[email protected] 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
![Page 20: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/20.jpg)
RobinSedlaczek
[email protected] SCRIPTING
Script erlaubt direkten Zugriff auf Anwendungsobjekte
es können aber auch eigene Objekte erzeugt werden
![Page 21: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/21.jpg)
RobinSedlaczek
[email protected] 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
![Page 22: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/22.jpg)
RobinSedlaczek
[email protected] 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
![Page 23: #ADC 2016 - C# Script in Action](https://reader034.fdocuments.us/reader034/viewer/2022042619/58836aa41a28ab536b8b6125/html5/thumbnails/23.jpg)
Click to edit Master subtitle style
RobinSedlaczek
C# Script in Action„Und jetzt seid Ihr dran…“
RobinSedlaczek.wordpress.comRobinSedlaczek