2012-08-01 17 views
5

Estoy intentando hacer que las transformaciones web.config funcionen como se describe here. Hemos utilizado este método en otros proyectos y funciona sin problemas, pero no en este nuevo proyecto.web.config transformar de web.template.xml no funciona

Aquí es lo que he intentado sin éxito las pruebas

  • Cambio de nombre de archivo wpp.targets en caso de que me dieron el nombre del proyecto equivocado. Sé que el actual que estoy usando funciona, ya que es el único que causa que web.config sea reconstruido desde web.template.xml. Esta transformación funciona. Solo las plantillas secundarias no funcionan.
  • intentado con xdt: Localizador = "partido (nombre)"
  • Probado .config extensión vs .xml, nuestros otros proyectos en los que trabaja este uso .xml
  • gestor de configuración se establece para utilizar la configuración de "Prueba" para el proyecto en el que estoy trabajando
  • web.template.Test.xml ha xdt: Transform = "Reemplazar" para la sección quiero reemplazar
  • web.template.xml tiene el marcador de posición
  • intentado quitar la sección "CopyWebTemplateConfig" de wpp.targets como se sugiere en la pregunta de la pila vinculada a continuación. Nuestros otros proyectos tienen esto y la sección "PropertyGroup" ha comentado y he probado ambas combinaciones.

He leído a través del enlace de arriba varias veces y esta pila relacionada question, pero no puedo ver cuál es el problema.

Nota La transformación de publicación funciona de alguna manera. Crea un archivo web.template.xml que contiene los valores de web.template.Test.xml, pero no crea un archivo web.config.xml como lo indica wpp.targets. Así que esto es más un problema para lograr que funcione la transformación de construcción.

¿Alguien tiene una idea de lo que falta?

wpp.targets

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <!-- Make sure web.config will be there even for package/publish --> 
    <Target Name="CopyWebTemplateConfig" BeforeTargets="Build"> 
    <Copy SourceFiles="web.template.xml" 
      DestinationFiles="web.config"/> 
    </Target> 

    <PropertyGroup> 
    <PrepareForRunDependsOn> 
     $(PrepareForRunDependsOn); 
     UpdateWebConfigBeforeRun; 
    </PrepareForRunDependsOn> 
    </PropertyGroup> 

    <!-- This target will run right before you run your app in Visual Studio --> 
    <Target Name="UpdateWebConfigBeforeRun"> 
    <Message Text="Configuration: $(Configuration): Web.template.$(Configuration).xml"/> 
    <TransformXml Source="web.template.xml" 
       Transform="web.template.$(Configuration).xml" 
       Destination="web.config" /> 
    </Target> 

    <!-- Exclude the config template files from the created package --> 
    <Target Name="ExcludeCustomConfigTransformFiles" BeforeTargets="ExcludeFilesFromPackage"> 
    <ItemGroup> 
     <ExcludeFromPackageFiles Include="web.template.xml;web.template.*.xml"/> 
    </ItemGroup> 
    <Message Text="ExcludeFromPackageFiles: @(ExcludeFromPackageFiles)" Importance="high"/> 
    </Target> 
</Project> 

web.template.xml

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=152368 
    --> 
<configuration> 
    <configSections>   
    <sectionGroup name="TestSettings"></sectionGroup> 
    .... 
    </configSections> 
    .... 
    <TestSettings> 
    </TestSettings> 
    .... 
</configuration> 

web.template.Test.xml

<?xml version="1.0"?> 
<!-- For more information on using transformations 
    see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. --> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <TestSettings xdt:Transform="Replace"> 
    ... 
    </TestSettings> 
</configuration> 

salida MSBuild

Target "UpdateWebConfigBeforeRun: (TargetId:143)" in file "C:\...\Project.wpp.targets" from project "C:\...\Project.csproj" (target "PrepareForRun" depends on it): 
Task "Message" (TaskId:93) 
    Configuration: Test: Web.template.Test.xml (TaskId:93) 
Done executing task "Message". (TaskId:93) 
Task "TransformXml" (TaskId:94) 
    Transforming Source File: Web.template.xml (TaskId:94) 
    Applying Transform File: Web.template.Test.xml (TaskId:94) 
    Executing Replace (transform line 5, 18) (TaskId:94) 
     on /configuration/TestSettings (TaskId:94) 
     Applying to 'TestSettings' element (source line 121, 4) (TaskId:94) 
     Replaced 'TestSettings' element (TaskId:94) 
    Done executing Replace (TaskId:94) 
    Output File: web.config (TaskId:94) 
    Transformation succeeded (TaskId:94) 
Done executing task "TransformXml". (TaskId:94) 
Done building target "UpdateWebConfigBeforeRun" in project "Project.csproj".: (TargetId:143) 
+0

¿Puede enviarme un proyecto de muestra que no funciona? Mi correo electrónico es sayedha [at] {MicrosoftDOTcom}. –

Respuesta

1

Tengo una solución a mi problema, pero no es seguro que la causa no es, tan seguro de si esto va a resolver en los demás casos.

me revisaron la salida del MSBuild diagnóstico y se dio cuenta de que hacia el final hubo otra sección que copió web.template a web.config. Tenga en cuenta que esto es después de la actualizaciónW El objetivo ebConfigBeforeRun ya se ejecutó y realizó sus actualizaciones desde el archivo de transformación de la plantilla secundaria a web.config. Parecía que este último paso estaba anulando la configuración web.config con la transformación que quería.

No estaba seguro de dónde venía este último conjunto de instrucciones de copia, así que hice una búsqueda de todos los archivos en mi PC buscando otros archivos wpp.target. Encontré otro en la carpeta de extensiones de Slow Cheetah y vi una sección arriba que estaba estableciendo una propiedad "transformOnBuild" en falso.

Pensando que había un conflicto con SlowCheetah, lo desinstalé y las transformaciones comenzaron a funcionar como se esperaba. Esto todavía era un poco extraño ya que las otras soluciones funcionaban con SlowCheetah habilitado. Por un capricho, volví a instalar SlowCheetah y la transformación continuó funcionando como se esperaba.

Así que mi solución terminó siendo una reinstalación de SlowCheetah. Todavía estoy confundido acerca de cuál fue la causa de este problema, por lo que si alguien más publica una respuesta a esto, les daré la recompensa.

0

que he tenido un problema similar la semana pasada. Resulta que cada vez que agrega un proyecto a una solución en VS 2010, la configuración correcta del proyecto no se aplica todo el tiempo. Entonces cree que tiene una configuración activa, pero otra está realmente activa en ese proyecto, por lo tanto, la transformación que espera no se aplica.

Comprobar los pasos en el último comentario de este tema: Custom solution configuration not showing up in Visual Studio 2010

+0

Sin embargo, no se agregó un nuevo proyecto a la solución. Cuando dije que la transformación funcionó en otros proyectos, quise decir otras soluciones u otros sistemas que hemos creado. Probé los pasos descritos en esa respuesta, pero no resolvió el problema. – Jerry

0

"Sé que el actual que estoy usando las obras, ya que es el único que provoca web.config para ser reconstruido desde web.template.xml esta transformación funciona. Sólo las plantillas sub no funcionan."

¿Significa esto, la sección de obras de transformación pero TestSettings por sí solo no se transforman?

¿Puede compartir la construcción de salida con msbuild con nivel de detalle establecido en el diagnóstico/detallada?

+0

Eso es correcto, la transformación funciona pero la sección TestSettings no se transforma de las plantillas secundarias. ¿Cómo habilita la verbosidad en la compilación? – Jerry

+0

Ok, encontré cómo habilitar la verbosidad de diagnóstico, pero no creo que pueda compartir el resultado públicamente. ¿Hay alguna sección que debería analizar específicamente? En Opciones de VS 2010 => Proyectos y soluciones => Generar y ejecutar => menú desplegable para verbosidad de salida de compilación del proyecto MSBuild. – Jerry

+0

Encontré propiedades web.template.xml en esa salida que mostraba "TransformOnBuild" establecido en true, pero todos los demás archivos lo muestran como falso. – Jerry

3

Había instalado StyleCop y estaba haciendo la sobrescritura para mí.

Así que lo desinstalé y se resolvió el problema.

¡Gracioso es que reinstalé el StyleCop y la transformación todavía funcionaba!

También en algunos puntos noté que debería eliminar la sección de destino CopyWebTemplateConfig también.

+1

Suena muy similar al escenario que describí, solo reemplaza StyleCop con SlowCheetah. – Jerry

+1

Sí. La buena noticia es que están considerando el soporte para web en F5 a SlowCheetah. https://github.com/sayedihashimi/slow-cheetah/issues/39 ¡Por favor vote a todos! – user1858286

Cuestiones relacionadas