scriptcs.net
@scriptcsnet
www.scriptcs.net
scriptcs.net
@filip_woj
github.com/filipw
www.strathweb.com
www.arcmedia.ch
scriptcs.net
Who is scriptcs?
 Community (!)
 Coordinators
 Glenn Block (@glennblock)
 Justin Rusbatch (@jrusbatch)
 Filip Wojcieszyn (@filip_woj)
 Core Commiters
 Damian Schenkelman (@dschenkelman)
 Kristian Hellang (@khellang)
scriptcs.net
Metrics
 525 watchers
 110 forks
 142 pull requests
 29 unique contributors
 14 community contributed script packs (extensions)
 Currently at v0.5
scriptcs.net
Khalid AbuhakmehIan Battersby Nick Berardi Glenn Block Scott Blomquist Danielle Boldt Tim Erickson
Jonas Follesø Victor Grigoriu Andreas Håkansson Kristian Hellang lbargaoanu Denis Mentey John
Nelson Alexander Nyquist David Pendray Aaron Powell Adam Ralph Justin Rusbatch Damian
Schenkleman Paul Shmakov Lodewijk Sioen Brandon Stirnaman Paul Stovell Patrik Svensson Kevin
Trethewey Michael Wade Filip Wojcieszyn Matt Wrock
Contributors
scriptcs.net
What is scriptcs?
 OSS project enabling rich C# scripting experience
 Script and execute -or- use REPL
 Robust extensibility model
 Low ceremony, lightweight
 Use your favorite text editor
 No compilation/projects/solutions
 Built on top of Nuget & Roslyn (no hard dependencies)
scriptcs.net
scriptcs.net
Scriptcs overview
scriptcs
Script Engine
Package
Management
Script Packs
scriptcs.net
Key scriptcs features
 Relaxed C# syntax & code semantics
 As defined in “Interactive C#/VB REPL and Script - Code
Semantics Spec“ white paper
 REPL
 Node.js-like extensibility model (script packs)
 Debug & step through in Visual Studio
 Sublime text plugin
 Scriptcs.Core available as a hostable service
 Nuget integration
scriptcs.net
Scriptcs model
Roslyn / Mono.Csharp*
Nuget
OSS libraries MEF
scriptcs.net
OSS libraries used by scriptcs
 Autofac (dependency injection)
 Common Logging, log4net (logging)
 LiteGuard (argument checks)
 Nuget Core (package installation as a service)
 PowerArgs (command line parsing)
 ServiceStack.Text (serialization)
 Moq, xunit, Should (testing)
scriptcs.net
Getting started with script
Get
packages*
• Scriptcs -install
Write
code
• Any editor
Execute • CLI or hosted
scriptcs.net
Demo: Getting started with script
scriptcs.net
Demo: #load & #r
scriptcs.net
Getting started with REPL
Get
packages*
• Scriptcs -install
Run
scriptcs
Write
code
Evaluate
scriptcs.net
Demo: Getting started - REPL
scriptcs.net
scriptcs.net
Script code semantics
 No top level class
 No arbitrary namespaces
 No Main method
 Global functions allowed
 Script packs accessible through Require<T>
 #load directive to load script from script
 #r directive to reference an assembly from script
scriptcs.net
scriptcs.net
Typical C# experience
 Start Visual Studio (...wait...)
 Choose VS project template
 Create new solution
 Add references, install Nuget packages, import
namespaces
 Compile
 Run (repeat: compile+run)
 Difficult to distribute source code (bloated)
scriptcs.net
scriptcs.net
Typical scriptcs experience
 Install Nuget packages with “scriptcs –install”
 Write code in any text editor
 Run (repeat: edit & run)
 Easy to distribute code (just CSX + packages.config)
scriptcs.net
Self hosted server – traditional C#
scriptcs.net
Self hosted server – scriptcs / node.js
scriptcs.net
Demo: Nancy
scriptcs.net
Role of script packs
Import references
Import namespaces
Expose functionality
scriptcs.net
Script pack example: NUnit
 References
 nunit.core.dll, nunit.core.interfaces.dll, nunit.framework.dll
 Namespaces
 Nunit.Framework, System.Reflection
 Functionality
 public TestResult RunAllUnitTests(Assembly testAssembly =
null)
 public TestResult RunAllUnitTests(Action<string> callback,
Assembly testAssembly = null)
scriptcs.net
scriptcs Nuget integration
 Developed to work around nuget.exe limitations
 scriptcs –install
 Gets all packages from packages.config with dependencies
 scriptcs –install <package name>
 Gets specific package with dependencies
 scriptcs –save
 Creates packages.config based on packages folder
 scriptcs –clean
 Gets rid of packages folder and unnecessary binaries
scriptcs.net
Demo: RavenDB
scriptcs.net
Demo: P/Invoke
scriptcs.net
Demo: WPF
scriptcs.net
Get scriptcs
 CLI distributed via Chocolatey
 cinst scriptcs
 Libs available on Nuget
 Nightly builds on MyGet
 Build from source
 github.com/scriptcs
scriptcs.net
What’s next?
 Pluggable CLI commands
 Pluggable REPL commands
 Export to Visual Studio solution
 Mono support
 Script packs as scripts
 ScriptCatalog – extend applications (MEF) with scriptcs
 Improved ScriptCs.Core API
scriptcs.net

Introduction to Scriptcs