Replicar VS2008 "Publicar sitio web" desde la línea de comandos


Estoy tratando de replicar la funcionalidad exacta de este diálogo en Visual Studio 2008 en un script de compilación: texto alternativo http://i41.tinypic.com/1osl1f.png

Esto es un ASP.NET web sitio , no una aplicación web .

He buscado en Google alrededor de esto y encontré un poco de cosas relacionadas con MSBuild, pero todo esto parece referirse a soluciones presentadas como ASP.NET Web Aplicaciones:

Http://www.driebier.net/post/Using-MSBuild-to-deploy-visual-studio-2005-web-applications.aspx http://blog.donnfelker.com/post/TFS-Build-Not-Publishing-Web-Applications.aspx

Este artículo parece ser relevante para ASP.NET Sitios web, pero me parece que estoy recibiendo un error al tratar de construir utilizando esas sugerencias:

C:\dev\T&A>msbuild /t:_CopyWebApplication /property:OutDir=c:\temp\taweb\ /prope
rty:WebProjectOutputDir=c:\temp\taweb\

Microsoft (R) Build Engine Version 3.5.30729.1
[Microsoft .NET Framework, Version 2.0.50727.3074]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 22/04/2009 11:50:42.
Project "C:\dev\T&A\TAWeb.sln" on node 0 (_CopyWebApplication target(s)).
  Building solution configuration "Debug|.NET".
C:\dev\T&A\TAWeb.sln : error MSB4057: The target "_CopyWebApplication" does not
 exist in the project.
Done Building Project "C:\dev\T&A\TAWeb.sln" (_CopyWebApplication target(s)) --
 FAILED.


Build FAILED.

"C:\dev\T&A\TAWeb.sln" (_CopyWebApplication target) (1) ->
  C:\dev\T&A\TAWeb.sln : error MSB4057: The target "_CopyWebApplication" does n
ot exist in the project.

0 Warning(s)

1 Error(s)

Time Elapsed 00:00:00.06

La solución que estoy tratando de publicar (heredada, no la mía) no tiene .csproj archivos (donde I podría importar el destino _CopyWebApplication desde C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications \ Microsoft.Aplicación WEB.objetivos)

Tal vez esta es una diferencia Visual Studio 2005/2008?

De todos modos, siento que voy por el camino equivocado allí.

Esencialmente solo necesito lograr exactamente lo que hace el diálogo anterior, pero desde la línea de comandos.

Muchas Gracias

Author: Cerebrus, 2009-04-22

11 answers

El siguiente comando duplica el diálogo Publicar Sitio web con la configuración predeterminada.

Comando para Publicar Sitio Web con la configuración predeterminada

aspnet_compiler -nologo -v / -p "C:\WebSite1" -u "C:\TargetPath"

Referencia

1) Ver Contenido de la comunidad titulado Desea publicar un sitio pero no tiene Visual Studio entonces... en http://msdn.microsoft.com/en-us/library/20yh9f1b (clásico).aspx.

  • Microsoft Visual Studio 2005 > Símbolo del sistema de Visual Studio 2005
  • Microsoft Visual Studio 2008 > Símbolo del sistema de Visual Studio 2008
  • Microsoft. NET Framework SDK v2. 0 > Símbolo del sistema SDK

2) Véase "ASP.NET Herramienta de compilación (Aspnet_compiler.exe) " at http://msdn.microsoft.com/en-us/library/ms229863.aspx .

3) Siguiente extracto de Tutorial: ASP.NET Aplicación Web Usando XCOPY at http://msdn.microsoft.com/en-us/library/f735abw9.aspx

Como un alternativa al uso de XCOPY herramienta de línea de comandos, que es compatible por todas las versiones de. NET Framework, puede utilizar el nuevo. NET Framework 2.0 herramienta situada en %SystemRoot% \ Microsoft. NET \ Framework \ versión 2 o posterior \Aspnet_compiler.exe a compilar e implementar su Web aplicación. Para más información, véase ASP.NET Herramienta de compilación (Aspnet_compiler.exe) .

4) Siguiente extracto de Cómo: Precompilar ASP.NET Sitios Web para Despliegue en http://msdn.microsoft.com/en-us/library/ms227976.aspx .

Si su sitio web no es un Internet Aplicación de Servicios de Información (IIS) y por lo tanto no tiene entrada en el IIS metabase, utilizó el siguiente valor para el interruptor-v.

aspnet_compiler -p physicalOrRelativePath -v / targetPath

En este caso, el Parámetro physicalOrRelativePath se refiere a los plenamente cualificados ruta del directorio en el que se encuentra el sitio web se encuentran los archivos, o una ruta relativa a la corriente directorio. Periodo (. operador está permitido en el Parámetro physicalOrRelativePath. El - v switch especifica una raíz que el compilador usará para resolver aplicación-referencias raíz (para ejemplo, con el operador tilde ( ~ )). Cuando se especifica el valor de / for el conmutador-v el compilador resolver los caminos utilizando el físico camino como la raíz.

 38
Author: AMissico,
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
2009-10-29 01:43:55

Creo que estás buscando la tarea AspNetCompiler

<Target Name="PublishToIIS" DependsOnTargets="Publish">
    <AspNetCompiler    
            VirtualPath="$(IISVirtualPath)"
            TargetPath="$(IISTargetPath)"
            PhysicalPath="$(MSBuildProjectDirectory)/trunk/InternalAppCS/Web.UI/"
            Force="true"
            Debug="$(IISDebug)"
     />

</Target>
 6
Author: slf,
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
2009-04-22 11:35:13

Esta combinación "mágica" hace lo que estás buscando. ) Solo tomó dos días para obtener la combinación correcta para mi proyecto.) La clave es incluir el objetivo _CopyWebApplication y el objetivo ResolveReferences.

msbuild "/t:_CopyWebApplication;ResolveReferences;publish" /p:OutDir="C:\inetpub\wwwroot\[appname]\bin\" /p:WebProjectOutputDir="C:\inetpub\wwwroot\[appname]" c:\directory\[appname].csproj    
 6
Author: Brad Bruce,
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
2012-08-23 00:56:58

Añadir a su .archivo csproj:

<Target Name="AfterBuild">
<Message Text="Copying to Deployment Dir:" />
<Copy SourceFiles="@(Content)" DestinationFolder="..\PreCompiledWeb\%(Content.RelativeDir)" />
<CreateItem Include="$(OutputPath)\*">
    <Output TaskParameter="Include" ItemName="Binaries"/>
</CreateItem>
<Copy SourceFiles="@(Binaries)" DestinationFolder="..\PreCompiledWeb\bin" />

Change "..\PreCompiledWeb " para la carpeta en la que desea publicar o puede especificar una variable como: {(OutputFolder) que puede pasar

Luego vaya a la carpeta de su aplicación web y haga:

msbuild /t:Build

Entonces puedes copiar esos archivos donde quieras usando xcopy:

xcopy "..\PreCompiledWeb\*.*" "C:\MySite\" /e

Eso debería bastar.

 5
Author: ,
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
2009-09-10 21:47:00

Personalmente uso buildbot que ejecuta comandos para mí, tuve que crear un script VBS que realiza la carga para mí.

Instalé WinSCP para hacer el trabajo de ftp y luego simplemente escribí la carga:

Set WshShell = CreateObject("WScript.Shell")
sCmd1 = """C:\Program Files\WinSCP\winscp.com"" <myusername> /command ""option batch on"" ""option confirm off"" ""put " & DefaultPath & strResult & "\" & DefaultFileName & " /Usr/<myuser>/" & updateType & "/" & strResult & "/"" ""exit"""

Para precompilar el sitio web desde una línea de comandos hago lo siguiente, sin embargo lo hago en el servidor web en lugar de antes de subirlo:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -p "D:\<mycompany>\Backedup\Web Sites\<mysite\Root" -v /
 4
Author: Phil Hannent,
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
2009-04-23 11:23:18

He estado usando msbuild para exactamente lo que describe. ¿Ha intentado configurar la propiedad de esta manera?

 /property:"OutDir=c:\temp\taweb\;WebProjectOutputDir=c:\temp\taweb\"

Si todavía no funciona, hágamelo saber y puedo enviarle mi archivo bat, que patea el script msbuild, que hace el svn get, construye assembly.info archivo, implementar el sitio web y, finalmente, ejecuta un http get en la página de inicio del sitio, solo para asegurarse de que se construyó e implementó correctamente.

Espero que ayude Rihan

 4
Author: Rihan Meij,
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
2009-04-29 11:29:32

Estaba luchando con el mismo error (MSB4057: El objetivo "_CopyWebApplication" no existe en el proyecto.

Sí. Estaba usando un Proyecto de Aplicación Web (no un sitio web).

Estaba desconcertado porque tenía un proyecto que funcionaba y otro que no. Así que me senté con ExamDiffPro y me puse a trabajar comparando los archivos del proyecto. Lo que encontré fue que la sección de build target incluye en la parte inferior de los archivos del proyecto eran diferentes.

Un proyecto (que fue trabajo) fue creado usando una versión más reciente de Visual Studio. El otro (que NO funcionaba) fue creado hace años y se ha actualizado a lo largo de los años, a la versión actual con la que estoy trabajando. El proyecto actualizado, evidentemente, no se actualizó con los nuevos objetivos de compilación a medida que las versiones más recientes de Visual Studio estaban disponibles.

En la parte inferior del archivo del proyecto que estaba funcionando, encontré lo siguiente:

<Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />

<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets" />

La segunda línea de importación NO estaba en el proyecto, lo que estaba causando problemas.

Simplemente copié la importación desde el archivo de trabajo, y la pegué en la ubicación relativa en el archivo que no funciona, y ¡viola!

Si bien esto no es una solución directa al problema inicial definido en este hilo, espero que esto ayude a algunas de las otras personas que se toparon con este hilo, buscando problemas similares, solo con Proyectos de Aplicaciones Web reales.

 4
Author: Todd W. Powers,
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
2011-09-20 00:59:13

Aquí hay un pequeño script de PowerShell que crea una solución y luego publica un proyecto web a partir de ella.

El MSBuild es para.Net 3.5, así que cambie a "\v4.0\" si es necesario.

$build = "$env:windir\Microsoft.NET\Framework\v3.5\MSBuild.exe"

$SolutionPath = "C:\Projects\AdminWebSite"
$SolutionFile = "AdminWebSite.sln"
$WebProjectFile = "Admin.Web\Admin.Web.csproj"
$OutputPath = "C:\PublishedSites\Hosts\adminweb"

& $build "$SolutionPath\$SolutionFile" /t:rebuild
& $build "$SolutionPath\$WebProjectFile" "/t:ResolveReferences;_CopyWebApplication;publish" /p:OutDir="$OutputPath\bin\" /p:WebProjectOutputDir="$OutputPath"

Las "ResolveReferences" deben venir antes de "_CopyWebApplication" de lo contrario las dependencias desaparecerán.

Las rutas de ejemplo dadas aquí construyen a:

  • C:\Project\AdminWebSite\AdminWebSite.sln
  • C:\Project\AdminWebSite\Admin.Web \ Admin.Web.csproj
 3
Author: Iain Ballard,
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
2011-04-07 13:32:27

El error que recibiste (C:\dev\T&A\TAWeb.sln: error MSB4057: El objetivo "_CopyWebApplication" no existe en el proyecto) se debe a dos problemas. Primero: la aplicación _copyweb de destino debe invocarse en un archivo de proyecto de aplicación WEB, no en una solución. Segundo: un sitio web no tiene un archivo de proyecto, las aplicaciones web tienen archivos de proyecto.

El objetivo _CopyWebApplication solo se aplica a la publicación de un proyecto de aplicación WEB. Utilizar la tarea AspNetCompiler MSBuild debe utilizarse para publicar sitio.

Cuando se publica un sitio web en visual studio 2008, la segunda línea de salida es "Pre-compilar Sitio Web". Las opciones de visual studio se muestran para publicar un mapa de sitio web directamente a las opciones para el AspNetCompiler y Aspnet_compiler.exe .

Aunque no soy el primero aquí en decir "usar AspNet_compiler", pensé que describir las razones por las que podría ser útil. En una nota al margen, creo que el AspNet_compiler se puede utilizar para publicar una aplicación web, pero tengo que hacer más pruebas.

 2
Author: mcdon,
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
2010-10-27 17:26:10

Uso el archivo bat usando msbuild.exe (. net 3.5, vs 2008) para "publicar" mi sitio web (vbproj) en una carpeta.

% msBuildDir% \ msbuild "D:\Project1\Client\WebPresentation\ConsultaOperaciones.vbproj" / t:ResolveReferences;Rebuild /p:BuildingProject=true;OutDir=D:\Instalaciones\ultima\PublicacionWeb\OutDir\;WebProjectOutputDir=D:\Instalaciones\ultima\PublicacionWeb\WebProjectDir\

 1
Author: Kiquenet,
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
2011-07-20 18:16:55

No hay nada mágico en el "Publicar..."característica que no podía recrear por su cuenta, especialmente porque está apuntando a un recurso compartido de archivos de red.

En su núcleo, todo lo que está haciendo es copiar sus archivos de un lugar a otro. Usando NAnt, puedes lograr esto con una tarea copy o puedes usar una tarea exec para llamar a xcopy Si estás usando una herramienta de compilación que no sea NAnt, estoy seguro de que hay soporte para tareas similares.

Si quieres irte su código raw y la información de depuración detrás, puede excluir archivos que terminan con .cs or .ap. Tanto NAnt copy como xcopy proporcionan formas fáciles de hacer esto.

 -1
Author: Brad Tutterow,
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
2009-04-22 11:27:12