Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
csharp(1)		    General Commands Manual		     csharp(1)

NAME
       csharp -	Interactive C# Shell and Scripting

SYNOPSIS
       csharp  [--attach  PID]	[-e  EXPRESSION] [file1	[file2]] [compiler-op-
       tions] [--|-s script-options]

DESCRIPTION
       The csharp command is an	interactive C# shell and scripting  host  that
       allows  the  user  to  enter and	evaluate C# statements and expressions
       from the	command	line or	execute	C# scripts.  The regular  mcs  command
       line options can	be used	in this	version	of the compiler.

       Files  specified	 in  the  command  line	will be	loaded and executed as
       scripts.

       Starting	with Mono 2.10,	the csharp command can be used	as  an	inter-
       preter executed by executables flagged with the Unix execute attribute.
       To do this, make	the first line of your C# source code look like	this:

	 #!/usr/bin/csharp
	 Console.WriteLine ("Hello, World");

       Starting	with Mono 5.0, command line arguments may now be passed	to the
       csharp command by specifying either the -s or --	(script) options.

       The -s option is	ideal for interpreting executable scripts that utilize
       shebang	syntax (introduced in Mono 2.10). This allows command line ar-
       guments to be passed to and consumed cleanly by the script:

	 #!/usr/bin/csharp -s
	 foreach (var arg in Args)
	   Console.WriteLine ($"script argument: {arg}");

OPTIONS
       The commands accept all of the commands that are	available to  the  mcs
       command,	so you can reference assemblies, specify paths,	language level
       and  so	on from	the command line.   In addition, the following command
       line options are	supported:

       -s SCRIPT_FILE
	      This option is ideal for authoring executable scripts that  uti-
	      lize the Unix shebang feature. Unix will implicitly append as an
	      argument	the path of the	script to execute. When	the executable
	      is invoked, any arguments	then passed to it will be available in
	      the Args global. Example:	#!/usr/bin/env csharp -s

       --     Any arguments that follow	will not be  passed  to	 the  compiler
	      driver,  and  instead will be made available in the Args global.
	      Example: csharp -- a b c will result in Args = { "a", "b", "c" }
	      in the interactive shell.

       --attach
	      This is an advanced option and should only be used if you	have a
	      deep understanding of multi-threading.	 This option is	avail-
	      ble on the csharp	command	and allows the compiler	to be injected
	      into other processes.  This is done by injecting the C# shell in
	      a	separate thread	that runs concurrently with your  application.
	      This means that you must take special measures to	avoid crashing
	      the  target  application while using it.	For example, you might
	      have to take the proper locks before issuing any	commands  that
	      might  affect  the  target  process  state,  or sending commands
	      through a	method dispatcher.

       -e EXPRESSION
	      This will	evaluate the specified C# EXPRESSION and exit

OPERATION
       Once you	launch the csharp command, you will be greeted with the	inter-
       active prompt:

       $ csharp
       Mono C# Shell, type "help;" for help

       Enter statements	below.
       csharp>

       A number	of namespaces are pre-defined with C#  these  include  System,
       System.Linq, System.Collections and System.Collections.Generic.	Unlike
       the  compiled  mode,  it	is possible to add new using statements	as you
       type code, for example:

       csharp> new XmlDocument ();
       <interactive>(1,6): error CS0246: The type or namespace name `XmlDocument' could	not be found. Are you missing a	using directive	or an assembly reference?
       csharp> using System.Xml;
       csharp> new XmlDocument ();
       System.Xml.XmlDocument

       Every time a command is typed, the scope	of that	command	is  one	 of  a
       class  that  derives from the class Mono.CSharp.InteractiveBase.	  This
       class defines a number of static	properties and methods.	  To display a
       list of available commands access the `help' property:
       csharp> help;
       "Static methods:
	 LoadPackage (pkg); - Loads the	given Package (like -pkg:FILE)
	 [...]
	 ShowVars ();	    - Shows defined local variables.
	 ShowUsing ();	    - Show active using	decltions.
	 help;
       "
       csharp>

       When expressions	are entered, the C# shell will display the  result  of
       executing the expression:

       csharp> Math.Sin	(Math.PI/4);
       0.707106781186547
       csharp> 1+1;
       2
       csharp> "Hello, world".IndexOf (',');
       5

       The  C# shell uses the ToString() method	on the returned	object to dis-
       play the	object,	this sometimes can be limiting since objects  that  do
       not  override  the ToString() method will get the default behavior from
       System.Object which is merely to	display	their type name:

       csharp> var a = new XmlDocument ();
       csharp> a;
       System.Xml.Document
       csharp> csharp> a.Name;
       "#document"
       csharp>

       A few datatypes are handled specially by	the C# interactive shell  like
       arrays,	 System.Collections.Hashtable,	objects	 that  implement  Sys-
       tem.Collections.IEnumerable and IDictionary and are rendered  specially
       instead of just using ToString ():

       csharp> var pages = new Hashtable () {
	     >	{ "Mono",    "http://www.mono-project.com/" },
	     >	{ "Linux",   "http://kernel.org" } };
       csharp> pages;
       {{ "Mono", "http://www.mono-project.com/" }, { "Linux", "http://kernel.org" }}

       It  is  possible	to use LINQ directly in	the C# interactive shell since
       the System.Linq namespace has been imported at startup.	 The following
       sample gets a list of all the files that	have not been  accessed	 in  a
       week from /tmp:

       csharp> using System.IO;
       csharp> var last_week = DateTime.Now - TimeSpan.FromDays	(7);
       csharp> var old_files = from f in Directory.GetFiles ("/tmp")
	     >	 let fi	= new FileInfo (f)
	     >	 where fi.LastAccessTime < LastWeek select f;
       csharp>

       You can of course print the results in a	single statement as well:

       csharp> using System.IO;
       csharp> var last_week = DateTime.Now - TimeSpan.FromDays	(7);
       csharp> from f in Directory.GetFiles ("/tmp")
	     >	 let fi	= new FileInfo (f)
	     >	 where fi.LastAccessTime < last_week select f;
       [...]
       csharp>

       LINQ  and its functional	foundation produce on-demand code for IEnumer-
       able return values.  For	instance, the return value from	a using	`from'
       is an IEnumerable that is evaluated on demand.	The automatic  render-
       ing  of	IEnumerables  on the command line will trigger the IEnumerable
       pipeline	to execute at that point instead of having its	execution  de-
       layed until a later point.

       If  you	want  to  avoid	having the IEnumerable rendered	at this	point,
       simply assign the value to a variable.

       Unlike compiled C#, the type of a variable can be changed if a new dec-
       laration	is entered, for	example:

       csharp> var a = 1;
       csharp> a.GetType ();
       System.Int32
       csharp> var a = "Hello";
       csharp> a.GetType ();
       System.String
       csharp> ShowVars	();
       string a	= "Hello"

       In the case that	an expression or a statement is	 not  completed	 in  a
       single line, a continuation prompt is displayed,	for example:

       csharp> var protocols = new string [] {
	     >	  "ftp",
	     >	  "http",
	     >	  "gopher"
	     > };
       csharp> protocols;
       { "ftp",	"http",	"gopher" }

       Long running computations can be	interrupted by using the Control-C se-
       quence:

       csharp> var done	= false;
       csharp> while (!done) { }
       Interrupted!
       System.Threading.ThreadAbortException: Thread was being aborted
	 at Class1.Host	(System.Object&	$retval) [0x00000]
	 at Mono.CSharp.InteractiveShell.ExecuteBlock (Mono.CSharp.Class host, Mono.CSharp.Undo	undo) [0x00000]
       csharp>

INTERACTIVE EDITING
       The  C#	interactive  shell contains a line-editor that provides	a more
       advanced	command	line editing functionality than	the  operating	system
       provides.    These  are	available in the command line version, the GUI
       versions	uses the standard Gtk# key bindings.

       The command set is similar to many other	applications (cursor keys) and
       incorporates some of the	Emacs commands for editing as well as  a  his-
       tory mechanism too.

       The following keyboard input is supported:

       Home Key, Control-a
	      Goes to the beginning of the line.

       End Key,	Control-e
	      Goes to the end of the line.

       Left Arrow Key, Control-b
	      Moves the	cursor back one	character.

       Right Arrow Key,	Control-f
	      Moves the	cursor forward one character.

       Up Arrow	Key, Control-p
	      Goes  back  in  the  history, replaces the current line with the
	      previous line in the history.

       Down Arrow Key, Control-n
	      Moves forward in the history, replaces the current line with the
	      next line	in the history.

       Return Executes the current line	if the statement or expression is com-
	      plete, or	waits for further input.

       Control-C
	      Cancel the current line being edited.  This will kill  any  cur-
	      rently  in-progress  edits  or  partial editing and go back to a
	      toplevel definition.

       Backspace Key
	      Deletes the character before the cursor

       Delete Key, Control-d
	      Deletes the character at the current cursor position.

       Control-k
	      Erases the contents of the line until the	end of	the  line  and
	      places the result	in the cut and paste buffer.

       Alt-D  Deletes  the  word  starting  at the cursor position and appends
	      into the cut and paste buffer.	By pressing Alt-d  repeatedly,
	      multiple words can be appended into the paste buffer.

       Control-Y
	      Pastes  the content of the kill buffer at	the current cursor po-
	      sition.

       Control-Q
	      This is the quote	character.   It	allows the user	to enter  con-
	      trol-characters  that are	otherwise taken	by the command editing
	      facility.	  Press	Control-Q followed by the character  you  want
	      to  insert,  and	it  will be inserted verbatim into the command
	      line.

       Control-D
	      Terminates the program.	This terminates	the input for the pro-
	      gram.

STATIC PROPERTIES AND METHODS
       Since the methods and properties	of  the	 base  class  from  where  the
       statements and expressions are executed are static, they	can be invoked
       directly	from the shell.	  These	are the	available properties and meth-
       ods:

       Args   An easy to consume array of any arguments	specified after	either
	      -s  or  -- on the	command	line. Ideal for	self-executing scripts
	      utilizing	the -s option.

       void LoadAssembly(string	assembly)
	      Loads the	given assembly.	  This is equivalent  to  passing  the
	      compiler the -r: flag with the specified string.

       void LoadPackage(string package)
	      Imports  the package specified.	This is	equivalent to invoking
	      the compiler with	the -pkg: flag with the	specified string.

       string Prompt { get; set	}
	      The prompt used by the shell.  It	defaults to the	value "csharp>
	      ".  string ContinuationPrompt { get; set;	} The prompt  used  by
	      the shell	when further input is required to complete the expres-
	      sion or statement.

       void ShowVars()
	      Displays	all  the  variables  that have been defined so far and
	      their types.    In the csharp shell declaring new	variables will
	      shadow previous variable declarations, this is different than C#
	      when compiled.  void ShowUsing() Displays	all the	 using	state-
	      ments in effect.	TimeSpan Time (Action a) Handy routine to time
	      the  time	that some code takes to	execute.   The parameter is an
	      Action delegate, and the return value is a TimeSpan.  For	 exam-
	      ple:

       csharp> Time (()	=> { for (int i	= 0; i < 5; i++) Console.WriteLine (i);});
       0
       1
       2
       3
       4
       00:00:00.0043230
       csharp>

       The  return  value  is a	TimeSpan, that you can store in	a variable for
       benchmarking purposes.

GUI METHODS AND	PROPERTIES
       In addition to the methods and properties available in the console ver-
       sion there are a	handful	of extra properties available on the GUI  ver-
       sion.   For example a "PaneContainer" Gtk.Container is exposed that you
       can  use	 to  host  Gtk#	 widgets while prototyping or the "MainWindow"
       property	that gives you access to the current toplevel window.

STARTUP	FILES
       The C# shell will load all the Mono assemblies and C# script files  lo-
       cated  in  the  ~/.config/csharp	directory on Unix.  The	assemblies are
       loaded before the source	files are loaded.

       C# script files are files that have the extension .cs and  they	should
       only  contain  statements  and  expressions,  they can not contain full
       class definitions (at least not as of Mono 2.0).	  Full	class  defini-
       tions should be compiled	into dlls and stored in	that directory.

AUTHORS
       The  Mono C# Compiler was written by Miguel de Icaza, Ravi Pratap, Mar-
       tin Baulig, Marek Safar and Raja	Harinath.  The development was	funded
       by Ximian, Novell and Marek Safar.

LICENSE
       The  Mono  Compiler Suite is released under the terms of	the GNU	GPL or
       the MIT X11.  Please read the accompanying `COPYING' file for  details.
       Alternative licensing for the compiler is available from	Novell.

SEE ALSO
       gmcs(1),	mcs(1),	mdb(1),	mono(1), pkg-config(1)

BUGS
       To  report bugs in the compiler,	you must file them on our bug tracking
       system, at: http://www.mono-project.com/community/bugs/

MAILING	LIST
       The Mono	Mailing	lists are listed at http://www.mono-project.com/commu-
       nity/help/mailing-lists/

MORE INFORMATION
       The Mono	C# compiler was	 developed  by	Novell,	 Inc  (http://www.nov-
       ell.com,	 http) and is based on the ECMA	C# language standard available
       here: http://www.ecma.ch/ecma1/STAND/ecma-334.htm

       The  home  page	for  the  Mono	C#  compiler  is  at  http://www.mono-
       project.com/docs/about-mono/languages/csharp/ information about the in-
       teractive    mode    for	   C#	 is    available    in	  http://mono-
       project.com/docs/tools+libraries/tools/repl/

				 22 March 2017			     csharp(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=csharp&sektion=1&manpath=FreeBSD+Ports+15.0.quarterly>

home | help