asp.net visual-studio-2008 msbuild publish

asp.net - Replicar VS2008 "Publicar sitio web" desde la línea de comandos



visual-studio-2008 msbuild (11)

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

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

Busqué en Google esto y encontré un montón de cosas relacionadas con MSBuild, pero todo parece referirse a las soluciones presentadas como aplicaciones web ASP.NET:

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 los sitios web de ASP.NET, pero descubrí que recibo un error al intentar compilar con 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 intento publicar (heredada, no la mía) no tiene archivos .csproj (donde podría importar el objetivo _CopyWebApplication desde C: / Archivos de programa (x86) / MSBuild / Microsoft / VisualStudio / v9.0 / WebApplications / Microsoft.WebApplication.targets)

Quizás esta es una diferencia de Visual Studio 2005/2008?

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

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

Muchas gracias


Agregue 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" />

Cambie ".. / 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

Luego puede copiar esos archivos donde desee con xcopy:

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

Deberias hacer eso.


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

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í se construyen a:

  • C: / Project / AdminWebSite / AdminWebSite.sln
  • C: / Project / AdminWebSite / Admin.Web / Admin.Web.csproj

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>


El error que recibió (C: / dev / T & A / TAWeb.sln: error MSB4057: el objetivo "_CopyWebApplication" no existe en el proyecto) se debe a dos problemas. Primero: debe llamarse a _CopyWebApplication de destino en un archivo de proyecto WebApplication, no 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. Utilice la tarea AspNetCompiler MSBuild para publicar un sitio web.

Cuando publica un sitio web en Visual Studio 2008, la segunda línea de salida es "Sitio web de precompilación". Las opciones visual studio se muestran para publicar un mapa de sitio web directamente en las opciones para AspNetCompiler y Aspnet_compiler.exe .

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


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

Comando para publicar sitio web con configuraciones predeterminadas

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

Referencia

1) Consulte Contenido de la comunidad titulado Desea publicar un sitio, pero no tiene Visual Studio, entonces ... en http://msdn.microsoft.com/en-us/library/20yh9f1b(classic).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) Consulte "Herramienta de compilación ASP.NET (Aspnet_compiler.exe)" en http://msdn.microsoft.com/en-us/library/ms229863.aspx .

3) Siguiente fragmento de Tutorial: Implementación de una aplicación web ASP.NET mediante XCOPY en http://msdn.microsoft.com/en-us/library/f735abw9.aspx

Como alternativa al uso de la herramienta de línea de comandos XCOPY, que es compatible con todas las versiones de .NET Framework, puede usar la nueva herramienta .NET Framework 2.0 ubicada en% SystemRoot% / Microsoft.NET / Framework / version 2 o posterior / Aspnet_compiler.exe para compilar e implementar su aplicación web. Para obtener más información, vea http://msdn.microsoft.com/en-us/library/ms229863.aspx .

4) Siguiente fragmento de Cómo: Precompilar los sitios web de ASP.NET para la implementación en http://msdn.microsoft.com/en-us/library/ms227976.aspx .

Si su sitio web no es una aplicación de Servicios de información de Internet (IIS) y, por lo tanto, no tiene ninguna entrada en la metabase de IIS, use el siguiente valor para el modificador -v.

aspnet_compiler -p physicalOrRelativePath -v / targetPath

En este caso, el parámetro physicalOrRelativePath se refiere a la ruta del directorio totalmente calificado en el que se encuentran los archivos del sitio web, o una ruta relativa al directorio actual. El operador de período (.) Está permitido en el parámetro physicalOrRelativePath. El modificador -v especifica una raíz que el compilador utilizará para resolver las referencias raíz de la aplicación (por ejemplo, con el operador tilde (~)). Cuando especifica el valor de / para el modificador -v, el compilador resolverá las rutas utilizando la ruta física como raíz.


Esta combinación "mágica" hace lo que estás buscando. ) Solo me llevó dos días 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


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 comencé a trabajar para comparar los archivos del proyecto. Lo que encontré fue que la sección del objetivo de compilación incluye al final del proyecto los archivos eran diferentes.

Un proyecto (que estaba funcionando) se creó utilizando una versión más nueva de Visual Studio. El otro (que NO estaba funcionando) se creó 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 aparecieron versiones más nuevas de Visual Studio.

En la parte inferior del archivo de 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 que causaba problemas.

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

Si bien esta no es una solución directa al problema inicial definido en este hilo, espero que esto ayude a algunas de las otras personas que tropezaron con este hilo, buscando problemas similares, solo con proyectos de aplicaciones web reales.


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

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

Si todavía no funciona, házmelo saber y puedo enviarte mi archivo bat, ese kicks del script msbuild, que hace el svn get, crea el archivo assembly.info, implementa el sitio web y finalmente ejecuta un http get en la página de inicio del sitio, solo para asegurarse de que se haya creado e implementado correctamente.

Espero que ayude a Rihan


No hay nada mágico acerca de la función "Publicar ..." que no podría recrear por su cuenta, especialmente porque tiene como objetivo un recurso compartido de archivos de red.

En esencia, todo lo que hace es copiar sus archivos de un lugar a otro. Usando NAnt, puede llevarlo a cabo con una tarea de copy o puede usar una tarea exec para llamar a xcopy Si está usando una herramienta de compilación que no sea NAnt, estoy seguro de que hay soporte para tareas similares.

Si desea dejar atrás el código sin procesar y la información de depuración, puede excluir los archivos que finalizan con .cs o .pdb. Tanto la copia como la copia de NAnt proporcionan formas sencillas de hacerlo.


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

Instalé WinSCP para hacer el trabajo ftp y luego solo 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 comando, hago lo siguiente, sin embargo, hago esto en el servidor web en lugar de cargarlo:

C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_compiler -p "D:/<mycompany>/Backedup/Web Sites/<mysite/Root" -v /


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 /