visual-studio - vista - visual studio code color brackets
Soluciones temporales de límite de estructura de directorio de MSBuild (8)
Parece que las instantáneas del comando SUBST existan, por lo que reasignar la raíz de la carpeta de compilación a una letra de unidad puede guardar algunos caracteres si la solución de Judah Himango no es buena.
¿Alguien tiene un método para superar el límite de 260 caracteres de la herramienta MSBuild para construir proyectos y soluciones de Visual Studio desde la línea de comandos? Estoy tratando de automatizar la creación usando CruiseControl (CruiseControl.NET no es una opción, así que estoy tratando de vincularlo con las secuencias de comandos normales) y sigo teniendo problemas con la longitud de las rutas. Para aclarar, el problema radica en la longitud de las rutas de los proyectos a los que se hace referencia en el archivo de solución, ya que la herramienta no colapsará correctamente las rutas :(
También intenté usar DevEnv, que a veces funciona y a veces arroja una excepción, lo que no es bueno para una compilación automática en una máquina separada. Por lo tanto, no sugiera usar esto como reemplazo.
Y para colmo, el proyecto funciona bien cuando se usa Visual Studio a través del IDE normal.
Parece que es una limitación de MSBuild. Tuvimos el mismo problema y, al final, tuvimos que acortar los caminos, porque no encontramos ninguna otra solución que funcionara correctamente.
Hay dos tipos de problemas de ruta larga relevantes para la compilación. Uno es caminos que no son realmente demasiado largos, pero tienen muchos "..." en ellos. Por lo general, estos son los valores de HintPath de referencia. MSBuild debería normalizar estas rutas hasta por debajo del límite máximo, para que funcionen.
El otro tipo de camino es simplemente demasiado largo. Lo siento, pero estos simplemente no funcionarán. Después de analizarlo un poco, el problema es que simplemente no hay suficiente soporte API para rutas largas. El equipo de BCL (ver su blog) tuvo problemas similares. Solo algunas de las API de Win32 admiten el formato /? /. Las herramientas de compilación arbitrarias, y probablemente el 98% de las aplicaciones que existen, no; y peor, probablemente se portaría mal (piense en todos los búferes dimensionados para MAX_PATH).
Llegamos a la conclusión de que hasta que no haya un gran esfuerzo ecosistémico para hacer que los caminos largos funcionen, o Windows presenta una forma ingeniosa de hacer que funcionen de todos modos (¿cómo se destruyen los caminos cortos?), MSBuild no puede seguir caminos largos. . Las soluciones incluyen subst, como usted encontró; pero si su árbol simplemente es demasiado profundo, sus únicas opciones son construirlo en fragmentos o acortar los nombres de las carpetas. Lo siento.
Dan / MSBuild
El problema es que cuando se llama al compilador de C # (csc.exe) usa la ruta del directorio de proyectos PROJECTDIRECTORY junto con la ruta de salida OUTPUTPATH simplemente añadiéndolas como:
DIRECTORIO DE PROYECTOS + SALIDA
Sin embargo, si OUTPUTPATH es relativo, es decir, ".. / .. / Build / ProjectName / AnyCPU_Debug_Bin /" y el directorio del proyecto es bastante largo, la longitud total es de más de 259 caracteres, ya que la ruta será:
PROJECTPATH + ".. / .. / Build / ProjectName / AnyCPU_Debug_Bin /"
en lugar de un camino absoluto.
Si csc.exe haría una ruta absoluta antes de llamar a las funciones de Win32, esto funcionaría. Como en nuestro caso, la longitud absoluta de la ruta es inferior a 160 caracteres.
Por alguna razón, la llamada a csc.exe desde Visual Studio es diferente de MSBuild que desde Visual Studio. No sé por qué.
En cualquier caso, el problema se puede resolver cambiando cualquiera de las rutas de DIRECCIÓN DE PROYECTO y / o de ruta de salida o ambas.
Solucioné un problema similar ajustando el archivo CSPROJ:
<BaseIntermediateOutputPath>$([System.IO.Path]::GetFullPath(''$(MSBuildProjectDirectory)/../../../Intermediate/$(AssemblyName)_$(ProjectGuid)/'))</BaseIntermediateOutputPath>
Como resultado, durante la compilación, CSC.EXE recibe la ruta completa en lugar de la relativa.
Gracias a harrydev por la pista sobre cómo opera CSC.EXE con las rutas.
Si la longitud de la ruta es 260, entonces hay una advertencia que resuelve la referencia, para 259 o 261 de este error no ocurre. Creo que hay un error de msbuild.
Sé que ya hay una respuesta aceptada, pero tuve un problema diferente al usar msbuild
que me dio la misma salida de error, y me condujo a una msbuild
. Entonces, para futuros googlers, aquí va:
Tenemos un archivo por lotes que llama a msbuild
, pero como la máquina de compilación puede compilar para múltiples versiones de Visual Studio, cada archivo por lotes llama a vcvarsall.bat
antes de ejecutar msbuild
. Esto tiene el desagradable efecto secundario de rellenar el camino completamente lleno de lo mismo una y otra vez. Cuando se llena, aparece el error que se muestra en la pregunta anterior: The input line is too long.
Una simple búsqueda en Google podría hacerte pensar que tus caminos de repente son demasiado largos para msbuild
.
En mi caso, fue tan simple como matar la sesión de cmd.exe
y reiniciar, ya que esto revierte las variables de entorno a su estado original.
¿Has probado las rutas de DOS? ¿O el prefijo //? /? El blog del equipo .NET BCL tiene más información.