Pregunta

Por lo tanto, tengo instalado VS 2010 y estoy en el proceso de modificar mi script de MSBuild para nuestra integración TeamCity acumulación. Todo está funcionando muy bien, con una excepción.

¿Cómo puedo saber MSBuild que quiero aplicar el Web.conifg archivos de transformación que he creado cuando publico la acumulación ...

Tengo los siguientes elementos que produce la página web compilado pero, se da salida a una Web.config, y Web.Debug.config, archivos Web.Release.config (los 3) en el directorio de salida compilada. En el estudio cuando realizo una publican al sistema de archivos que va a hacer la transformación y sólo la salida de Web.config con los cambios apropiados ...

<Target Name="CompileWeb">
    <MSBuild Projects="myproj.csproj" Properties="Configuration=Release;" />
</Target>

<Target Name="PublishWeb" DependsOnTargets="CompileWeb">
    <MSBuild Projects="myproj.csproj"
    Targets="ResolveReferences;_CopyWebApplication"
    Properties="WebProjectOutputDir=$(OutputFolder)$(WebOutputFolder);
                OutDir=$(TempOutputFolder)$(WebOutputFolder)\;Configuration=Release;" />
</Target>

Cualquier ayuda sería grande ..!

Sé que esto puede hacerse por otros medios, pero me gustaría hacer esto utilizando el nuevo VS 2010 camino si es posible

¿Fue útil?

Solución

Yo estaba buscando información similar y no acababa de encontrar, así que hice un poco de escarbar en los archivos .targets que vienen con Visual Studio 2010 y MSBuild 4.0. Me imaginé que era el mejor lugar para buscar la tarea de MSBuild que realizar la transformación.

Por lo que yo he sido capaz de decir, se utiliza la siguiente tarea MSBuild:

<Project ToolsVersion="4.0"
         DefaultTargets="Deploy"
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <UsingTask TaskName="TransformXml"
               AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>

    <PropertyGroup>
        <ProjectPath>C:\Path to Project\Here</ProjectPath>
        <DeployPath>C:\Path to Deploy\There</DeployPath>
        <TransformInputFile>$(ProjectPath)\Web.config</TransformInputFile>
        <TransformFile>$(ProjectPath)\Web.$(Configuration).config</TransformFile>
        <TransformOutputFile>$(DeployPath)\Web.config</TransformOutputFile>
        <StackTraceEnabled>False</StackTraceEnabled>
    </PropertyGroup>


    <Target Name="Transform">
        <TransformXml Source="$(TransformInputFile)"
                      Transform="$(TransformFile)"
                      Destination="$(TransformOutputFile)"
                      Condition="some condition here"
                      StackTrace="$(StackTraceEnabled)" />
    </Target>
</Project>

He probado la anterior y puede confirmar que funciona. Es posible que tenga que modificar la estructura un poco para encajar con su escritura de la estructura mejor.

Otros consejos

debe ser capaz de lograr esto mediante el uso de la meta del paquete y especificando el directorio temporal.

msbuild solution.sln /p:Configuration=Release;DeployOnBuild=true;DeployTarget=Package;_PackageTempDir=..\publish

http://pattersonc.com/blog/index.php/2010/07/15/visual-studio-2010-publish-command-from-msbuild-command-line/

Por otra parte, se intenta utilizar el TXD Transformación de herramientas

http://ctt.codeplex.com

Estoy usando esto en vez de jugar con los objetivos msbuild oscuros. Funciona con app.config no sólo web.config .

Se trabajó para mí con el siguiente cambio

<MSBuild Projects="$(ProjectFile)"
         Targets="ResolveReferences;_WPPCopyWebApplication"
     Properties="WebProjectOutputDir=TempOutputFolder;OutDir=$(WebProjectOutputDir);Configuration=$(Configuration);" />

A partir de archivo Microsoft.WebApplication.targets bajo MSBUILD carpeta

_CopyWebApplication

This target will copy the build outputs along with the 
content files into a _PublishedWebsites folder.

This Task is only necessary when $(OutDir) has been redirected
to a folder other than ~\bin such as is the case with Team Build.

The original _CopyWebApplication is now a Legacy, you can still use it by 
 setting $(UseWPP_CopyWebApplication) to true.
By default, it now change to use _WPPCopyWebApplication target in
 Microsoft.Web.Publish.targets.   
It allow to leverage the web.config trsnaformation.

No soy un experto con MSBuild, pero yo era capaz de utilizar la información de este enlace para realizar la misma tarea:

http://www.hanselman.com/blog/ManagingMultipleConfigurationFileEnvironmentsWithPreBuildEvents.aspx

Hay una sección relacionada con MSBuild cerca de la parte inferior del artículo. Espero que esto ayude.

Otra respuesta a este tema después de que he estado buscando durante días antes de Abordé este tema:

Sus perfil de publicación y configuración debe coincidir con los nombres.

En mi caso la mía no. la publicación de forma manual a través del perfil editorial me dio el resultado que quería, porque mi configuración se encuentra en el perfil de publicación. Sin embargo MSBuild trata de ser inteligente y mágicamente conecta el perfil y la configuración publican en función del nombre. (Adición de la / t: Configuración en el comando dio lugar a otros errores extraños acerca de la OutputPath de un proyecto de referencia).

Sólo para estar muy claro en lo que quiero decir:

MSBuild comunicado desde la línea de comandos

msbuild myproject.csproj -t: -t Limpio: Reconstruir / p: DeployOnBuild = true / p: PublishProfile = "Desarrollo"

Trabajos

  • publicar el nombre del perfil : Desarrollo
  • nombre de Configuración de soluciones : Desarrollo

no funciona

  • publicar el nombre del perfil : Desarrollo
  • nombre de Configuración de soluciones : Dev

Espero que esto ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top