Estoy buscando un comando para ejecutarlo MSBuild.exe
que solo toma un proyecto MVC 4 y lo publica en un directorio determinado.
Por ejemplo,
MSBuild <solution>/<project>.csproj -publish -output=c:/folder
Obviamente, esta es una sintaxis incorrecta. Intento simplificar mi pregunta.
Esta pregunta habla de un XML de compilación, pero no estoy tratando de hacer nada con tantos detalles.
Simplemente estoy tratando de hacer una implementación.
Más abajo en esa pregunta , alguien habla de "MSDeploy". Puedo investigar eso, pero ¿es la única opción? No tengo la capacidad de instalar la implementación web en el servidor. En cuyo caso, todo lo que realmente necesito hacer es "Publicar" y enviar el contenido del proyecto publicado a un directorio determinado en el servidor / sistema de archivos.
¿Alguien tiene un forro que pueda usar?
¿Tengo que usar MSDeploy?
¿MSDeploy requiere que la implementación web esté instalada en el servidor?
¿No es necesario configurar la implementación web en el servidor para configurar algunos puertos, permisos e instalar algunos complementos de IIS?
Me encantaría ejecutar algo simple.
fuente
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>
fuente
El siguiente comando funciona perfectamente:
msbuild Myproject.sln /t:Rebuild /p:outdir="c:\outproject\\" /p:Configuration=Release /p:Platform="Any CPU"
fuente
Encontré que la respuesta fue implementar la configuración predeterminada, es decir, depurar. MSBuild parece ignorar la configuración seleccionada en el perfil de publicación. En consecuencia, cambié el comando para especificar la configuración correcta para la implementación ...
msbuild mysln.sln /p:Configuration=[config-name] /p:DeployOnBuild=true /p:PublishProfile=[profile-name]
donde config-name = Release o alguna otra configuración de compilación que haya creado
fuente
Con los proyectos web, debe compilar, como se indicó anteriormente, pero luego también debe empaquetar / copiar. Usamos una copia de archivo, en lugar de "publicar" ...
También; utilizamos DEBUG / RELEASE para construir el sitio web; pero luego entornos reales, es decir, "QA" o "PROD" para manejar las transformaciones web.config.
Así que lo construimos inicialmente con RELEASE y luego lo empaquetamos con QA, en el siguiente ejemplo.
<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>
Entonces;
fuente