Error en proyectos gRPC al usar un nombre de usuario de Windows con espacios o caracteres especiales
martes, 8 de octubre de 2019
Como un servidor, todos los que tengáis la inmensa fortuna de utilizar en Windows un nombre de usuario con espacios o caracteres especiales como "José María Aguilar", seguro que habéis encontrado alguna vez problemas con aplicaciones o herramientas que fallan cuando intentan acceder a contenidos de la carpeta
De hecho, llevo ya varios encontronazos de este tipo en los últimos meses (por ejemplo, con Anaconda o con el SDK de Android para Windows), y el último lo he tenido al intentar utilizar las herramientas de Protobuf para la creación de servicios gRPC que, como sabéis, es una de las novedades incluidas en .NET Core 3.
Aunque el problema lo he encontrado trabajando con Visual Studio, ciertamente este IDE tiene poco que decir al respecto; ocurre lo mismo usando línea de comandos o cualquier otro entorno que se base en el tooling oficial de gRPC para .NET.
Y si lo hacemos desde línea de comandos, no mejora mucho la cosa:
1. Crear un enlace simbólico, o un junction link, por ejemplo en la raíz del disco duro, apuntando hacia el directorio donde se encuentra la carpeta
2. Establecer la variable de entorno
Publicado en: Variable not found.
C:\Users\<Tu nombre>
:De hecho, llevo ya varios encontronazos de este tipo en los últimos meses (por ejemplo, con Anaconda o con el SDK de Android para Windows), y el último lo he tenido al intentar utilizar las herramientas de Protobuf para la creación de servicios gRPC que, como sabéis, es una de las novedades incluidas en .NET Core 3.
Aunque el problema lo he encontrado trabajando con Visual Studio, ciertamente este IDE tiene poco que decir al respecto; ocurre lo mismo usando línea de comandos o cualquier otro entorno que se base en el tooling oficial de gRPC para .NET.
El problema
El problema es bastante sencillo de reproducir si usáis nombres de usuario de ese tipo. Basta con crear un proyecto de tipo "Servicio gRPC" e intentar compilarlo. Si lo hacemos desde Visual Studio, veremos el siguiente error:Y si lo hacemos desde línea de comandos, no mejora mucho la cosa:
C:\test>dotnet new grpc
The template "ASP.NET Core gRPC Service" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on C:\test\test.csproj...
Restauración realizada en 96,36 ms para C:\test\test.csproj.
Restore succeeded.
C:\test>dotnet build
Microsoft (R) Build Engine versión 16.3.0+0f4c62fea para .NET Core
Copyright (C) Microsoft Corporation. Todos los derechos reservados.
Restauración realizada en 19,26 ms para C:\test\test.csproj.
--grpc_out : error : protoc-gen-grpc: El sistema no puede encontrar
la ruta especificada. [C:\test\test.csproj]
ERROR al compilar.
--grpc_out : error : protoc-gen-grpc: El sistema no puede encontrar
la ruta especificada. [C:\test\test.csproj]
0 Advertencia(s)
1 Errores
Tiempo transcurrido 00:00:00.68
C:\test>_
Me encantan estos errores que no dan pistas sobre el origen del problema ;)La solución
Desde luego, y me lo apunto para mi próxima instalación de Windows, el mejor remedio sería no utilizar un nombre de usuario con espacios ni caracteres extraños. Un "jmaguilar" habría sido perfecto, ho hay necesidad de utilizar el nombre completo ;)C:\Users\José María Aguilar> _
Pero si ya estamos en un momento en que esto no tiene solución sencilla, podéis seguir los pasos descritos a continuación:1. Crear un enlace simbólico, o un junction link, por ejemplo en la raíz del disco duro, apuntando hacia el directorio donde se encuentra la carpeta
packages
de NuGet:C:\> mklink /j "C:\.nuget" "C:\Users\José María Aguilar\.nuget"
Una vez ejecutado este comando, la carpeta se verá en el explorador de archivos como se muestra en la siguiente captura de pantalla:2. Establecer la variable de entorno
NUGET_PACKAGES
, que indica la ubicación de la carpeta Packages
de NuGet, utilizando el enlace simbólico. En mi caso, es algo como:NUGET_PACKAGES=C:\.nuget\packages
¡Y esto es todo! Espero que os resulte útil, y recordad que este mismo truco podéis usarlo para otros escenarios en los que ocurra lo mismo :)Publicado en: Variable not found.
1 comentario:
Añadir que he tenido el mismo problema porque en mi nombre de usuario de Windows hay una tilde. También decir que la solución propuesta en el post también ha resuelto mi problema.
Enviar un nuevo comentario