#+TITLE: C# layer
#+HTML_HEAD_EXTRA:
[[file:img/csharp.png]] [[file:img/dotnet.png]]
* Table of Contents :TOC_4_org:noexport:
- [[Description][Description]]
- [[Packages Included][Packages Included]]
- [[Install][Install]]
- [[Prerequisites][Prerequisites]]
- [[ASP.NET 5][ASP.NET 5]]
- [[curl][curl]]
- [[Omnisharp server][Omnisharp server]]
- [[Caveats][Caveats]]
- [[Key Bindings][Key Bindings]]
- [[Compilation][Compilation]]
- [[File/Solution/Project manipulation][File/Solution/Project 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 [[https://github.com/OmniSharp/omnisharp-emacs][OmniSharp]].
* Packages Included
- [[https://github.com/OmniSharp/omnisharp-emacs][OmniSharp-emacs]]
* Install
To use this contribution add it to your =~/.spacemacs=
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers '(csharp))
#+END_SRC
** Prerequisites
*** ASP.NET 5
Follow the instructions for your platform [[https://github.com/aspnet/home#getting-started][here]].
*** curl
You'll need [[http://curl.haxx.se/][curl]] to be able to use the Omnisharp package. Use your favorite
package manager to install it (on Windows you can use [[https://chocolatey.org/][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=:
#+BEGIN_SRC emacs-lisp
(setq-default omnisharp--curl-executable-path "/PATH/TO/CURL/curl")
#+END_SRC
*** Omnisharp server
You have to compile the OmniSharp server following the instructions which can
be found [[https://github.com/OmniSharp/omnisharp-server][here]].
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):
#+BEGIN_SRC emacs-lisp
(setq-default omnisharp-server-executable-path "/PATH/TO/OMNISHARP/OmniSharpServer")
#+END_SRC
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
[[http://www.monodevelop.com/][MonoDevelop]], it's therefore recommended that you install it to create your
solutions.
- Debugging is possible using [[https://github.com/mono/sdb][SDB]].
* Key Bindings
** Compilation
| Key Binding | Description |
|-------------+--------------------|
| ~SPC m c c~ | Build the solution |
** File/Solution/Project manipulation
| Key Binding | Description |
|-------------+-----------------------------------------------|
| ~SPC m f a~ | Add the current file to solution |
| ~SPC m f A~ | Add files selected in dired to solution |
| ~SPC m f r~ | Remove the current file from solution |
| ~SPC m f R~ | Removed files selected in dired from solution |
| ~SPC m p l~ | Add reference to solution |
** Navigation
| Key Binding | Description |
|-------------+-----------------------------------------------|
| ~SPC m g f~ | Go to solution file |
| ~SPC m g F~ | Go to solution file then member |
| ~SPC m g g~ | Go to definition |
| ~SPC m g G~ | Go to definition in other window |
| ~SPC m g i~ | Find implementations |
| ~SPC m g m~ | Go to solution member |
| ~SPC m g M~ | Go to solution member in other window |
| ~SPC m g r~ | Go to region |
| ~SPC m g s~ | Find symbols using Helm |
| ~SPC m g u~ | Find usages of symbol under cursor using Helm |
** Helpers (documentation, info)
| Key Binding | Description |
|-------------+------------------------------------------------------------------------|
| ~SPC m h t~ | Get type information for symbol under cursor |
| ~SPC m h T~ | Get type information for symbol under cursor and put it into kill-ring |
** Refactoring
| Key Binding | Description |
|-------------+------------------------------|
| ~SPC m r m~ | Rename symbol under cursor |
| ~SPC m r r~ | Refactor symbol under cursor |
** OmniSharp server interaction
| Key Binding | Description |
|-------------+----------------------------|
| ~SPC m s r~ | Reload the solution |
| ~SPC m s s~ | Start the OmniSharp server |
| ~SPC m s S~ | Stop the OmniSharp server |
** Tests
| Key Binding | Description |
|-------------+---------------------------------------|
| ~SPC m t a~ | Run all tests in project |
| ~SPC m t b~ | Run all tests in current file/fixture |
| ~SPC m t t~ | Run test under cursor |
** Code manipulation
| Key Binding | Description |
|-------------+---------------------------|
| ~SPC m o~ | Auto complete overrides |
| ~SPC m i~ | Fix usings/imports |
| ~SPC m =~ | Format the current buffer |