#+TITLE: C# layer [[file:img/csharp.png]] [[file:img/dotnet.png]] * Table of Contents :TOC_4_gh:noexport: - [[#description][Description]] - [[#packages-included][Packages Included]] - [[#install][Install]] - [[#prerequisites][Prerequisites]] - [[#aspnet-5][ASP.NET 5]] - [[#curl][curl]] - [[#omnisharp-server][Omnisharp server]] - [[#caveats][Caveats]] - [[#key-bindings][Key Bindings]] - [[#compilation][Compilation]] - [[#filesolutionproject-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 configuration layer, add it to your =~/.spacemacs=. You will need to add =csharp= to the existing =dotspacemacs-configuration-layers= list in this file. ** Prerequisites *** ASP.NET 5 Follow the instructions for your platform [[https://github.com/aspnet/home#user-content-get-started][here]]. *** curl You'll need [[https://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 c~ | Go to member in current file | | ~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 I~ | Find implementations using ido | | ~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 | | ~SPC m g U~ | Find usages of symbol under cursor using ido | ** 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 M~ | Rename symbol under cursor interactively | | ~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 |