18

Quiero saber cómo publicar desde PowerShell de la misma manera que puedo desde Visual Studio.Cómo hacer exactamente la misma funcionalidad que Publicar dentro del estudio visual de powershell

Cuando ejecuta Visual Studio con proyecto MVC, por ejemplo; luego haz clic derecho en el proyecto y selecciona "Publicar"; aparece un cuadro de diálogo que completa algunas configuraciones en el clic Publicar de nuevo. Magicamente empuja su sitio web como se esperaba. También crea un archivo para mantener esa configuración. projectName.Publish.xml.

Ese archivo es la razón por la que deseo poder utilizar esto exactamente de la misma manera. Hay un par de configuraciones que podrían manipularse en powershell para enviar la aplicación a múltiples sitios con diferentes configuraciones.

He mirado en "blanco msbuild: publicar", que sólo produce (ejecutar desde el directorio que contiene el .csproj):

MSBUILD : error MSB1009: Project file does not exist. 
Switch: target:publish 

He tratado "objetivo msbuild projectfile: publicar" que produce:

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: target:build 

También he observado varias variaciones de msdeploy. ¡No puede ser tan difícil !? Si puede hacer clic derecho en el estudio, debe haber algo que realice esa tarea.

Estoy empezando a preguntarme si esto requiere luna llena y cortar la cabeza de un pollo. (He pasado mucho tiempo en esto!)

** EDIT: He intentado la sugerencia de Lee:

msbuild target:publish Mvc.csproj 

que produce este error:

MSBUILD : error MSB1008: Only one project can be specified. 
Switch: Mvc.csproj 

For switch syntax, type "MSBuild /help" 

** EDIT: A partir de davee sugerencia, he intentado:

msbuild target:publish Mvc.csproj 

que produce este error:

MSBUILD : error MSB1009: Project file does not exist. 
Switch: target:publish=PassportHealth.PatientSimple.Mvc.csproj 

También fui de nuevo a la documentación para el objetivo de "Publicar" (http://msdn.microsoft.com/en-us/library/ms165431.aspx), que parece bastante claro que la sintaxis es:

msbuild target:publish 

Así que después de releer varias veces mi conclusión es la siguiente: la publicación el objetivo es para implementaciones con un solo clic de archivos .exe y no sitios web de MVC. He encontrado http://weblogs.asp.net/scottgu/archive/2010/09/13/automating-deployment-with-microsoft-web-deploy.aspx que habla sobre este asunto con bastante claridad. Sin embargo, todavía no veo cómo utilizar el archivo "publish.xml" mediante el comando msdeploy.

+3

opciones de línea de comandos en msbuild se especifican utilizando/opt: valor, de modo que llamar al destino de publicación se debe utilizar 'msbuild/t: Publicar proj_file.csproj'. – Lee

+0

Aquí hay un enlace a la descripción general de MSDN MSBUILD (VS2008): http://msdn.microsoft.com/en-us/library/ms171452.aspx – DaveE

Respuesta

20

Los archivos projectName.publish.xml solo se utilizan a través de Visual Studio para la publicación One-Click. Para MSBuild, debe pasar un conjunto de parámetros directamente en la línea de comandos (/ p: Param1 = value1; Param2 = value2; ...). Por ejemplo:

/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=InProc /p:MSDeployServiceUrl=localhost /p:DeployIisAppPath="Default Web Site/NewOrleansJazz" /p:UserName=domain\user /p:Password=myPassword (source)

Tenga en cuenta que en la vista previa VS11 (lanzado en la conferencia BUILD), hay un archivo nuevo en sustitución del projectName.publish.xml: MyPublishSettings.pubxml. Este archivo es básicamente una combinación del archivo publish.xml y el projectName.wpp.targets en uno (aunque también se divide para cada perfil en lugar de guardarlos todos en publish.xml, por ejemplo, TestSettings.pubxml, ProductionSettings.pubxml), y se puede utilizar desde la línea de comandos de una manera más simple usando msbuild MyProject.csproj /t:WebPublish /p:PublishProfile="myProfile"

[editar:] un par de notas re: la información en su mensaje:

  1. El error acerca única especificar un solo proyecto probablemente se deba a que el objetivo no está especificado correctamente. Además del nombre del proyecto, todos los parámetros pasados ​​a msbuild comienzan con un /, p. /t[arget]:foo /p[roperty]:var=value
  2. El objetivo de publicación en realidad no está relacionado con la publicación en la web. IIRC, está relacionado con la publicación de una aplicación OneClick. En VS2010, debe usar /t:build /p:DeployOnBuild=true para que los proyectos web utilicen las tareas de publicación (como se utilizó anteriormente). Nuevo en VS11 es el /t:WebPublish que también toma un conjunto más simple de parámetros, es decir, el archivo .pubxml que desea utilizar.
    • nota adicional: al crear un archivo de solución, /t:WebPublish fallará ya que el objetivo no está definido en el nivel de solución. Solo se puede usar directamente en el archivo de proyecto para su proyecto web. Todavía puede usar /p:DeployOnBuild=true en el nivel de solución a medida que el valor del parámetro se pasa a cada proyecto que se está creando, pero será ignorado por cualquier proyecto que no consuma ese valor.
+0

¡Gracias por la respuesta! Había descubierto cómo solucionarlo utilizando el comando autogenerado creado en el destino 'Paquete'. Eso es increíble sobre las cosas VS2011. Me he estado preguntando por qué mis configuraciones de compilación son responsables de las transformaciones web.config que me parecen más relacionadas con los entornos de implementación/publicación. – Mike

+0

Lo intenté hoy y casi funcionó. Tuve que cambiar 'MSDeployPublishMethod = WMSVC'. También tuve que agregar 'AllowUntrustedCertificate = True' porque es un servidor interno. HTH –

Cuestiones relacionadas