# C# contribution layer for Spacemacs
![logo_csharp](img/csharp.png) ![logo_dotnet](img/dotnet.png)
**Table of Contents**
- [C# contribution layer for Spacemacs](#c-contribution-layer-for-spacemacs)
- [Description](#description)
- [Packages Included](#packages-included)
- [Install](#install)
- [Prerequisites](#prerequisites)
- [ASP.NET 5](#aspnet-5)
- [curl](#curl)
- [Omnisharp server](#omnisharp-server)
- [Caveats](#caveats)
- [Key Bindings](#key-bindings)
- [Compilation](#compilation)
- [File/Solution/Project manipulation](#filesolutionproject-manipulation)
- [Navigation](#navigation)
- [Helpers (documentation, info)](#helpers-documentation-info)
- [Refactoring](#refactoring)
- [OmniSharp server interaction](#omnisharp-server-interaction)
- [Tests](#tests)
- [Code manipulation](#code-manipulation)
## Description
This layer adds experimental support for C# language using [OmniSharp][].
## Packages Included
- [OmniSharp-emacs][]
- [OmniSharp-server][]
## Install
To use this contribution add it to your `~/.spacemacs`
```elisp
(setq-default dotspacemacs-configuration-layers '(csharp))
```
### Prerequisites
#### ASP.NET 5
Follow the instructions for your platform [here][aspnet].
#### curl
You'll need [curl][] to be able to use the Omnisharp package. Use your favorite
package manager to install it (on Windows you can use [chocolatey][]).
Be sure to make the `curl` binary available to your PATH environment variable,
or set the variable `omnisharp--curl-executable-path` in your dotfile function
`dotspacemacs-config`:
```elisp
(setq-default omnisharp--curl-executable-path "/PATH/TO/CURL/curl")
```
#### Omnisharp server
You have to compile the OmniSharp server following the instructions which can
be found [here][server_install].
Don't forget to add the server binary directory to your system PATH environment
variable. The full path the binary can also be directly referenced in the
variable `omnisharp-server-executable-path` (put this in your
`dotspacemacs-config` function):
```elisp
(setq-default omnisharp-server-executable-path "/PATH/TO/OMNISHARP/OmniSharpServer")
```
OmniSharp should now automatically load and start a server when you open a
`.cs` file.
## Caveats
- It's currently not possible to create a C# solution outside of an IDE such as
[MonoDevelop][], it's therefore recommended that you install it to create your
solutions.
- Debugging is possible using [SDB][].
## Key Bindings
### Compilation
Key Binding | Description
----------------------|------------------------------------------------------------
mcc | Build the solution
### File/Solution/Project manipulation
Key Binding | Description
----------------------|------------------------------------------------------------
mfa | Add the current file to solution
mfA | Add files selected in dired to solution
mfr | Remove the current file from solution
mfR | Removed files selected in dired from solution
mpl | Add reference to solution
### Navigation
Key Binding | Description
----------------------|------------------------------------------------------------
mgf | Go to solution file
mgF | Go to solution file then member
mgg | Go to definition
mgG | Go to definition in other window
mgi | Find implementations
mgm | Go to solution member
mgM | Go to solution member in other window
mgr | Go to region
mgs | Find symbols using Helm
mgu | Find usages of symbol under cursor using Helm
### Helpers (documentation, info)
Key Binding | Description
-----------------------|------------------------------------------------------------
"mht" | Get type information for symbol under cursor
"mhT" | Get type information for symbol under cursor and put it into kill-ring
### Refactoring
Key Binding | Description
----------------------|------------------------------------------------------------
mrm | Rename symbol under cursor
mrr | Refactor symbol under cursor
### OmniSharp server interaction
Key Binding | Description
----------------------|------------------------------------------------------------
msr | Reload the solution
mss | Start the OmniSharp server
msS | Stop the OmniSharp server
### Tests
Key Binding | Description
----------------------|------------------------------------------------------------
mta | Run all tests in project
mtb | Run all tests in current file/fixture
mtt | Run test under cursor
### Code manipulation
Key Binding | Description
----------------------|------------------------------------------------------------
mo | Auto complete overrides
mi | Fix usings/imports
m= | Format the current buffer
[server_install]: https://github.com/OmniSharp/omnisharp-server
[aspnet]: https://github.com/aspnet/home#getting-started
[OmniSharp]: https://github.com/OmniSharp/omnisharp-emacs
[OmniSharp-emacs]: https://github.com/OmniSharp/omnisharp-emacs
[OmniSharp-server]: https://github.com/OmniSharp/omnisharp-server
[MonoDevelop]: http://www.monodevelop.com/
[SDB]: https://github.com/mono/sdb
[curl]: http://curl.haxx.se/
[chocolatey]: https://chocolatey.org/