c# - transforms - web.config transform from web.template.xml no funciona
web config transform visual studio 2017 (5)
Estoy intentando que las transformaciones web.config funcionen como se describe aquí . Hemos utilizado este método en otros proyectos y funciona sin problemas, pero no en este nuevo proyecto.
Esto es lo que he intentado probar sin éxito
- Cambiar el nombre del archivo wpp.targets en caso de que obtuviera el nombre del proyecto incorrecto. 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.
- Intentó con xdt: Locator = "Match (nombre)"
- Intenté la extensión .config vs .xml, nuestros otros proyectos donde esto funciona usa .xml
- El administrador de configuración está configurado para usar la configuración de "Prueba" para el proyecto en el que estoy trabajando.
- web.template.Test.xml tiene xdt: Transform = "Reemplazar" para la sección que quiero reemplazar
- web.template.xml tiene el marcador de posición
- Intenté eliminar 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 el enlace anterior varias veces y esta pregunta relacionada con la pila, 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)
"Sé que el actual que estoy usando funciona, ya que es el único que hace que web.config se reconstruya desde web.template.xml, esta transformación funciona. Solo las plantillas secundarias no funcionan".
¿Significa esto que la transformación funciona, pero la sección TestSettings por sí sola no se transforma?
¿Puedes compartir la salida de compilación con msbuild con un nivel de detalle establecido en diagnostic / detailed?
Escribí una publicación en el blog sobre este tema. Lo uso todos los días en nuestra aplicación web. Escribí la publicación del blog porque la función en slowcheetah aún no está lista. http://www.locktar.nl/general/use-config-transforms-when-debugging-your-web-application/
Había instalado StyleCop
y estaba haciendo la sobrescritura para mí.
Entonces lo desinstalé y el problema fue resuelto.
¡Gracioso es que reinstalé el StyleCop
y la transformación todavía estaba funcionando!
También en algunos puntos noté que debería eliminar la sección de destino CopyWebTemplateConfig
también.
Tengo una solución para mi problema, pero no estoy seguro de cuál es la causa, por lo que no estoy seguro si esto lo resolverá en otros casos.
Revisé el resultado del diagnóstico MSBuild y noté que hacia el final había otra sección que copiaba web.template a web.config. Tenga en cuenta que esto es después de que el objetivo UpdateWebConfigBeforeRun ya se haya ejecutado y haya realizado 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 configurando 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.
Entonces 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.
Tuve 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.
Compruebe los pasos en el último comentario de este problema: configuración de solución personalizada no aparece en Visual Studio 2010