BASTA! Spring 2017 - C# Script in Action
-
Upload
robin-sedlaczek -
Category
Software
-
view
99 -
download
2
Transcript of BASTA! Spring 2017 - C# Script in Action
![Page 1: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/1.jpg)
C# Script in Action Robin Sedlaczek | CTO Fairmas GmbH | .NET User Group Berlin
RobinSedlaczek
![Page 2: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/2.jpg)
Robin Sedlaczek
RobinSedlaczek
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
![Page 3: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/3.jpg)
RobinSedlaczek
Was sind Skriptsprachen?
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 4: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/4.jpg)
RobinSedlaczek
[email protected] 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
![Page 5: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/5.jpg)
RobinSedlaczek
[email protected] 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)
![Page 6: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/6.jpg)
RobinSedlaczek
[email protected] SIND SKRIPTSPRACHEN?
Geeignet für kleine Aufgaben/Programme, nicht für große Systeme und Serveranwendungen (Wikipedia) NodeJS PHP
Und jetzt auch noch C# !
![Page 7: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/7.jpg)
RobinSedlaczek
[email protected] SIND SKRIPTSPRACHEN?
Skriptsprachen Kombinieren Dinge, wofür sie nicht gedacht
waren! Jede Sprache kann eine Skripsprache sein. Skripte werden quelloffen ausgeliefert.
![Page 8: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/8.jpg)
RobinSedlaczek
Visual Studio | C# Interactive
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 9: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/9.jpg)
RobinSedlaczek
C# Scripting - Übersicht
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 10: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/10.jpg)
RobinSedlaczek
[email protected]# 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
![Page 11: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/11.jpg)
RobinSedlaczek
[email protected]# SCRIPTING - ÜBERSICHT
Hinzufügen zur Solution oder zum ProjektInstall-Package Microsoft.CodeAnalysis.CSharp.Scripting
Namespace-Import: using Microsoft.CodeAnalysis.CSharp.Scripting
Einstieg in die API bildet die statische Klasse CSharpScript:
![Page 12: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/12.jpg)
RobinSedlaczek
C# Scripting - API
Robin Sedlaczek | Chief Technical Officer at Fairmas GmbH
![Page 13: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/13.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 14: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/14.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 15: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/15.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 16: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/16.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 17: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/17.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 18: BASTA! Spring 2017 - C# Script in Action](https://reader035.fdocuments.net/reader035/viewer/2022062523/58efaf351a28ab8b348b4571/html5/thumbnails/18.jpg)
RobinSedlaczek
C# Script in ActionHave Fun!
RobinSedlaczek.wordpress.comRobinSedlaczek