2009-12-31 17 views
41

Estoy intentando que mi aplicación web se publique automáticamente cuando se realiza una compilación de versión. Lo hago utilizando el objetivo _CopyWebApplication. Agregué lo siguiente a mi archivo .csproj:_CopyWebApplication con web.config transformations

<!-- Automatically Publish in Release build. --> 
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> 
    <Target Name="AfterBuild"> 
    <RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" /> 
    <MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" /> 
    </Target> 

Esto funciona pero con un problema. La diferencia entre esta salida y la salida generada al utilizar el elemento de menú Publicar en Visual Studio es que la transformación Web.Release.config no se aplica al archivo Web.config cuando se utiliza el método MSBuild. En su lugar, se copian Web.config, Web.Release.config y Web.Debug.config.

Se aprecian todas las ideas.

Respuesta

71

He estado golpeando mi cabeza contra la pared por esto. Después de recorrer los objetivos de MSBuild me encontré con algo muy "opaco".

Resumen breve: intente utilizar el nuevo _WPPCopyWebApplication. Funciona en mi máquina. El antiguo _CopyWebApplication no admite transformaciones por razones heredadas. Esto es lo que hago:

msbuild /t:Rebuild /p:OutDir=..\publish\;Configuration=Release;UseWPP_CopyWebApplication=True;PipelineDependsOnBuild=False MvcApplication1\MvcApplication1.csproj 

# UseWPP_CopyWebApplication = true requires PipelineDependsOnBuild = false 

larga historia:

Tenga una mirada en VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets. Está muy mal. Encuentra _CopyWebApplication en la línea 70. El comentario es:

El _CopyWebApplication original es ahora un legado, que todavía se puede utilizar por $ ajuste (UseWPP_CopyWebApplication) a cierto. De forma predeterminada, ahora cambia para usar el destino _WPPCopyWebApplication en Microsoft.Web.Publish.targets. Permite aprovechar la web.config trsnaformation. [todos sic]

Uh oh. UseWPP_CopyWebApplication se establece de manera predeterminada en falso (línea 27), lo que tiene sentido si no desea romper el existente _CopyWebApplication. Por lo tanto, configurarlo en verdad usará las nuevas cosas de WPP introducidas en VS 2010. Prefiero esto más que llamar un objetivo "oculto".

+4

WTF Microsoft? Gracias por compartir este Jabe ... – jjxtra

+0

Me pregunto si hay una manera de arreglar la copia de bibliotecas referenciadas a través de otro proyecto para ser incluidas en msbuild ouput dir? –

+0

Intenté hacer esto con WebDeploy use/p: WebPublishMethod = FileSystem y usando los archivos pubxml. No pude arreglarlo. Esta solución es la mejor forma que he encontrado. Un consejo: no pude hacer que funcionara sin el conjunto de propiedades OutDir. Tendrá que incluirlo en la línea de comando, incluso si ya está definido en las propiedades de su proyecto. –