visual tutorial temas studio para mejores linea las iconos extensiones español configurar code ajuste visual-studio msbuild

visual studio - tutorial - MSBuild: ¿puede resolver las dependencias del proyecto en un archivo de solución? ¿Si es así, cómo?



visual studio code español (7)

¿Cómo llamas a MSBuild? Si apunta a MSBuild al archivo de solución, debería ser capaz de resolver las dependencias. Si lo dirige a los archivos de proyectos individuales, entonces no podrá resolver ninguna referencia de proyecto.

Si no utiliza referencias de proyectos, puede controlar la orden de dependencia en una solución utilizando el cuadro de diálogo "Dependencias del proyecto" para configurar manualmente las dependencias.

Tengo un proyecto msbuild que construye un archivo SLN desde Visual Studio que contiene todos los proyectos (más de 70 proyectos), y muchos de los proyectos dependen uno del otro, lo que significa que necesitan ser compilados en orden, a veces un desarrollador olvida para establecer manualmente el orden de compilación en Visual Studio en el archivo de solución que causa que el msbuild en una solución limpia falle cuando algo se construye fuera de servicio / no se puede encontrar un dll.

¿Hay alguna manera para que msbuild tome todos los proyectos y resuelva las dependencias y construya los proyectos en orden, si hay cómo lo hago? usando una tarea MSBuild? Con los intentos actuales parece que solo se construye en el orden en que lee los proyectos, si paso una lista de archivos de proyectos + rutas.

Actualmente, la única forma en que puedo pensar para resolver esto es una aplicación externa que escanea los archivos y las referencias de proj y luego crea una solución manualmente cada vez ... pero esto parece excesivo para algo tan simple.

¿Alguien ha solucionado / visto esto antes?


Si todos sus proyectos dependientes están en la solución y está utilizando referencias de Proyecto, Visual Studio debe administrar las dependencias para usted y compilar en orden de esa lista de dependencia.

Parece que no estás usando referencias de proyectos. Siempre recomiendo referencias de proyectos.


Si bien es correcto que MSBuild observe el orden de compilación cuando usa dependencias de proyecto, hay una advertencia. Actualmente no observa el orden inverso de compilación cuando se construye el objetivo limpio (como he escrito aquí ). Para la construcción regular, sin embargo, funciona muy bien según lo descrito por otros aquí.


Esta es una pregunta antigua, pero el problema era que los proyectos de la solución usaban referencias directas a DLL dependientes (Agregar referencia> seleccionar pestaña Examinar> seleccionar DLL dependiente) en lugar de usar referencias de proyectos (Agregar referencia> seleccionar pestaña Proyectos> seleccionar proyecto dependiente ) Con referencias directas, Visual Studio no puede descifrar la cadena de dependencia. Debe indicarlo haciendo clic derecho en el nodo de la solución y seleccionar Propiedades. Seleccione Propiedades comunes> Dependencias del proyecto para establecer los proyectos necesarios. El Sr. Klaus tiene razón, pero quería documentar cómo solucionar este problema.


Aunque las dependencias del proyecto son difíciles de mantener y no se comparten con los archivos .sln, las referencias del proyecto se respetan y dictan el pedido de forma coherente: consulte la tarea ResolveReferences en Microsoft.Common.targets .

ASIDE: un ''amigo'' puede ''durante una refactorización'' haber anulado accidentalmente su Build Task y su vinculación DependsOnTargets a la tarea Microsoft.Common.targets ResolveReferences y terminó con ProjectReferences no siendo honrado de manera que suena como la pregunta aquí . Si lees algunas de las publicaciones , es posible que te llegues a la idea de que todo está mal, no; los bits inestables son las dependencias del proyecto, no las referencias del proyecto.

Vea este excelente artículo en MSDN Blog de Dan Moseley que realmente explica el tema, incluidas algunas estrategias útiles de solución. (a través de este problema levemente relacionado con la construcción de xUnit.net ).


Estoy usando Msbuild 4 encontrado en c: / Windows / Microsoft.NET / Framework / v4.0.30319 / MSBuild.exe Parece que resuelve el problema.


No existe una herramienta de Microsoft que examine todas las dependencias de sus más de 70 proyectos y genere un archivo de solución con dependencias claramente declaradas para usted.

Tienes que hacer eso por tu cuenta usando 2 métodos diferentes:

  1. Especifique manualmente una dependencia para la solución en Visual Studio.
  2. Especifique una referencia de proyecto en el archivo de proyecto en sí.

Si no quiere hacer eso, tendrá que tragar el medicamento y aceptar que usará una herramienta externa para hacerlo por usted. Sí, es torpe pero se puede hacer que funcione. Si ingresa su archivo de solución a su control de origen puede mitigar estos problemas. Siempre que tenga un archivo de solución activo para trabajar.

En un momento dado no lo hice, y tenía más de 600 proyectos en la construcción. Entonces escribí una herramienta (hace años) que automatizaría el 99% de este trabajo. Utiliza las API de .NET MSBuild para leer los archivos de msbuild (no se recrea la rueda aquí con xml api). A continuación, examina los resultados y las entradas y genera un árbol de dependencias, que luego puedo hacer con él:

  1. Escupir un archivo de solución.
  2. Haga una ordenación de dependencia (también de tipo topológico en el mundo académico) y escupir esos proyectos para que se construyan (para un tipo de compilación no paralela, que a veces puede ser útil).
  3. imprime todo tipo de información de diagnóstico sobre dependencias.

La única limitación que he visto con la herramienta es con algunas locas dependencias COM que de todos modos son bastante incompletas. A lo que agregué una solución muy simple.