Running C# in REPL using scriptcs

September 16, 2017

C# REPL

Did You ever wanted to run C# code in a scripty inline way to check if code will execute the way you want?

This could be especially useful when you don’t have powerful visual studio with repl(interactive) and You are writing C# in something lightweight like vs code.

I decided to write this post because installing scriptcs is cumbersome, most of the guides/docs out there don’t help much.

On Windows

On Windows it’s pretty straightforward:

  • Install chocolatey, in powershell type:
    Set-ExecutionPolicy AllSigned; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
  • …or in command prompt:
    @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    
  • Install scriptcs:
    choco install scriptcs
    
  • It’s added to path automatically, easy mode.

On Linux

Troubles begin on linux. Since you don’t have chocolatey there and striptcs doesn’t provide any deb package. It took me humongous amount o time to figure out how to make it work. I had to check on travis how project is build on linux.

For sake of this I’m using mint 18, for ubuntu should be the same.

Prerequisites are:

  • mono (get it here)

  • msbuild (xbuild from mono didn’t work for me).

  • install msbuild:
    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    echo "deb http://download.mono-project.com/repo/ubuntu xenial main" | sudo tee /etc/apt/sources.list.d/mono-official.list
    sudo apt-get -qq update
    sudo apt-get install msbuild
    
  • checkout scriptcs sources and cd into:
    git clone https://github.com/scriptcs/scriptcs.git
    cd scriptcs
    
  • restore nuget packages
    mono ./.nuget/NuGet.exe restore ./.nuget/packages.config -PackagesDirectory ./packages
    mono ./.nuget/NuGet.exe restore ./ScriptCs.sln
    
  • compile it using msbuild
    msbuild ./ScriptCs.sln /property:Configuration=Release /nologo /verbosity:normal
    
  • add bash script, that will execute compiled exe using mono
    sudo mkdir /usr/share/scriptcs && cd "$_"
    ## copy files from build output directory (/bin/release/) to current directory
    sudo touch scriptcs
    chmod +x scriptcs
    sudo nano scriptcs 
    ## copy & paste 
    #!/usr/bin/env bash 
    mono "/usr/share/scriptcs/scriptcs.exe"
    
  • create symlink to add scriptcs to path
    ln -s {path to bash script} /usr/bin/scriptcs
    

Code Runner

Just type scriptcs in terminal and here you go.

If you want something more neat use it with vs code and Code Runner extension, which is using scriptcs to run selected code.
Go grab it, select C# code in vs code, hit ctrl + alt + n and enjoy output from scriptcs (remember to print out what you want to see).

If you are looking for similar thing but for js check Quokka.js.

Cheers!