tfs msbuild msdeploy tfs2012 publish-profiles

tfs - MSBuild falla con dos paquetes



msdeploy tfs2012 (1)

Cuando pasa propiedades a través de la línea de comando, son propiedades globales de MSBuild. Por eso, se pasan a cada proyecto dentro de un archivo .sln. Los proyectos web son los únicos que responden a esas propiedades específicas.

En su escenario, si tiene dos proyectos que desea compilar + publicar en un archivo .sln, deberá crear un perfil en cada proyecto web con el mismo nombre, diga "Mi Perfil". No es necesario que contengan la misma información, cada uno puede tener su propio conjunto único de configuraciones. Solo necesitan compartir un nombre.

Entonces cuando construyes

msbuild.exe mysolution.sln /p:DeployOnBuild=true /p:PublishProfile=MyProfile /p:VisualStudioVersion=11.0

Cuando se construye cada proyecto web, se invoca el proceso de publicación para MyProfile en ese proyecto.

Si tiene escenarios en los que desea especificar valores diferentes para PublishProfile, deberá crear un script MSBuild en lugar de compilar el archivo .sln. Hay algunas formas diferentes de resolverlo, pero todas involucran algo de MSBuild.

Renuncia

No use esta técnica para servidores en vivo ... pero es excelente si está publicando en una ubicación intermedia antes de la publicación final.

Si construye + publica más de 1 proyecto en una solución , puede publicar un proyecto cuando el otro ni siquiera compila . Esto se debe a que el proceso de publicación es en realidad una extensión del proceso de compilación. Aquí hay un ejemplo.

Tiene ProjectA y ProjectB en una solución, cuando construya con las propiedades anteriores se invocará ProjectA y se compilará y publicará. Luego pasará a ProjectB, que creará y publicará. La compilación para ProjectB puede fallar y ProjectA ya se habría publicado.

De acuerdo, este es un error fantástico. Tengo una solución de 2012 que ejecuta MSBuild en un servidor TFS 2012. Los parámetros pasados ​​al campo "Argumentos de MSBuild" en la plantilla de proceso de compilación son los siguientes:

/ p: DeployOnBuild = true / p: PublishProfile = ProfileForProjectA / p: PublishProfile = ProfileForProjectB /p:VisualStudioVersion=11.0

Y el error que recibí de TFS es ...

C: / Archivos de programa (x86) / MSBuild / Microsoft / VisualStudio / v11.0 / Web / Microsoft.Web.Publishing.targets (4435): el valor de PublishProfile se establece en ''ProfileForProjectA'', se espera que encuentre el archivo en '' C: / Builds / 1 / Solution / Solution / Sources / Solution / ProjectB / Properties / PublishProfiles / ProfileForProjectA.pubxml ''pero no se pudo encontrar.

En otras palabras, parecería que el servidor de compilación espera que cada perfil de publicación (* .pubxml) esté en cada carpeta PublishProfiles. El método de publicación para ambos proyectos es "Sistema de archivos".

Lo único que lo resuelve es agregar ProfileForProjectA a la carpeta PublishProfiles para ProjectB y viceversa, pero eso no parece una solución muy elegante. ¿Alguien puede reproducir este comportamiento? ¿Alguien tiene una solución más elegante? ¿Me estoy perdiendo de algo?

Gracias por adelantado.