2011-04-16 25 views
6

En Visual Studio 2010, sabe cómo puede cambiar su configuración (depuración, versión, etc.), haga clic derecho en un proyecto en el explorador de soluciones, haga clic en publicar y copie todos los archivos importantes del proyecto de aplicación web para la configuración seleccionada a una carpeta de destino junto con un web.config transformado xdt? Bien, estoy buscando el equivalente de MSBUILD exactamente de eso.Visual Studio 2010: ¿Cómo publicar una aplicación web ASP.NET en una carpeta de destino con MSBUILD?

Mi reto para usted: Proporcione la UNA LÍNEA que necesito ejecutar en mi símbolo del sistema para lograr esto. No hay programas de terceros. No hay videos tutoriales. Solo un comando sencillo y directo que puedo copiar literalmente de su respuesta, pegarlo en una ventana de comandos, modificar según sea necesario para dar soporte a la estructura de mi directorio y luego presionar enter.

De lo contrario, quizás alguien podría proporcionar un enlace a una referencia completa de MSBUILD mostrando cada comando, interruptor y valor que puedo usar en la línea de comando.

Respuesta

6

Coloque el siguiente para ProjectPublish.MSBuild.xml archivo (modificar PropertyGroup según sea necesario):

<?xml version="1.0" encoding="utf-8" ?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Publish"> 
    <PropertyGroup> 
     <ProjectFile>Path\To\Web.csproj</ProjectFile> 
     <PublishDir>Path\For\Publish\Output</PublishDir> 
     <TempDir>Path\To\Temp\Folder</TempDir> 
     <BuildConfig>Release|Debug</BuildConfig> 
    </PropertyGroup> 

    <Target Name="Publish"> 
     <MSBuild Projects="$(ProjectFile)" 
       Properties="Configuration=$(BuildConfig);WebProjectOutputDir=$(PublishDir);OutDir=$(TempDir)\;BuildingProject=true" 
       Targets="ResolveReferences;_CopyWebApplication" /> 
    </Target> 
</Project>

Al llamar a este desde la línea de comandos (o .bat archivo) debe hacer el truco:

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ProjectPublish.MSBuild.xml 
+0

Nunca antes había visto este tipo de cosas. ¿Acabo de agregar ese archivo XML al proyecto? Actualmente no tengo ese archivo XML. – oscilatingcretin

+0

Es un archivo XML que MSBuild entiende y puede procesar. Sus archivos de proyecto y solución son de la misma raza.Tener esos archivos cerca/en su solución hace la vida más fácil – Ramunas

+0

Así que lo intenté y la publicación parece funcionar. Sin embargo, no parece aplicar transformaciones. Cuando publico manualmente, mi web.config se transforma correctamente. ¿Alguna idea de lo que puedo hacer? – oscilatingcretin

0

he encontrado la solución Estaba buscando después de todos estos meses here

En caso de que el enlace de arriba vaya mal, aquí está el flaco de lo que t dice:

Descargue y luego edite su archivo de proyecto. Busque la línea donde está importando Microsoft.WebApplication.targets. Se verá así:

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

Debajo de esa línea, la pasta en este XML:

<Target Name="PublishToFileSystem" DependsOnTargets="PipelinePreDeployCopyAllFilesToOneFolder"> 
    <Error Condition="'$(PublishDestination)'==''" Text="The PublishDestination property must be set to the intended publishing destination." /> 
    <MakeDir Condition="!Exists($(PublishDestination))" Directories="$(PublishDestination)" /> 

    <ItemGroup> 
     <PublishFiles Include="$(_PackageTempDir)\**\*.*" /> 
    </ItemGroup> 

    <Copy SourceFiles="@(PublishFiles)" DestinationFiles="@(PublishFiles->'$(PublishDestination)\%(RecursiveDir)%(Filename)%(Extension)')" SkipUnchangedFiles="True" /> 
</Target> 

Ahora, ejecute esto en un símbolo del sistema dentro de la misma carpeta que el archivo de proyecto:

msbuild TestWebApp.csproj "/p:Platform=AnyCPU;Configuration=Debug;PublishDestination=C:\pub" /t:PublishToFileSystem

Recuerde especificar la ruta a MSBUILD en el comando o agregue la ruta a su ruta global variab ambiental le (que es lo que hice). En mi máquina, fue aquí:

C:\Windows\Microsoft.NET\Framework\v4.0.30319

Para probar esto, puse una configuración transformar en mi Web.Release.config añadir una clave AppSetting (si lo hace, asegúrese de que el nodo es AppSettings presente en su archivo de configuración base o obtendrá un error). Cuando utilicé el comando anterior para construir la configuración de depuración, la clave no estaba presente en el archivo de configuración publicado como se esperaba. Sin embargo, cuando utilicé la configuración de lanzamiento, la clave se agregó con éxito al archivo.

Realmente me gustaría que Microsoft no se hubiera ofuscado con esto. En cualquier caso, esta es la solución más simple que he encontrado en Internet. Espero que ayude al resto de ustedes.

+1

Sin marcar como respuesta. Aparentemente, esto no funciona bien cuando haces referencia a otro proyecto en tu aplicación web. Investigarlo y publicaré una actualización cuando encuentre una respuesta. – oscilatingcretin

Cuestiones relacionadas