visual studio 2010 - tutorial - MSBuild 2010: ¿cómo publicar una aplicación web en una ubicación específica(nant)?
visual studio code ejemplos (3)
Creo que estás usando la propiedad incorrecta. Pruebe la propiedad OutDir en su lugar.
<arg value="/property:OutDir=C:/dev/build/Output/Debug/" />
Personalmente, llamo directamente a MsBuild.exe en lugar de usar la etiqueta msbuild:
<exec program="${MSBuildPath}">
<arg line=''"${ProjectFile}"'' />
<arg value="/target:_CopyWebApplication" />
<arg value="/property:OutDir=${LocalDeployPath}/" />
<arg value="/property:WebProjectOutputDir=${LocalDeployPath}" />
<arg value="/property:Configuration=${SolutionConfiguration}" />
<arg value="/verbosity:normal" />
<arg value="/nologo" />
</exec>
MSBuildPath : la ruta a MsBuild.exe (le permite apuntar a cualquier versión de framework que desee)
ProjectFile - La ruta relativa a su archivo de proyecto
LocalDeployPath : la carpeta local donde se superará todo. Su script de copia usará también usar esto como el directorio de origen.
SolutionConfiguration - Release, Debug
Intento que MSBuild 2010 publique una aplicación web en una ubicación específica. Puedo hacer que publique el paquete de implementación en una ruta particular, pero el paquete de implementación agrega su propia ruta que cambia.
Por ejemplo: si le digo que publique en C:/dev/build/Output/Debug
, los archivos web reales terminan en C:/dev/build/Output/Debug/Archive/Content/C_C/code/app/Source/ControllersViews/obj/Debug/Package/PackageTmp
Y la parte C_C
de la ruta cambia (no estoy segura de cómo elige esta parte de la ruta).
Esto significa que no puedo simplemente crear una secuencia de comandos desde la ubicación de publicación.
Estoy usando este comando nant / msbuild en este momento:
<target name="compile" description="Compiles">
<msbuild project="${name}.sln">
<property name="Platform" value="Any CPU"/>
<property name="Configuration" value="Debug"/>
<property name="DeployOnBuild" value="true"/>
<property name="DeployTarget" value="Package"/>
<property name="PackageLocation" value="C:/dev/build/Output/Debug/"/>
<property name="AutoParameterizationWebConfigConnectionStrings" value="false"/>
<property name="PackageAsSingleFile" value="false"/>
</msbuild>
¿Alguna idea sobre cómo hacer que envíe los archivos web directamente a una ubicación específica?
Si está utilizando una aplicación web VS2010 (a diferencia de un proyecto de sitio web), considere configurar las configuraciones de Paquete / Publicar web en su proyecto y compilar el objetivo ''Proyecto'' en su script nant.
Muchos jugosos msdeploy bondad y antecedentes aquí: http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx
En mis scripts nant, ejecuto los siguientes comandos de msbuild:
<if test="${property::exists(''basename'')}">
<exec program="${msbuild.location}" workingdir="${project::get-base-directory()}">
<arg value="/p:Configuration=${configuration}" />
<arg value="/logger:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,${msbuild.logger.dll}" if="${nunit.formatter.type == ''Xml''}"/>
<arg value="/noconsolelogger" if="${nunit.formatter.type == ''Xml''}"/>
<arg value="${basename}.sln"/>
</exec>
</if>
...
<if test="${property::exists(''basename'')}">
<exec program="${msbuild.location}" workingdir="${project::get-base-directory()}/${basename}">
<arg value="/p:Configuration=${configuration}" />
<arg value="/t:Package" />
<arg value="/logger:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,${msbuild.logger.dll}" if="${nunit.formatter.type == ''Xml''}"/>
<arg value="/noconsolelogger" if="${nunit.formatter.type == ''Xml''}"/>
<arg value="${basename}.csproj"/>
</exec>
</if>
Mi variable básica da el nombre tanto del archivo de solución VS (.sln) como del archivo de proyecto (.csproj) para la aplicación web. Prefiero la implementación del archivo zip como se muestra en la configuración de mi proyecto:
Hay una peculiaridad adicional. Si instala MSDeploy versión 2.0 en el equipo de destino, el archivo .deploy.cmd se debe editar para cambiar el número de versión de MSDeploy de la siguiente manera:
Cambio
for /F "usebackq tokens=2*" %%i in (`reg query "HKLM/SOFTWARE/Microsoft/IIS Extensions/MSDeploy/1" /v InstallPath`) do (
A
for /F "usebackq tokens=2*" %%i in (`reg query "HKLM/SOFTWARE/Microsoft/IIS Extensions/MSDeploy/2" /v InstallPath`) do (
msbuild /t:Build;PipelinePreDeployCopyAllFilesToOneFolder /p:Configuration=Release;_PackageTempDir=C:/temp/somelocation;AutoParameterizationWebConfigConnectionStrings=false MyProject.csproj
Script NAnt correspondiente:
<msbuild project="MyProject.csproj" target="PipelinePreDeployCopyAllFilesToOneFolder">
<property name="Configuration" value="Release" />
<property name="_PackageTempDir" value="C:/temp/somelocation" />
<property name="AutoParameterizationWebConfigConnectionStrings" value="false" />
</msbuild>
Referencias
- Simular la funcionalidad "Publicar en carpeta" en Visual Studio 2010
- Team Build + Web Deployment + Web Deploy + VS 2010 = Bondad
Véase también Team Build: Publicar localmente con MSDeploy