visual-studio-2012 msbuild

Error de MSBuild "CSC: error CS2001: archivo de origen ''x'' no se pudo encontrar" con los archivos vinculados después de actualizar a Visual Studio 2012



visual-studio-2012 (7)

Después de actualizar automáticamente el archivo de proyecto para una aplicación web .Net 4.0 para trabajar con Visual Studio 2012 todo funcionó bien al principio, sin embargo, al compilar recibí muchos errores como este:

Descripción: No se pudo encontrar el archivo de origen ''.. / .. / .. / .. / .. / File Path''

Archivo: CSC

Y cuando intento construir usando MSBuild (pasando solo la ruta completa del proyecto, sin parámetros adicionales) en el "Indicador de comandos del desarrollador para VS2012", obtuve básicamente los mismos errores:

"CSC: error CS2001: archivo de origen ''x'' no se pudo encontrar"

Todos los errores hacen referencia a los Archivos Vinculados (aspx, cs, etc.) ubicados en otros proyectos de aplicaciones web ubicados en una profundidad diferente en nuestro código de la Sucursal (es por eso que todos los ''.... /' al comienzo de las rutas)

Para mí, parece un problema con el archivo Length , tuve el mismo problema hace un tiempo cuando construí proyectos en nuestro servidor de CI usando MSBuild, pude gestionarlo manipulando los archivos de proyecto antes de compilarlos usando un script personalizado sin la necesidad de mover la rama o reducir la profundidad de los proyectos, no tuve que mover nada, lo importante en ese momento era que los desarrolladores que usaban Visual Studio 2010 pudieran compilar todo sin problemas. Aprendí por esto que la compilación / compilación con MSBuild era diferente que con DevEnv / VS, y por ejemplo, MSBuild no admitía la construcción de proyectos de configuración y DevEnv sí.

Como esto está sucediendo ahora con VS 2012 / DevEnv 2012, además de que VS 2012 ya no admite proyectos de configuración (como msbuild), además de que VS / DevEnv tiene el mismo problema con la longitud del archivo, parece que VS 2012 finalmente usa msbuild bajo el capó o están más estrechamente integrados, sin embargo, no encontré ningún artículo para confirmar esto.

Cambiar la estructura de la sucursal / cambiar la profundidad de los proyectos no es una opción en este momento debido a varias razones (gran base de código, gran cantidad de proyectos, riesgo, tiempo, esfuerzo, etc.).

¿Alguien tiene una solución alternativa o una solución para este problema en Visual Studio 2012?

Saludos,

PD: BTW Ya he comprobado este error de publicación de MSBuild con archivos vinculados, pero como dije antes de cambiar las rutas, no es una opción en este momento.


  1. Compruebe que tiene la última versión de los archivos vinculados de los otros proyectos. Visual Studio NO los obtendrá automáticamente si pertenecen a otro proyecto.
  2. Verifique que las rutas vinculadas sean realmente correctas. Puede controlar a qué archivos VS.NET y MSBUILD intentan acceder con la ayuda de la herramienta SysInternals ProcMon (filtrar los nombres de los procesos y filtrar todos los éxitos)
  3. Si sospecha que la longitud de la ruta es el problema (esto también será visible en la herramienta ProcMon), puede intentar acortarlos vinculando la ruta absoluta (C: / X / Y / Z) en lugar de una ruta relativa ( ...... / Z). La ubicación de los archivos vinculados puede permanecer sin cambios.

Este problema surgió cuando volví a una versión anterior de un repositorio de git. Aparentemente, no agregué el archivo del proyecto al repositorio, así que cuando revertió no revertió el archivo del proyecto también. Lo que hice para aclararlo fue excluir el archivo .cs perdido del proyecto haciendo clic en el archivo que faltaba en el proyecto Explorer. Fue fácil de encontrar ya que estaba marcado con un triángulo de advertencia. Luego reconstruye toda la solución.



Mis 2 centavos para este problema ... En mi caso, tenía un archivo creado en un proyecto (es decir, ConfigModel) y tenía un enlace a este archivo en otro proyecto, pero cuando renombré el archivo ConfigModel en el primer proyecto para LoginModel para ejemplo, no cambió el nombre del enlace en el segundo proyecto que causaba este error.


Ok, golpeé esto y lo resolví hoy. Lo encontré siguiendo un tutorial msdn ( https://msdn.microsoft.com/en-us/library/ms379563%28v=vs.80%29.aspx ) y aquí está el comando que se rompió para mí:

csc /t:library /out:MyCodeLibrary.dll simpleType.cs

Dándome el mensaje

error CS2001: Source file ''t:librabry'' could not be found

Lo cual funcionó después de cambiar el comando original a lo siguiente:

csc /target:library /out:MyCodeLibrary.dll simpleType.cs

No estoy seguro de por qué la versión corta del indicador / target causa este error, pero no he encontrado ningún otro lugar en línea que indique esta causa específicamente, así que quise grabarlo aquí.


Sé que hice esta pregunta hace un tiempo, pero por lo que vale, el enfoque que finalmente escogimos fue:

  • Ubicando los archivos que fueron reportados como demasiado largos.
  • Reduzca la longitud de la ruta completa de esos archivos, reduciendo la longitud del nombre y / o la longitud de la carpeta del contenedor o reduciendo el nivel de anidación de la carpeta. Por lo tanto, se reduce la longitud de la ruta completa.
  • Actualice los enlaces de los archivos modificados (volver a vincular) en los proyectos dependientes.

Esto resolvió el problema con Visual Studio 2012 en las estaciones de trabajo de los desarrolladores y en nuestros servidores de CI / Deploy que usaban MSbuild.

Para mi escenario, este enfoque era menos arriesgado e implicaba menos esfuerzo que mover proyectos / soluciones completos para reducir el nivel de anidamiento de carpetas o reducir los nombres de las carpetas, y tener que actualizar todas las referencias del proyecto / soluciones dependientes.


Encontré una solución a este problema, cuando msbuild el archivo, tu ruta relativa es reconocida por msbuild y msbuild desde allí, se convierte en tu ruta en una ruta larga; sin embargo, puedes cambiarla en la definición del proyecto haciendo clic derecho / descarga el proyecto / y cambie la ruta de ../../../ a $(SolutionDir)/../.. hasta encontrar el archivo para vincular, tenga en cuenta: se extiende el carácter de 255 a 300 caracteres.