¿Cómo usar la línea de comandos de msbuild para implementar el proyecto del sitio web VS2012 sin precompilarlo?


He heredado un proyecto de sitio web VS2012 muy grande (no aplicación web) y estoy tratando de automatizar su implementación. Hay toneladas de referencias circulares en el proyecto para que se precompile usando aspnet_compiler.exe Tengo que activar fixednames. El problema con eso es que hace que la compilación tome aproximadamente 20 minutos en mi quad core, 16gb ram, ssd developer machine. El desarrollador anterior no tenía que lidiar con esto, ya que simplemente copiaba toda la fuente en la web de producción servidor.

Así que antes de abordar el problema de las referencias circulares quiero al menos desplegar automáticamente el proyecto usando msdeploy. Puedo usar los perfiles de publicación dentro de visual studio y hace exactamente lo que quiero:

  1. Construye las DLL referenciadas y las agrega al proyecto.
  2. Hace la web.config transforma.
  3. Ni siquiera intenta construir el sitio web, sino solo paquetes en un archivo zip para mí.

Lo que no puedo entender para mi vida es cómo obtener MSBuild.exe para hacer exactamente lo mismo!

MSBuild.exe WebProject.vs2012.sln /m /T:Build 
    /p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy

El comando anterior todavía intenta ejecutar aspnet_compiler que no es lo que quiero. El perfil de publicación dice que no debe ser precompilado... pero en los registros lo veo ejecutándolo.

Entonces: ¿Cómo puedo usar msbuild para implementar un Proyecto de Sitio Web sin precompilarlo?

Author: mlhDev, 2013-02-11

2 answers

Para el proyecto de sitio web, el proceso de publicación no se inserta en el proceso de compilación. Para el proyecto de sitio web, ya que no hay un proceso de construcción formal, no había nada que realmente extendiéramos.

Nota: el contenido siguiente requiere tener VS 2012 (o VS2010 para el caso) y el Azure SDK además de eso. Las características no se incluyeron en la caída de RTM de VS2012.

Después de crear un perfil de publicación en VS se crean los siguientes:

  1. A publicar perfil (.archivo pubxml) bajo App_Data/PublishProfiles
  2. A website.publishproj en la raíz del sitio web

El propósito del website.publishproj es facilitar la publicación en línea de comandos. Es un relleno para el .csproj/.vbproj que normalmente se obtiene cuando se utiliza un Proyecto de Aplicación Web.

Si desea automatizar la publicación, puede usar un comando como el siguiente.

msbuild.exe website.publishproj /p:DeployOnBuild=true 
   /p:PublishProfile=<profile-name-no-extension> /p:VisualStudioVersion=11.0

No debería tener que especificar qué destinos invocados.

Con respecto al mensaje en VS que el sitio es estar pre-compilado, eso es un error. Se ejecuta a través de una precompilación, pero la publicación utiliza la configuración en el perfil. Ese error debería haberse solucionado en Visual Studio Update 1 . Después de instalar que no debe ver el paso de pre-compilación no necesario. Por favor, avísame si aún ves eso.

 52
Author: Sayed Ibrahim Hashimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-14 12:28:26

Si bien la respuesta de Sayed Ibrahim Hashimi me ayudó un poco, aquí está lo que encontré necesario para VS2012:

Después de instalar el SDK de Azure, creé un perfil de publicación de archivo, que creó una carpeta PublishProfiles en la carpeta Properties de mi proyecto. Dentro de esta nueva carpeta, se crearon dos archivos xml llamados my_sample_PublishProfile_Foo.pubxml y my_sample_PublishProfile_Foo.pubxml.user.

Usando el .pubxml, puedo publicar con msbuild así:

c:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "C:\...\UI.csproj" /p:DeployOnBuild=true /p:PublishProfile="C:\...\PublishProfiles\my_sample_PublishProfile_Foo.pubxml"  /p:VisualStudioVersion=11.0

Recuerde ejecutar el archivo por lotes que contiene este script con Privilegios de administrador.

 1
Author: callisto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-09 14:31:35