viewcomponent tag net mvc aspx asp asp.net build web-config release web-config-transform

asp.net - mvc - tag helpers asp net core



Web.config Construir vs versiĆ³n transformada no funciona (5)

Luego construyo la solución (solo a través de Build o incluso a través de una reconstrucción completa (por ejemplo, Clean, Rebuild)). Subo las DLL recién creadas al servidor web, así como los archivos Web.config y Web.Release.config

Está su error: las transformaciones de configuración web no funcionarán para su entorno local, si simplemente las construye. Necesitas publicar.

Su proceso de implementación parece extraño: solo está copiando DLL, Web.config y web.Release.config. A mí me parece que copia su código fuente y no una aplicación compilada. Una aplicación web publicada no contiene un web.release.config.

Debe publicar su proyecto (clic derecho en su aplicación Web -> Publicar) en su sistema de archivos local y copiar los archivos desde allí, o usar otro método de implementación de su elección.

Hace 2 años escribí un artículo sobre web.config transforms. Le brinda un tutorial paso a paso para VS 2010 (el diálogo de publicación cambió en VS 2012): http://www.tomot.de/en-us/article/5/asp.net/how-to-use-web.config-transforms-to-replace-appsettings-and-connectionstrings

Tengo un proyecto de aplicación web ASP.NET que se conecta a una base de datos remota a través de Entity Framework. Durante la depuración (por ejemplo, la ejecución del proyecto en mi computadora local), la dirección IP a la base de datos es diferente a la del lanzamiento (por ejemplo, después de cargar el proyecto en mi servidor web y ejecutarlo desde el navegador). Hasta ahora siempre he cambiado manualmente la cadena de conexión de la base de datos en el archivo Web.config para cambiar entre las dos (básicamente tuve que conectar cadenas, una llamada ''Depurar'' y una ''Liberar'' y simplemente cambié los nombres cada vez que implementé ).

Ahora me di cuenta de que debería ser posible permitir que esto suceda automáticamente a través de la Sintaxis de Transformación de Web.config, donde se coloca la cadena de conexión modificada en la versión Web.Release.config y luego se debe usar cuando la DLL se construye en la configuración de la versión .

Sin embargo, no parece funcionar para mí ...

Aquí está la parte relevante de mi archivo Web.config regular (que contiene la cadena de conexión de depuración para uso local):

<?xml version="1.0"?> <configuration> <connectionStrings> <!-- Debug connection string. Release connection string is in Web.Release.config file --> <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration>

Aquí está el archivo Web.Release.config, que, de acuerdo con los ejemplos, debe reemplazar la cadena de conexión "A" de "DatabaseEntities" con "B" si la DLL está en el modo Release:

<?xml version="1.0"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) --> <connectionStrings> <add name="DatabaseEntities" connectionString="B" xdt:Transform="Replace" xdt:Locator="Match(name)"/> </connectionStrings> </configuration>

(Obviamente, "A" y "B" son simplemente marcadores de posición para mis cadenas de conexión reales)

Cuando depuro la aplicación (p. Ej., Simplemente presione F5), se utiliza el Web.config predeterminado y puedo acceder a la base de datos. Luego cambio la configuración de compilación a Release a través del Administrador de configuración. Todos los proyectos en la solución están configurados para Liberar configuración. Luego construyo la solución (solo a través de Build o incluso a través de una reconstrucción completa (por ejemplo, Clean, Rebuild)). Subo las DLL recién creadas al servidor web, así como los archivos Web.config y Web.Release.config, y cuando intento acceder a la base de datos no puedo, todavía estoy intentando acceder a la base de datos a través de la dirección IP de depuración y por lo tanto no puede encontrarlo ...

Parece que el archivo Web.Release.config se ignora por completo, o al menos la cadena de conexión no se está reemplazando.

¿Qué estoy haciendo mal? ¿Es incorrecta la sintaxis de transformación? ¿No estoy compilando la aplicación correctamente en el modo Release?


Dentro de su archivo csproj, puede agregar una acción para ejecutar antes de cada compilación y realizar las transformaciones web.config:

<Target Name="BeforeBuild"> <TransformXml Source="web.config" Transform="web.$(Configuration).config" Destination="web.config" /> </Target>


Pensé que la transformación solo se realiza cuando publicas el sitio / aplicación. No se hace al construir una aplicación. Este último cambiaría constantemente el control web bajo control de la fuente (lo que sería una verdadera molestia)


Puedes probar el plugin Slow Cheetah:

http://visualstudiogallery.msdn.microsoft.com/69023d00-a4f9-4a34-a6cd-7e854ba318b5

Esto le permitirá ver las transformaciones ''en vivo'' al brindarle una opción de menú de contexto adicional. Haga clic con el botón derecho y elija Vista previa de transformación para ver la transformación sin tener que hacer una compilación. También es muy útil para implementar transformaciones de app.config.


Si solo se trata de cadenas de conexión que no se sobrescriben durante la transformación web.config, esto es lo que hice: desactivé la casilla de verificación "Usar esta cadena de conexión en tiempo de ejecución" en la sección "Configuración" del asistente "Publicar web". Esta configuración estaba sobrescribiendo la transformación web.config de la cadena de conexión.