visual usar una studio standard net libreria hacer framework crear construir como clases clase biblioteca asp .net configuration configuration-files class-library

usar - ¿Cómo puedo hacer que una biblioteca de clase.NET lea su propio archivo de configuración?



hacer libreria en c# (7)

¿Sería una opción hacer referencia al archivo de configuración de la biblioteca desde la configuración de cada servicio web? Hay un mecanismo de inclusión XML en .NET:

Use XML includes o config references en app.config para incluir la configuración de otros archivos de configuración

http://blog.andreloker.de/post/2008/06/Keep-your-config-clean-with-external-config-files.aspx

Si bien aún necesitaría editar cada web.config, el contenido real se mantiene en un solo lugar.

Tengo una biblioteca de clases .NET que proporciona un conjunto de funciones de ayuda que utilizan varios servicios web. Esta biblioteca de clases debe almacenar una configuración única, específicamente, una cadena de conexión, que no necesita ser vista por los mismos servicios web, ya que todos deben consultar la misma base de datos.

Desafortunadamente, .NET no proporciona medios para leer fácilmente el archivo app.config una DLL. La única solución "fácil" sería almacenar la cadena de conexión en cada uno de los archivos de configuración del servicio web, que es completamente absurdo.

Normalmente, me importa la elegancia del código, pero esta vez realmente necesito una solución, incluso si es un truco. ¿Hay alguna manera de hacer que una biblioteca de clases .NET tenga su propia configuración?

EDITAR: Técnicamente, podría fusionar todos esos servicios web en un solo servicio web. Pero, por razones comerciales (cada servicio web se venderá por separado), no puedo hacer eso.


Creo que estás buscando:

ConfigurationManager.OpenExeConfiguration(string exePath)

o

ConfigurationManager.OpenMappedExeConfiguration( new ExeConfigurationFileMap() { ExeConfigFilename = path + "app.config" }, ConfigurationUserLevel.None);

Que devuelve un objeto de Configuration . Documento de MSDN en ConfigurationManager

Pruebe esta pregunta para saber cómo obtener la ruta DLL.


Este tipo de problema de configuración se resuelve bastante bien utilizando Enterprise Library " Fuentes de configuración compartidas " y " Configuraciones diferenciales " (para cambiar fácilmente entre múltiples entornos, etc.).

Para obtener más información sobre Escenarios de configuración avanzada , intente comenzar aquí:

http://msdn.microsoft.com/en-us/library/ff664552(v=pandp.50).aspx

Y para integrar Enterprise Library Configuration Tool (GUI) en Visual Studio , intente aquí:

http://visualstudiogallery.msdn.microsoft.com/029292f0-6e66-424f-8381-3454c8222f9a

La curva de aprendizaje puede parecer un poco abrumadora al principio, pero vale la pena el esfuerzo, especialmente si se trata de ecosistemas empresariales complejos . La herramienta integrada realmente hace que sea muy fácil configurar un sistema de configuración muy sofisticado y administrarlo a medida que cambian sus requisitos.

Por cierto: ¡Una vez que lo domines, probablemente terminarás deseando usarlo para mucho más que solo tus Cadenas de Conexión!


Puede leer los ajustes de configuración de la biblioteca de clases desde la aplicación de alojamiento web.config o app.config .

Si se hace referencia a la biblioteca de clases en una aplicación de consola, coloque la configuración, la biblioteca de clases, en la app.config de la aplicación de la consola (por ejemplo, en appSettings) y léala de la biblioteca de clases usando ConfigurationManager en System.Configuration .

Si se hace referencia a la biblioteca de clase en una aplicación web, coloque la configuración que necesita la biblioteca de clases en el web.config de la aplicación web (por ejemplo, en appSettings) y léala de la biblioteca de clases usando ConfigurationManager en System.Configuration .



Un año fuera de fecha lo sé, pero utilicé este método para leer cada una de las configuraciones:

Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); ConfigurationSectionGroup csg = config.GetSectionGroup("applicationSettings"); ClientSettingsSection c = (ClientSettingsSection)csg.Sections["Add your section name here, e.g. Your.Namespace.Properties.Settings"]; foreach (SettingElement e in c.Settings) { Debug.WriteLine("SETTING NAME: " + e.Name); SettingValueElement v = e.Value; Debug.WriteLine("SETTING VALUE: " + v.ValueXml.InnerText); }

Esto funciona en un archivo de configuración creado en un proyecto de biblioteca de clase. El archivo de configuración debe llamarse "YourLibrary.dll.config" y luego desplegarse en la ubicación de la biblioteca. El archivo de configuración debe tener un contenido similar a este:

<?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <section name="Your.NameSpace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/> </sectionGroup> </configSections> <applicationSettings> <Your.NameSpace.Properties.Settings> <setting name="YourLibrary_WebReferences_YourWebService" serializeAs="String"> <value>http://localhost:3861/YourWebService.asmx</value> </setting> <setting name="AnotherSetting" serializeAs="String"> <value>False</value> </setting> </Your.NameSpace.Properties.Settings> </applicationSettings> <startup> <supportedRuntime version="v2.0.50727"/> </startup> </configuration>

No he necesitado leer las cadenas de conexión del archivo de configuración, pero eso debería ser posible cambiando el nombre del grupo de sección que se obtiene después de abrir la configuración del archivo ejecutable.

La razón por la que tuve que hacer esto es porque tengo un Control de usuario que envuelve una biblioteca ActiveX / COM que luego se aloja en IE en una etiqueta de "objeto". Obtuve el uso de etiquetas "param", por lo que podría haber usado ese mecanismo para pasar las configuraciones al Control de usuario, pero este método parecía una opción lógica en ese momento. ¡Además, no iba a dejar que este problema en particular me ganara!

HTH pridmorej :)


ConfigurationManager.OpenExeConfiguration no funcionó para mí.

Pero, Properties.Settings.Default.<SettingName> funcionó bien.