visual studio - Utilizando MSBuild.exe para "Publicar" un proyecto ASP.NET MVC 4 con la línea cmd
visual-studio asp.net-mvc-4 (4)
Estoy buscando un comando para ejecutar contra el MSBuild.exe
que solo toma un proyecto de MVC 4 y lo publica en un directorio determinado.
Por ejemplo,
MSBuild <solution>/<project>.csproj -publish -output=c:/folder
Esta es obviamente una sintaxis incorrecta. Estoy tratando de simplificar mi pregunta.
Esta pregunta habla de un XML de compilación, pero no estoy tratando de hacer nada con tanto detalle.
Simplemente estoy tratando de hacer un despliegue.
Más abajo en esa pregunta , alguien habla de "MSDeploy". Puedo ver eso, ¿pero es la única opción? No tengo la capacidad de instalar implementación web en el servidor. En ese caso, todo lo que realmente necesito hacer es "Publicar" y enviar los contenidos del proyecto publicado a un directorio determinado en el servidor / sistema de archivos.
¿Alguien tiene un trazador de líneas que puedo utilizar?
¿Debo usar MSDeploy?
¿Requiere MSDeploy que la implementación web esté instalada en el servidor?
¿No es necesario configurar el despliegue web en el servidor para configurar algunos puertos, permisos e instalar algunos complementos de IIS?
Me encantaría simplemente ejecutar algo simple.
Con los proyectos web que necesita construir, como se indicó anteriormente, pero también necesita empaquetar / copiar. Usamos una copia de archivo, en lugar de la "publicación" ...
También; utilizamos DEBUG / RELEASE para construir el sitio web; pero luego los entornos reales, es decir, "QA" o "PROD" para manejar el web.config se transforman.
Entonces lo construimos inicialmente con RELEASE y luego lo empaquetamos con QA, en el ejemplo a continuación.
<PropertyGroup>
<SolutionName>XXX.Website</SolutionName>
<ProjectName>XXX.Website</ProjectName>
<IisFolderName>XXX</IisFolderName>
<SolutionConfiguration>QA</SolutionConfiguration> <!--Configuration will be set based on user selection-->
<SolutionDir>$(MSBuildThisFileDirectory)..</SolutionDir>
<OutputLocation>$(SolutionDir)/bin/</OutputLocation>
<WebServer>mywebserver.com</WebServer>
</PropertyGroup>
<Target Name="BuildPackage">
<MSBuild Projects="$(SolutionDir)/$(SolutionName).sln" ContinueOnError="false" Targets="Clean;Rebuild" Properties="Configuration=Release" />
<MSBuild Projects="$(SolutionDir)/$(ProjectName)/$(ProjectName).csproj" ContinueOnError="false" Targets="Package" Properties="Configuration=$(SolutionConfiguration);AutoParameterizationWebConfigConnectionStrings=False" />
</Target>
<Target Name="CopyOutput">
<ItemGroup>
<PackagedFiles Include="$(SolutionDir)/$(ProjectName)/obj/$(SolutionConfiguration)/Package/PackageTmp/**/*.*"/>
</ItemGroup>
<Copy SourceFiles="@(PackagedFiles)" DestinationFiles="@(PackagedFiles->''//$(WebServer)/$(IisFolderName)/$(SolutionConfiguration)/%(RecursiveDir)%(Filename)%(Extension)'')"/>
</Target>
Asi que;
- Configura tus propiedades
- Llamar al objetivo BuildPackage
- Llame al objetivo CopyOutput ¡Y listo!
Crea 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 perfecto:
msbuild Myproject.sln /t:Rebuild /p:outdir="c:/outproject//" /p:Configuration=Release /p:Platform="Any CPU"
En VS 2012 (así como las actualizaciones de publicaciones disponibles en Azure SDK para VS 2010), hemos simplificado la publicación de líneas de comando para proyectos web. Lo hemos hecho mediante el uso de perfiles de publicación.
En VS para un proyecto web, puede crear un perfil de publicación utilizando el diálogo de publicación. Cuando crea ese perfil, se almacena automáticamente en su proyecto en Propiedades / Perfiles de publicación. 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 a 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. Yo 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 comando. FYI no todos publican la publicación de línea de comando de soporte de método (es decir, FTP / FPSE).
Para su información, si está compilando .csproj / .vbproj en lugar de .sln y está usando VS 2012, también debe pasar en /p:VisualStudioVersion=11.0
. Para más detalles sobre por qué ver http://sedodream.com/2012/08/19/VisualStudioProjectCompatabilityAndVisualStudioVersion.aspx .