¿Cómo puedo fusionar y utilizar Web.debug.config
en el depurador incorporado de Visual Studio 2010?
Respuestas:
Este es un error conocido. Esa función se puede utilizar ahora solo como parte del proceso de implementación.
Por favor, vote a favor, si encuentra esto también, para que se solucione lo antes posible.
En realidad, esto es bastante simple de hacer y, lo crea o no, parece que esta es la forma en que VS está diseñado para funcionar.
Agregue las siguientes líneas literalmente antes de la etiqueta de cierre "Proyecto" del archivo .csproj del proyecto que contiene web.config.
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform">
<MakeDir Directories="obj\$(Configuration)" Condition="!Exists('obj\$(Configuration)')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="obj\$(Configuration)\Web.config" StackTrace="true" />
</Target>
Coloque las siguientes líneas textualmente en el evento posterior a la compilación en las propiedades del proyecto que contiene el archivo web.config. Haga esto para cada configuración de compilación para la que desee que se ejecuten las transformaciones.
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y
Web.config
, por lo que todas sus transformaciones deben ser "idempotentes" (se pueden volver a aplicar sobre los resultados de cualquiera de las otras transformaciones). También le impedirá mantener la cordura si pone el archivo en control de código fuente (como probablemente debería hacerlo). En general, un truco "simple" que traslada la complejidad / el dolor al siguiente conjunto de problemas. Bueno si puedes abordarlo "mejor" allí, malo si no lo haces. También considere usar $ (VisualStudioVersion) en lugar de codificar la versión VS ( se olvidará de cambiarla).
Lo había resuelto de una manera más simple, agregando esto al final del archivo .csproj, justo antes de la etiqueta. Esto es similar a la respuesta de keitn, con la diferencia de que no usa un evento posterior a la compilación.
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
No quería actualizar web.config en mi proyecto, solo el que termina en la carpeta bin, así que así es como lo hice.
Agregue lo siguiente al final de .csproj (justo antes de la etiqueta final del proyecto de cierre)
<Target Name="Transform">
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>
Luego agregue el siguiente paso de compilación posterior
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
Esto significa que cuando construyes una transformación se lleva a cabo desde la configuración de depuración / liberación al archivo WebsiteName.Config en el directorio bin de salida, por lo que no interfiere con el web.config principal del proyecto.
Después de leer muchas publicaciones similares y tener problemas con archivos que no se pueden sobrescribir o que web.config no es accesible porque es de solo lectura, esto es lo que obtuve trabajando para mí:
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
<TransformXml Source="$(ProjectDir)TempWeb.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
Notas:
Esto se ejecuta como el destino BeforeBuild.
Solo quiero que se ejecute bajo una determinada configuración (un entorno de depuración alternativo) y por eso tengo la condición. Cuando se implementa a través de la web, el objetivo de publicación se activa y no necesito este objetivo para ejecutarse.
No quiero tener que recordar revisar web.config (solo para deshacerlo cuando termine), así que reviso web.config antes de comenzar la transformación. Si no está utilizando TFS, puede eliminar esta línea.
Debido a que VS (2010) \ msbuild no quiere soltar la fuente web.config, uso un archivo temporal (gracias a este artículo por la información: http://www.diaryofaninja.com/blog/2011/09/ 14 / utilizar-transformaciones-webconfig-personalizadas-en-msbuild )
Intenté agregar un comando para eliminar el TempWeb.config pero VS \ msbuild no quiere soltarlo. Puedo vivir con él ya que no se agrega a TFS.
The command ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\tf.exe" checkout "C:\_Code\RTS\SCTimeSheet\Web.config"" exited with code 9009
. ¿Algunas ideas?
Sé que esto es antiguo, pero estoy enfrentando el mismo problema. Tenemos configuraciones de prueba, puesta en escena, en vivo que reemplazan los puntos finales, cadenas de conexión, etc. del Web.config predeterminado
Sin embargo, haría lo siguiente:
No son muchos pasos y se realiza con bastante rapidez cuando lo dominas. Espero que esto ayude. :)
@ologesa: Su solución necesita acceso de escritura al Web.config original (debe realizar el check-out en TFS). La mejor solución es generar directamente Web.config en la carpeta bin, como hace keitn. Cuando combinamos keitn's y su solución, obtenemos esta:
<Target Name="BeforeBuild">
<Message Text="Transforming Web.config from Web.$(Configuration).config" Importance="high" />
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>