Solución:
En VS 2012 (así como las actualizaciones de publicación disponibles en el SDK de Azure para VS 2010), hemos simplificado la publicación de línea de comandos para proyectos web. Lo hemos hecho utilizando Publicar perfiles.
En VS para un proyecto web, puede crear un perfil de publicación utilizando el cuadro de diálogo de publicación. Cuando crea ese perfil, se almacena automáticamente en su proyecto en Propiedades PublishProfiles. Puede usar el perfil creado para publicar desde la línea de comando con una línea de comando lo siguiente.
msbuild mysln.sln /p:DeployOnBuild=true /p:PublishProfile=<profile-name>
Si desea almacenar el perfil de publicación (archivo .pubxml) en alguna otra ubicación, puede pasar la ruta al PublishProfile.
Los perfiles de publicación son archivos de MSBuild. Si necesita personalizar el proceso de publicación, puede hacerlo directamente dentro del archivo .pubxml.
Si su objetivo final es pasar propiedades desde la línea de comando. Recomendaría lo siguiente. Cree un perfil de publicación de muestra en VS. Inspeccione ese perfil de publicación para determinar qué propiedades de MSBuild necesita pasar en la línea de comandos. Para su información, no todos los métodos de publicación admiten la publicación de línea de comandos (es decir, FTP / FPSE).
Para su información, si está compilando .csproj / .vbproj en lugar de .sln y está utilizando VS 2012, también debe pasar /p:VisualStudioVersion=11.0
. Para obtener más detalles sobre el motivo, consulte http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx.
Cree un archivo build.xml que se vea a continuación
Inicie el símbolo del sistema de Visual Studio
Ejecute msbuild build.xml
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">
<PropertyGroup>
<Build>$(MSBuildProjectDirectory)Build</Build>
<ProjectFile>MyProject.csproj</ProjectFile>
<ProjectName>MyProjectNameInVisualStudio</ProjectName>
<CopyTo>$(MSBuildProjectDirectory)CopyTo</CopyTo>
</PropertyGroup>
<Target Name="Build">
<RemoveDir Directories="$(Build)"/>
<MSBuild Projects="$(ProjectFile)" Properties="Configuration=Release;OutputPath=$(Build);OutDir=$(Build)/"></MSBuild>
<Exec Command="robocopy.exe $(Build)_PublishedWebsites$(ProjectName) $(CopyTo) /e /is
if %errorlevel% leq 4 exit 0 else exit %errorlevel%"/>
</Target>
</Project>
El siguiente comando funciona perfectamente:
msbuild Myproject.sln /t:Rebuild /p:outdir="c:outproject\" /p:Configuration=Release /p:Platform="Any CPU"