34

Deseo que las transformaciones web.config funcionen localmente, pero aparentemente las transformaciones solo se producen al realizar implementaciones.Hacer que las transformaciones Web.config funcionen localmente

¿Alguien sabe de una forma de ejecutar el objetivo de msbuild "TransformWebConfig" sin pasar por el proceso de "reconstrucción" y también especificar y generar el directorio donde escupir el web.config transformado?

EDITAR: Usando la respuesta de Sayed, he creado un archivo .bat hacer ejecutar la tarea para mí:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Msbuild.exe "D:\Demo\Transformation.proj" /t:TransformWebConfig 

copy /Y "D:\Demo\Web.config" "D:\MyProject\Web.config" 

del ""D:\Demo\Web.config" 

la "Transformation.proj" es una copia del fragmento de código de Sayed en la respuesta a continuación. Solo especifique la fuente, el destino y el destino de la transformación. El nuevo archivo, en este caso, el "web.config" transformado estará en el directorio "D: \ Demo". Simplemente estoy copiando para sobrescribir el web.config de mi proyecto y, finalmente, eliminar el archivo generado en la carpeta "demo".

Además, he creado una macro para ejecutar este archivo por lotes y realizar la tranformación para mí:

Public Module DoTransform 
    Sub RunTransformBatchFile() 
     Try 
      Process.Start("D:\Demo\RunTransform.bat") 
     Catch ex As System.Exception 
      MsgBox(ex.Message) 
     End Try 
    End Sub 
End Module 

También puede agregar un botón en la barra de herramientas para ejecutar este lote y/o asignar una tecla de acceso directo para ejecutar.

Respuesta

34

si desea transformar un archivo de configuración sin utilizar el Pipeline de Publicación Web, entonces simplemente usa la tarea TransformXml manualmente. He escrito una entrada de blog detallada sobre esto en http://sedodream.com/2010/04/26/ConfigTransformationsOutsideOfWebAppBuilds.aspx, pero aquí están las altas luces:

<Project ToolsVersion="4.0" DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <UsingTask TaskName="TransformXml" 
      AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/> 

    <Target Name="Demo"> 
     <TransformXml Source="app.config" 
         Transform="Transform.xml" 
         Destination="app.prod.config"/> 
    </Target> 
</Project> 

Aquí transformo manualmente el archivo app.config usando el archivo transform.xml y el archivo de destino es app.prod. config.

Una cosa que mencionaste fue poder hacer transformaciones localmente al ejecutar la aplicación. La razón por la que solo realizamos la transformación en el paquete/publicación es porque si transformamos web.config por sí mismo, la próxima vez que depure su aplicación, el web.config se transformará de nuevo. Entonces, por ejemplo, si en su web.debug.config tiene la transformación para agregar un valor a config, todo estará bien la primera vez que lo agregue, pero luego la próxima vez que ejecute/depure su aplicación, se volverá a agregar. Entonces es mejor evitar eso.

+0

Esto es exactamente lo que necesitaba, transforma el web.config sin construir. muchas gracias Sayed! –

+0

Sayed, ¿podría saber esta respuesta a esta otra pregunta? http://stackoverflow.com/questions/2915329/advanced-tasks-using-web-config-transformation –

+0

Sí, lo sé, lo acabo de responder. –

2

Si está utilizando Visual Studio 2015, puede hacer clic con el botón derecho en la transformación del entorno deseado y hacer clic en "Ver vista previa" ... Generará la transformación y podrá copiarla y pegarla en el archivo Web.config normal para fines de depuración. ¡Simplemente no lo cometas!

Si está utilizando Visual Studio 2013, puede instalar el SlowCheetah - XML ​​Transforma extensión

Cuestiones relacionadas