2011-01-27 8 views
34

Esto es lo que mi solución es el aspecto en el momento:¿Puede una biblioteca de clases tener un archivo App.config?

enter image description here

En el proyecto Tutomentor.Branding, me gustaría guardar la información de la marca en el archivo app.config, como nombres, colores, etc.

En el proyecto Tutomentor.Data, App.config se creó cuando agregué un archivo de modelo de entidad .edmx.

¿Esto es posible? ¿Alguna recomendación?

Al implementar, ¿la salida COMBINARÁ estos archivos App.config en uno solo?

Respuesta

38

No, las bibliotecas de clases pueden contener archivos de configuración, pero sus valores se definirán en la configuración de la aplicación (web.config, app.config ...).

Eso se debe a la función de anulación de la configuración.

Deberá declarar las secciones de configuración de los ensamblajes en la aplicación.config o web.config de su aplicación (WPF, SL, ASP.NET ...) y definir un valor para una determinada cantidad de configuraciones definidas en la configuración de ensamblaje adecuada.

EDIT: Añadir un archivo de configuración para su proyecto y agregar una configuración de ámbito de aplicación y su ensamblaje tendría algo como esto:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="Assembly1.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <applicationSettings> 
     <Assembly1.Settings1> 
      <setting name="settingA" serializeAs="String"> 
       <value>a value</value> 
      </setting> 
     </Assembly1.Settings1> 
    </applicationSettings> 
</configuration> 

Ahora que había necesidad de ir a su aplicación, y necesita copiar y pegar el grupo de sección y las declaraciones de sección, y la definición de los valores para la configuración. Eso es todo.

+0

¿Puedes ampliar eso? ¿Cómo podría "declarar las secciones de configuración de los ensamblajes en la aplicación.config o web.config de su aplicación"? –

+0

Fist usted crea el archivo de configuración en su ensamblado no ejecutable, y luego, vuelve a declarar la misma sección en su aplicación ejecutable o aplicación web, y define allí el valor para un conjunto de configuraciones :) El nombre de la sección (el espacio de nombre del archivo de configuración, de hecho, la clase, debe coincidir en el ensamblado y en el ejecutable. El ejecutable no necesita definir TODAS las configuraciones del ensamblaje del satélite. Puede definir 1, 2 o todo. –

+0

Lata usted edita su respuesta y proporciona un ejemplo de código simple? –

3

Cualquier configuración específica de la biblioteca app.config, debe ingresar manualmente su archivo de configuración exe.

0

Bueno, la biblioteca de clases no puede tener su propia app.config, pero si define su configuración, desde la biblioteca de clases en la aplicación.config para el archivo exe, la biblioteca de clases debería poder encontrarlas.

estoy un poco inseguro, pero no creo que los combine automáticamente, supongo que tienes que hacerlo manualmente!

29

Si bien este es un hilo más antiguo, hace warrent otra mirada.

Parece que es posible que desee ver el problema de otra manera.

Se supone que las bibliotecas de clases son portátiles. Por lo tanto, cualquier configuración necesaria se debe pasar a la clase, en lugar de residir con la biblioteca. Cosas como las cadenas de conexión son transitorias por naturaleza, por lo que tiene sentido colocarlas en la aplicación propietaria.

Al utilizar los métodos contenidos en la biblioteca, pasa cualquier información necesaria como parte de la firma del método o como propiedad pública en la clase. Le sugiero que cree propiedades públicas para sus elementos de configuración y que las pase cuando cree una instancia de la clase.

Ahora no tiene problemas con una aplicación.config para la DLL, y la DLL es realmente portátil.

+0

Veo su punto y estoy de acuerdo. Pero entonces, ¿por qué Visual Studio incluso permite la creación de archivos "Settings.settings" para archivos DLL? ¿Microsoft simplemente nos está persiguiendo? – Deantwo

3

Simplemente cree su propio archivo XML, asígnele el nombre appConfig.xml o algo similar, haga que la biblioteca de su clase lea el archivo usando System.Xml en lugar de System.Configuration, y empaquete el archivo junto con su dll.

Cuestiones relacionadas