[VS Code] Configurando Autocomplete/OmniSharp en Ubuntu

Una de las nuevas líneas de trabajo que Microsoft está llevando adelante de forma constante y con mucha fuerza es el Open Source. Y afortunadamente ASP.NET MVC no es una excepción, así que de a pocos vayamos adentrándonos en este mundo.

Con lo explicado por @sebis en su entrada “ASP.NET Core en Linux” tenemos el detalle de toda la información necesaria para poder configurar el entorno de desarrollo y ejecutar nuestras aplicaciones ASP.NET MVC en Linux, particularmente para Ubuntu/Debian. Ahora bien, resuelto esto debemos pasar al siguiente punto: tener un IDE de desarrollo asociado para trabajar de forma correcta. Y una de las soluciones es VS Code, la herramienta multi-plataforma de Microsoft, pensada para este propósito.

Ni bien abramos por primera vez un proyecto de ASP.NET Core, lo que veremos es lo siguiente:

Omnisharp - ExtensionCSharp
Instalación de la extensión de C#

Como podemos apreciar, el soporte a C# no es algo nativo sino que deberemos instalar, dando la pauta de que no es algo atado a un lenguaje, sino un IDE general de desarrollo. Una vez finalizada la instalación (demorará unos minutos sin notificaciones, por lo que no seamos impacientes) veremos el siguiente resultado:

Omnisharp - ExtensionCSharpInstalada

Así que procedemos a cerrar y volver a abrir VS Code como nos lo pide el mensaje, y luego de hacerlo podremos apreciar que tenemos soporte a través del color de la sintaxis. Pero vemos que hay cosas que no están funcionando, como el autocompletar o la detección de las referencias y assemblies:

Omnisharp - NoAutocomplete

Esto nos indica que lo que no nos está funcionando es OmniSharp. Ahora bien, qué es OmniSharp? Básicamente es una iniciativa/proyecto que permite poder desarrollar en .NET Core en (casi) cualquier editor de los populares, logrando una gran independencia de plataformas. Y en el caso de VS Code, OmniSharp ya viene de forma nativa.

Para tener más detalles de la situación, deberemos ver la consola de resultados disponible en la opción del menú View > Toggle Output

En dicha consola, vamos a la opción “OmniSharp Log” y veremos el siguiente mensaje.

Omnisharp - MensajeLog

Como se aprecia, nos está faltando la instalación de Mono, y en su versión 4.0.1 o posterior. Mono es un proyecto que trabaja desde hace ya varios años en la implementación Open Source del framework .NET, y VS Code se vale da algunas de sus funcionalidades.

Lo primero que vamos a hacer es validar la versión disponible en los repositorios de Ubuntu con el siguiente comando:

apt-cache policy mono-complete
Omnisharp - PaqueteOriginal
Por defecto tenemos la versión 3.2.8 de mono-complete

Lo que vemos es que tenemos disponible la versión 3.2.8 del paquete, lo cual no nos sirve para lo que VS Code requiere. Por ello agregaremos el repositorio oficial de Mono que tiene las últimas versiones ejecutando la siguiente secuencia de comandos:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list
sudo apt-get update

 

Si ahora volvemos a realizar la validación de versiones, veremos que tenemos disponible la versión 4.2.2:

Omnisharp - PaqueteActualizado
Al agregar el repositorio oficial contamos con una versión soportada por VS Code

Así que procedamos a la instalación, mediante el siguiente comando:

sudo apt-get install mono-complete

Se nos pedirá confirmación de todas las dependencias asociadas, las cuales aceptaremos y comenzará la descarga/instalación, lo cual podrá llevarnos un rato.

Parece que tendríamos todo listo ya que cumplimos con la instalación solicitada, pero no es así. Si ahora abrimos VS Code nos encontraremos con el siguiente error:

[ERROR:OmniSharp.Startup] The project system 'DnxProjectSystem' threw an exception.
System.InvalidOperationException: File name has not been set
 at System.Diagnostics.Process.Start_common (System.Diagnostics.ProcessStartInfo startInfo, System.Diagnostics.Process process) <0x4053ce10 + 0x0011b> in <filename unknown>:0 
 at System.Diagnostics.Process.Start () <0x4053cd90 + 0x0004b> in <filename unknown>:0 
 at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:Start ()
 at OmniSharp.Dnx.DesignTimeHostManager.Start (System.String hostId, System.Action`1 onConnected) <0x40502190 + 0x00acf> in <filename unknown>:0 
 at OmniSharp.Dnx.DnxProjectSystem.Initalize (IConfiguration configuration) <0x404f6290 + 0x004df> in <filename unknown>:0 
 at OmniSharp.Startup.Configure (IApplicationBuilder app, IServiceProvider serviceProvider, ILibraryManager manager, IOmnisharpEnvironment env, ILoggerFactory loggerFactory, ISharedTextWriter writer, IOptions`1 optionsAccessor) <0x40482200 + 0x008a6> in <filename unknown>:0

Esto se debe a que nos falta crear el runtime asociado a Mono. Siguiendo las indicaciones del post que mencionaba al principio por defecto tendremos solamente el runtime nativo (coreclr), pero también es necesario contar con este nuevo. Para agregar este runtime ejecutamos el siguiente comando:

dnvm upgrade -r mono

Si luego de la instalación validamos los runtimes disponibles con el comando dnvm list, veremos que ahora contamos con el nuevo asociado a Mono.

Omnisharp - AgregarRuntime

Ahora si, tenemos todo listo para ejecutar VS Code con OmniSharp configurado! 😀

Omnisharp - ResultadoOk

Veremos que además de el autocompletar tenemos marcas asociadas a que hay errores, debido a que hay paquetes sin descargar (algo que también ahora es alertado por VS Code), dándonos la pauta de que ahora si tenemos todo andando.

Para tener en cuenta, ahora quedará el runtime de Mono por defecto, pero no es necesario que sea así. Para cambiar entre los distintos disponibles, les recomiendo otro post de @sebisCreando alias y swicheando entre DNX Rutimes [Linux]

Y eso es todo por este post, espero que les sea útil!

Anuncios

Un comentario en “[VS Code] Configurando Autocomplete/OmniSharp en Ubuntu

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s