La historia hasta ahora
Tengo una buena solución con un proyecto de aplicación de escritorio, un par de proyectos de biblioteca, y un par de proyectos de herramientas de desarrollo (también aplicaciones de escritorio). Por el momento, mi servidor de compilación emite todo el código en uno OutputPath
. Así que terminamos con¿Por qué MSBuild no compilará un proyecto con un punto en el nombre?
drop-x.y.z\
Company.MainApplication.exe <-- main application
Company.MainApplicationCore.dll <-- libraries
Helper.exe <-- developer tools
Grapher.exe
Parser.exe
... <-- the rest of the output
Pero, estamos creciendo y las personas fuera de nuestro equipo quieren acceso a nuestras herramientas. Entonces quiero organizar la salida. Decidí que lo que nosotros queremos es una diferente OutputPath
por proyecto ejecutable
drop-x.y.z\
Company.MainApplication\
Company.MainApplication.exe <-- main application
Company.MainApplicationCore.dll <-- libraries
... <-- application specific output
Helper\
Helper.exe <-- developer tools
... <-- tool specific output
Grapher\
Grapher.exe
...
Parser\
Parser.exe
...
lo que hice
me encontré con este simple comando. Me gusta porque conserva todo el contexto Solution-dir de Solution que hace que msbuild sea un problema.
msbuild /target:<ProjectName>
Por ejemplo, la raíz de mi solución como un directorio de trabajo, que yo llamaría
PS> msbuild /target:Helper /property:OutputPath="$pwd\out\Helper"
Estoy probando esto desde PowerShell, por lo que $pwd
resuelve la ruta completa al directorio de trabajo, o la raíz de la solución en este caso. Obtengo la salida que deseo.
Sin embargo, cuando ejecuto este comando
PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
me sale el siguiente salida de error (no hay más información, me encontré con /verbosity:diagnostic
)
El objetivo "Company.MainApplication" no existir en el proyecto.
lo que necesito
el comando falla en cualquier proyecto con un punto o puntos en el nombre. Intenté con muchas combinaciones de directorios y propiedades de trabajo. Intenté varias formas de escapar de los valores de la propiedad. También intenté ejecutar el comando desde un <Task>
en un archivo de objetivos.
necesito saber ya sea
A) ¿Cómo solucionar este comando para trabajar la propiedad
B) ¿Cómo lograr el mismo resultado con una mínima fricción
Aprecio esta _correcta_ respuesta en gran medida, pero ¿por qué? ¿Por qué es esta la respuesta? –
¡Buena pregunta! La razón por la que lo sé es porque todas las propiedades del sistema en TeamCity que se pasan a MsBuild utilizan el guión bajo en lugar del punto. Por ejemplo, {build.vcs.number.1} en Ant se convierte en $ (build_vcs_number_1) en MsBuild. Quizás MSFT simplemente decidió que el punto debería convertirse en un carácter reservado, debido a la sintaxis de las referencias de grupo de elementos, p. % myItem.filename% –