que sugieren que su pregunta revela que ha superado app.config
--que es el momento de pasar a una solución mejor, y para empezar a abordar algunas cuestiones relacionadas.
Para empezar, NUNCA debe implementar automáticamente un archivo de configuración en producción, y debe esperar que el personal de soporte de operaciones rechace con vehemencia cualquier intento de hacerlo. Por supuesto, si usted es el personal de soporte de operaciones, entonces debe rechazarlo usted mismo. En su lugar, su versión debe incluir algunas instrucciones para actualizar manualmente el archivo de configuración, con una muestra para ilustración. La configuración de producción es demasiado importante para medidas menores, a menos que simplemente no valore mucho su sistema de producción.
Igual que para pruebas y otros entornos, pero en menor grado, por lo que solo necesita su app.config
poblado para su propio trabajo de desarrollo.
Una opción es insertar las configuraciones múltiples en un solo app.config
, lo que es razonable para aplicaciones pequeñas, relativamente sin importancia o en etapas tempranas de desarrollo/lanzamiento. Por ejemplo, cree una configuración llamada algo así como target-env
que contenga un valor que use en su código para seleccionar otros ajustes de configuración, como anteponiendo el valor a las teclas de las otras configuraciones.
Mi preferencia es pasar del app.config
en conjunto, o usarlo mínimamente. En este caso, prefiero poner solo los datos de configuración suficientes en un archivo para permitir que mi aplicación/sistema se conecte a su (s) base (es) de datos, luego coloco los detalles de configuración restantes en una tabla de base de datos especial para ese propósito. Esto tiene muchas ventajas, como hacer que la base de datos "sepa" qué entorno representa (desarrollo, prueba, producción, etc.) y mantener la configuración y los demás datos en conjunto. El paquete de implementación puede entonces mantenerse en secreto con respecto a las configuraciones y las diferencias de entorno: el código solo accede a sus datos de configuración y actúa en consecuencia, por lo que el mismo paquete de implementación es bueno para cualquier entorno.
Sin embargo, un factor clave de éxito para este enfoque es que su código de aplicación debe "saber" lo que espera de la configuración y debe "saber" rechazar una configuración incorrecta/incompleta. Aquí es donde debe pasar su tiempo, sin tratar de evitar los límites de app.config
.
Eso generalmente significa crear su propia clase para acceder a los datos de configuración, y luego usar esa clase en su aplicación en su lugar. Esto también genera muchos otros beneficios, como datos de configuración fuertemente tipados: en lugar de String
, devuelva DateTime
o Url
o Integer
o Currency
, o lo que mejor se ajuste a los datos de configuración y a la aplicación.
La etiqueta " " soporta un atributo "Condición". ¿Puedo probar si la condición coincide con "Dev_ *" (como en "Dev_Debug" o "Dev_Release") para usar el archivo Dev.config? –
Solo como referencia para futuros lectores: intenté con el código anterior y funcionó, pero NO para la implementación con ClickOnce. Simplemente no estaba incluido. Así que fui por la solución de http://blogs.msdn.com/b/vsto/archive/2010/03/09/tricks-with-app-config-and-clickonce-deployment-saurabh-bhatia.aspx, que es similar a la respuesta de Steve. – chiccodoro