2011-02-10 13 views
38

Tengo una aplicación web Visual Studio 2010 MVC2 que estoy compilando a través de la línea de comando usando Hudson. Me gustaría hacer que Hudson publique una salida web, así que agregué las etiquetas DeployOnBuild = true y CreatePackageOnPublish = True a mi línea de comando.MSBuild DeployOnBuild = verdadero no publicado

es mi mandamiento:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
    /target:Clean,Build 
    /property:Configuration=Debug;DeployOnBuild=True;CreatePackageOnPublish=True; 
    [my project name.csproj] 

ejecución de esta orden en mi máquina de desarrollo (Windows 7) publica con éxito una salida web para \obj\Debug\Package\PackageTmp\. Pero al ejecutarlo en el servidor de Hudson (WS 2008) se compila con éxito, pero no se publica. Mismo comando, misma versión de MSBuild, mismo código fuente.

He intentado con el objetivo /t:Publish, lo que me da una respuesta de Saltar proyectos impredecibles, como he visto en las publicaciones de otras personas.

He intentado agregar las etiquetas DeployOnBuild=True y CreatePackageOnPublish=True a mi archivo de proyecto y sin cambios.

¿Alguna idea de por qué esto no se está publicando? ¿Estoy usando estas etiquetas incorrectamente? Estoy seguro de que hay algo aquí que simplemente no estoy viendo.

+2

¿Alguna vez descubrió esto? Estoy golpeando la misma pared en este momento. –

+0

Moví TeamCity a un nuevo servidor y todos los artefactos de las aplicaciones web eran emtpy zip para más de 50 proyectos. Los servicios normales y las aplicaciones de prueba fueron artefactadas muy bien ... he tratado de resolver este problema exacto durante más de 24 horas; ( – ppumkin

Respuesta

37

asumiendo que no tienen Visual Studio 2010 instalado en el servidor de Hudson, entonces puede ser que se echa en falta el archivo de publicación "blancos". Después de muchos golpes cuerpo a cuerpo, finalmente resolví esto.

Durante bastante tiempo he sabido que tenía que copiar el directorio

C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

desde mi máquina local con VS2010 a mi servidor para obtener el proyecto a compilación. Pero para conseguir que el proyecto también publicar que necesitaba para copiar también el directorio

C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web

Nota: En mi caso, actualmente estoy asignando esas carpetas a mi control de origen y cambiando el valor <MSBuildExtensionsPath32> en mi archivo csproj para que apunte a estas carpetas desprotegidas (de modo que hay un paso menos al preparar un servidor). Esto no es necesario para que funcione, pero es posible que desee considerar esto después de resolver su problema.

ACTUALIZACIÓN: Así que después de que hice lo anterior, la compilación se quejó de que no podía encontrar "Microsoft.Web.Deployment.dll". Para resolver esto, necesité instalar Microsoft Web Deploy v2.0 en el servidor , aunque solo estoy publicando en el sistema de archivos. Creo que puedo ver la lógica en esto.

ACTUALIZACIÓN: descubrí que la instalación de "Visual Studio 2010 Shell (integrado)" a través del instalador de la plataforma web de IIS instalará los objetivos de compilación necesarios. Esto parece un buen compromiso entre no tener toda la aplicación de Visual Studio instalada en su servidor y no copiar manualmente carpetas aparentemente arbitrarias a su servidor desde su máquina de desarrollo.

+1

Ya he hecho esto y sigo obteniendo los mismos resultados. DeployOnBuild aún se ignora. –

+0

¡Probé la Web Deploy 3.0 RC y trabajé como un encanto! Gracias –

+0

La actualización ya no es cierta: la instalación de VS 2013 Shell (Integrated) NO proporciona la carpeta "Web" requerida en la instalación de MSBuild. –

3

Parece que las condiciones para ejecutar objetivo de publicación no están satisfechas.

1) Puede tener diferentes caminos publicación

2) Condición para funcionar publicar objetivo es falso

verificar tanto de ellos llame a su comando con la bandera /v: diag. Busque por Haga clic en "Publicar" y trate de descubrir qué sucede realmente. Será parece

Target "ExecuteT4Templates: (TargetId:144)" in file "D:\App\App.csproj" from project "D:\App\App.csproj": 
Skipping target "ExecuteT4Templates" because all output files are up-to-date with respect to the input files. 
Input files: D:\App\App.exe\\App_Config\Configuration.tt;D:\App\App.exe\\App_Config\Debug.App.tt;obj\\Debug.t4lastbuild 
Output files: D:\App\App.exe\\App.config 
Done building target "ExecuteT4Templates" in project "App.csproj".: (TargetId:144) 
+1

Gracias por la idea/v: diag. Creo que nos estamos acercando. No se ve al igual que el objetivo "Publicar" recibe un golpe incluso cuando la implementación del paquete es exitosa. La primera indicación de algo diferente entre las dos salidas es que en la máquina que funciona, se mencionan las siguientes configuraciones. Esto está muy cerca del inicio de la implementación. salida: _CreatePackage = True _DeployOnBuild = True _PackageTempDir = obj \ Debug \ Package \ PackageTmp Antes de esto, no hay diferencias significativas entre las dos salidas Alguna idea sobre las condiciones para golpear estos ajustes – Thomas

+0

/v:.? diag definitivamente ayuda Me acerqué al problema ... – Ewert

1

Me encontré con esto con VS2012 - terminé por instalar herramientas de desarrollador web en el servidor de compilación y eso lo solucionó.

+4

¿De qué se trata exactamente de estas herramientas web develoepr? – iwo

+0

Son sus herramientas de desarrollo web en el menú de instalación de VS supongo –

1

Además de la respuesta de Brian Hinchey, encontré que también necesitaba agregar mi llamada de lote de msbuild con el parámetro adicional VisualStudioVersion para que la versión y ruta correctas en el agente de compilación (TeamCity en mi caso) a Microsoft.WebApplication .targets sería llamado. Sin este parámetro, el paso de implementación y publicación web no se completó y mi lote se completó con éxito con un código 0 devuelto haciendo el análisis muy difícil, incluso con el indicador/verbosity adjunto para 'depurar' la compilación. Este punto se hace por Sayed Ibrahim Hashimi en su sitio: http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx

El escenario para mi caso fue que tuve la compatibilidad de Visual Studio habilitada en mi proyecto web MVC para que pudiera abrir el proyecto en VS2010 o 2012 (como dice Sayed en el enlace de arriba), así que estoy desarrollando localmente en VS2012 mientras que el agente de desarrollo de TeamCity tiene la estructura web VS 2010 y los objetivos de implementación.

Cuestiones relacionadas