Tengo un proyecto ac # .Net 4.0 creado con VS2010 y ahora se accede con VS2012.
Estoy tratando de publicar solo los archivos necesarios de este sitio web en una ubicación de destino (C: \ builds \ MyProject [Archivos])
Mi estructura de archivos: ./ProjectRoot/MyProject.csproj ./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Estoy ejecutando lo siguiente a través de MSBuild:
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ MSBuild.exe ./ProjectRoot/MyProject.csproj / p: DeployOnBuild = true /p:PublishProfile=./ProjectRoot/Properties/PublishProfiles/FileSystemDebug.pubxml
Aquí está el xml en FileSystemDebug.pubxml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>FileSystem</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<ExcludeApp_Data>False</ExcludeApp_Data>
<publishUrl>C:\builds\MyProject\</publishUrl>
<DeleteExistingFiles>True</DeleteExistingFiles>
</PropertyGroup>
</Project>
El comportamiento resultante es:
- aquí se crea un archivo zip: ./ProjectRoot/obj/Debug/Package/MyProject.zip
- No se implementa nada en
<publishUrl>C:\builds\MyProject\</publishUrl>
WTF - el archivo zip que se crea es un desayuno de cerdos y está lleno de archivos que no son necesarios para la aplicación.
Cuando ejecuto este perfil de publicación a través de Visual Studio, se crea una carpeta en * C: \ builds \ MyProject * y contiene los artefactos exactos que quiero.
¿Cómo obtengo este resultado simple de msbuild?
fuente
Condition="false"
existe para compatibilidad con versiones anteriores. VS2010 requiere que exista esta importación, incluso si se omite debido a la condición falsa. Si vuelve a mirar, verá que csproj contiene otra importación para la$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets
que se resuelve en el archivo de destinos para la versión actual de Visual Studio.$(MSBuildToolsVersion)
la ruta de acceso a la cuenta para la versión adecuada VS:<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(MSBuildToolsVersion)\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
. Esto funcionó para mí en VS2015 Update 1.Encontré la respuesta aquí: http://www.digitallycreated.net/Blog/59/locally-publishing-a-vs2010-asp.net-web-application-using-msbuild
<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>
msbuild Website.csproj "/p:Platform=AnyCPU;Configuration=Release;PublishDestination=F:\Temp\Publish" /t:PublishToFileSystem
fuente
Todavía tuve problemas después de probar todas las respuestas anteriores (uso Visual Studio 2013). No se copió nada en la carpeta de publicación.
El problema fue que si ejecuto MSBuild con un proyecto individual en lugar de una solución, tengo que poner un parámetro adicional que especifique la versión de Visual Studio:
/p:VisualStudioVersion=12.0
12.0
es para VS2013, reemplácelo con la versión que use. Una vez que agregué este parámetro, simplemente funcionó.La línea de comando completa se ve así:
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Lo encontré aquí:
http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/command-line-deployment
Ellos afirman:
fuente
Me parece que su perfil de publicación no se está utilizando y está haciendo algunos paquetes predeterminados. Los destinos de Microsoft Web Publish hacen todo lo que está haciendo anteriormente, selecciona los destinos correctos según la configuración.
Conseguí que el mío funcionara sin problemas desde el paso TeamCity MSBuild, pero especifiqué una ruta explícita al perfil, solo tienes que llamarlo por su nombre sin .pubxml (por ejemplo, FileSystemDebug). Se encontrará siempre que esté en la carpeta estándar, que es la suya.
Ejemplo:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe ./ProjectRoot/MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=FileSystemDebug
Tenga en cuenta que esto se hizo utilizando las versiones de Visual Studio 2012 de los destinos de publicación web de Microsoft, normalmente ubicados en "C: \ Archivos de programa (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web". Consulte la carpeta de implementación para conocer los tipos de implementación específicos que se utilizan.
fuente
FYI: el mismo problema con la ejecución en un servidor de compilación (Jenkins con msbuild 15 instalado, impulsado desde VS 2017 en un proyecto web .NET Core 2.1).
En mi caso, fue el uso del destino "publicar" con msbuild lo que ignoró el perfil.
Entonces mi comando msbuild comenzó con:
msbuild /t:restore;build;publish
Esto desencadenó correctamente el proceso de publicación, pero ninguna combinación o variación de "/ p: PublishProfile = FolderProfile" funcionó para seleccionar el perfil que quería usar ("FolderProfile").
Cuando dejé de usar el destino de publicación:
msbuild /t:restore;build /p:DeployOnBuild=true /p:PublishProfile=FolderProfile
Pensé (tontamente) que no haría ninguna diferencia, pero tan pronto como usé el interruptor DeployOnBuild, recogió correctamente el perfil.
fuente
En realidad, fusioné todas sus respuestas con mi propia solución sobre cómo resolver el problema anterior:
El resultado es así:
msbuild /t:restore /t:build /p:WebPublishMethod=FileSystem /p:publishUrl=C:\builds\MyProject\ /p:DeleteExistingFiles=True /p:LastUsedPlatform="Any CPU" /p:Configuration=Release
fuente
Primero verifique la versión de Visual Studio de la PC del desarrollador que puede publicar la solución (proyecto). como se muestra es para VS 2013
agregue la línea de comando anterior para especificar qué tipo de versión de Visual Studio debe construir el proyecto. Como respuestas anteriores, esto podría suceder cuando intentamos publicar solo un proyecto, no la solución completa.
Entonces el código completo sería algo como esto
"C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ msbuild.exe" "C: \ Archivos de programa (x86) \ Jenkins \ workspace \ Jenkinssecondsample \ MVCSampleJenkins \ MVCSampleJenkins.csproj" / T: Build; Package / p : Configuración = DEBUG / p: OutputPath = "obj \ DEBUG" / p: DeployIisAppPath = "Sitio web predeterminado / jenkinsdemoapp" /p:VisualStudioVersion=12.0
fuente
MSBuild C:\PathToMyProject\MyProject.csproj /p:DeployOnBuild=true /p:PublishProfile=MyPublishProfile /p:VisualStudioVersion=12.0
Este parámetro es lo que me faltaba y solucionó mi problema. ¡Solo necesitas mencionar la respuesta completamente!