c# - configurationsettings - App.config para dll
get web config value c# (6)
Es curioso, donde estoy haciendo algo muy similar y el archivo de configuración carga bien. En nuestro caso, creo que el nombre de cada nuevo archivo de configuración coincide con el de su ensamblaje asociado. Así que MyLibrary.dll tendría un archivo llamado MyLibrary.dll.config con información para ese conjunto de archivos. Además, el ejemplo que tengo a mano es usar VB.Net en lugar de C # (tenemos algunos de cada uno) y todas las configuraciones allí son para el espacio de nombres My.Settings específico de VB, por lo que no usamos la clase ConfigurationManager directamente para léalos
La configuración en sí se ve así:
<applicationSettings>
<MyLibrary.My.MySettings>
<setting name="SomeSetting" serializeAs="String">
<value>12345</value>
</setting>
</MyLibrary.My.MySettings>
</applicationSettings>
Tenemos un "motor" que carga dlls dinámicamente (lo que está ubicado en un directorio determinado) y llama a las clases de Workflow desde ellos a modo de reflexión.
Ahora tenemos algunos flujos de trabajo nuevos que requieren acceso a una base de datos, así que pensé que pondría un archivo de configuración en el directorio dll.
Pero por alguna razón, mis Workflows simplemente no ven el archivo de configuración.
<configuration>
<appSettings>
<add key="ConnectString" value="Data Source=officeserver;Database=mydatabase;User ID=officeuser;Password=officeuser;" />
</appSettings>
</configuration>
Dado el archivo de configuración anterior, el siguiente código imprime una cadena vacía:
Console.WriteLine(ConfigurationManager.AppSettings["ConnectString"]);
Creo que lo que quiero es solo especificar un nombre de archivo config, pero estoy teniendo problemas aquí. Simplemente no estoy obteniendo resultados. Alguien tiene punteros?
Escribí esto para un sistema similar. Mi recuerdo es que utilicé Assembly.GetExecutingAssembly
para obtener la ruta del archivo a la DLL, .config
a ese nombre, lo XmlDocument
como un XmlDocument
, me <appSettings>
nodo <appSettings>
y lo pasé al método Create
NameValueSectionHandler
.
No estoy del todo seguro, pero creo que la clase solo funciona con la ruta del método de entrada del AppDomain (la ruta del exe la mayor parte del tiempo) de forma predeterminada. Necesita llamar a OpenExeConfiguration (string exePath) (Framework 2.0 y posterior) primero para apuntar a un archivo de configuración diferente.
Si recuerdo correctamente, la aplicación.config se cargará desde el directorio de la aplicación, por lo que si está cargando dlls desde otro directorio, querrá las claves que necesitan en el archivo de configuración de la aplicación.
Si su ejemplo de código para leer AppSettings está en su DLL, intentará leer el archivo de configuración para la aplicación y no el archivo de configuración para la DLL. Esto se debe a que está utilizando Reflection para ejecutar el código.
Aquí hay una forma: AppDomain.CurrentDomain.SetData ("APP_CONFIG_FILE", "ruta al archivo de configuración");
Llamar en constructor.