Tengo un archivo SLN normal, y estoy compilando bien con msbuild desde la línea de comandos. Hago esto:msbuild SLN y aún obtener salidas de proyecto por separado?
C: \ slndir> msbuild/p: OutDir = C: \ slnbin \
Y que vuelca todo en C: \ slnbin, a excepción de sitios web, que se despliegan a C: \ slnbin_PublishedWebsites \.
Lo que me gustaría es no solo tener todos los binarios caídos en el directorio bin, sino también tener cada programa ejecutable con su propia carpeta "desplegada", similar a la que obtiene cada sitio web.
Así, por ejemplo, si tengo los siguientes proyectos: - Común - Lib1 - service1 - de Lib2 - Servicio2
que quiere conseguir:
C:\slnbin\ // Everything
C:\slbin\Deploy\Service1 // Common, Lib1, Service1
C:\slbin\Deploy\Service2 // Common, Lib2, Service2
Intenté hacer cosas como "msbuild/p: OutDir = C: \ slnbin \ $ (ProjectName)", pero solo lo trata como un literal y crea un subdirectorio "$ (ProjectName)" real.
Preferiblemente, no tendría que modificar cada proyecto individual y así sucesivamente.
¿Esto es posible? ¿Fácil?
Esto funciona muy bien para nosotros. Una pregunta: cuando llamas a MSBuild para pasar Projects = "% (ProjectFiles.Fullpath)", ¿es MSBuild lo suficientemente inteligente como para construir solo cada proyecto una sola vez? Por ejemplo, si tiene foo.dll que está en la Solución y otros 4 proyectos de referencia, ¿creará foo.dll una vez, o 4 veces o 5 veces? –
"A diferencia del uso de la tarea Exec para iniciar MSBuild.exe, esta tarea utiliza el mismo proceso de MSBuild para compilar los proyectos secundarios. La lista de destinos ya construidos que se pueden omitir se comparte entre las compilaciones padre e hijo. más rápido porque no se crea un nuevo proceso de MSBuild ". Así que supongo que foo.dll se compilará una vez, pero no estoy seguro. –
¿Cuál es la línea de comando necesaria para construir esto? –