2012-06-07 14 views
6

En mi computadora portátil de desarrollo solo tengo VS2012 RC instalado, y puedo conectar con éxito la nueva plomería MSDeploy .pubxml (configuración DeployOnBuild y PublishProfile) de powershell (via psake) para implementar mi sitio web en nuestro servidor de prueba.¿Cómo puedo controlar qué versión de un archivo msbuild se usa entre .NET4 y 4.5RC?

Sin embargo, en mi servidor de compilación, que inicialmente había instalado SP1 de VS2010, y no tengo ahora , además, instalado el 2012 RC (no tengo otra se basa en esta máquina que todavía son .NET 4).

Al ejecutar el mismo script con exactamente los mismos parámetros, veo resultados diferentes entre mi máquina de desarrollo y el servidor de compilación. El comando que estoy corriendo es

exec { msbuild "Website\WebSite.csproj" /m p:DeployOnBuild=True /p:PublishProfile=MyTestProfile } 

En el servidor de compilación, esto no lo hace, de hecho desencadenante MSDeploy, sino que simplemente los bits de embalaje, que zip el sitio y hace que un paquete de implementación. Mi máquina selecciona con éxito el archivo pubxml y realiza una implementación exitosa.

Eventualmente, creo que he rastreado el problema hasta el archivo Microsoft.Web.Publishing.targets. En mi máquina dev sólo tengo

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Web 

pero el servidor tiene, además,

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web 

y parece que este archivo (sin el conocimiento de las cosas .pubxml) es lo que se utiliza allí.

¿Alguien tiene alguna idea de lo que necesito twiddle (preferiblemente dentro de mis propios archivos de msbuild para que no arruine nada más en el servidor de compilación para las compilaciones 4.0) para que msbuild recoja la versión v11.0 del archivo y, por lo tanto, utilizar mi archivo .pubxml?

Respuesta

12

Eso es interesante, debería estar recogiendo lo último (v11.0), parece que hay un error aquí. Esto está controlado por la propiedad MSBuild VisualStudioVersion.

A continuación, se detallan las reglas sobre cómo se completa este valor en tiempo de compilación. 1. Si VisualStudioVersion se define como una variable de entorno o una propiedad global (por ejemplo,/p: en la línea de comandos), eso gana. Así es como Dev11 & el símbolo del sistema Dev11 son siempre v11 - ambos definen VSV como una variable de entorno 1. De lo contrario, si hay un subconjunto de herramientas que coincida con la versión de solución equivalente (que actualmente es siempre la versión de formato de archivo - 1) , elija 1. De lo contrario, obtenga la versión predeterminada; 10.0 si se instala Dev10, versión de sub-conjunto de herramientas más actualizada instalada (actualmente siempre 11)

En su caso, debido a que se encuentra con un problema, puede pasar la propiedad /p:VisualStudioVersion=11.0 para asegurarse de que se usan los objetivos correctos.

+0

Gracias, pasando VisualStudioVersion = 11.0 lo ha solucionado. ¿Sería útil si le proporciono/v: resultado de diagnóstico de ambas máquinas sin la bandera para que pueda determinar mejor si se trata de un error real o algo que acabo de romper en mi servidor? –

+1

Sayed, parece que lo mismo está pasando con VS2013. He ejecutado esto en mi servidor de compilación y tuve que pasar = 12.0 para que se recojan los objetivos correctos de Azure ... –

+0

Tengo reglas de análisis de código personalizadas y las compilé contra VS2013 después de actualizar la solución hace 2 semanas. En todos los clientes, todo va bien hasta que hice una compilación de CI. Agregué el parámetro /p:VisualStudioVersion=12.0 en la construcción de CI y todo estaba bien de nuevo.Usamos un servidor de compilación TFS2010 SP1 y clientes RTM VS2013 –

Cuestiones relacionadas