6

Estoy leyendo artículos, publicaciones en el foro sobre la configuración de la aplicación desde hace casi una semana.Cómo fusionar la aplicaciónConfiguración de una biblioteca de clase en el archivo de configuración del ejecutable del host

En casi todos los hilos que había alguien que parece tener correctamente señalado que las bibliotecas de clases no pueden tener los archivos de configuración cuando se implementen y sus applicationSettings configuran en el diseño se debe especificar/fusionado en el fichero de configuración exe.config ejecutable de la aplicación que aloja/consume el dll.

No necesariamente cierto.

Puede, pero no es necesario fusionarlos, la configuración de la biblioteca de clases a menos que desee proporcionar al usuario una forma de "sobrescribir" los valores predeterminados, los que se especifican utilizando DefaultValueAttribute codificada en el ensamblaje.

Por lo tanto, para un ejemplo muy simple y práctico. Usemos VB.NET 1. Creé un proyecto de biblioteca de clase llamado ClassLibrary. 2. Mostrando todos los archivos, expanda MyProject, haga doble clic en Settings.settings. 3. Agregando una configuración llamada Mensaje, la aplicación cuyo valor es "¡Hola!". 4. Crear una propiedad en Class1.vb (la clase añadida automáticamente)

Public Class Class1 

    Public Shared ReadOnly Property Message As String 
     Get 
      Return My.Settings.Message 
     End Get 
    End Property 

End Class 
  1. Crear un proyecto de VB WinForms y lo llaman WinForm.
  2. Agregue una referencia al proyecto ClassLibrary.
  3. Agregue un botón al Form1 ya creado y haga doble clic en él. 8 Agregue el código al controlador Button1_Click. Debería verse así

    Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click 
        MessageBox.Show(ClassLibrary.Class1.Message) 
    End Sub 
    

    End Class

  4. Tienes WinForm "Establecer como proyecto de inicio"

Ahora, mientras que en el IDE todo funciona de maravilla. Ejecute la solución y obtendrá el esperado ¡Hola! cuando presionas el botón. Si vas y cambias la configuración en la aplicación.config de la biblioteca para decir "¡Adiós!" y ejecutas la solución nuevamente obtienes un "¡Adiós!"

Sin embargo, haga clic derecho en el proyecto de WinForm y "Abrir en el Explorador" y vaya a la carpeta de depuración. Aún no hay un archivo WinForm.exe.config. Vamos a crear uno rápidamente. Vuelva a cambiar a VS y mientras el proyecto WinForm está seleccionado, haga clic en Mostrar todos los archivos. Expanda MyProject, abra Ajustes de configuración, cree una configuración (no importa qué) y guárdela. Ahí vamos, se creó un App.config y si construyo esta solución, la carpeta Debug contendrá un WinForm.exe.config.

Dime cómo puedo combinar mi opción de la configuración de biblioteca de clases

<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="ClassLibrary.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 

    <applicationSettings> 
     <ClassLibrary.My.MySettings> 
      <setting name="Message" serializeAs="String"> 
       <value>Hello!</value> 
      </setting> 
     </ClassLibrary.My.MySettings> 
    </applicationSettings> 
</configuration> 

mensaje en config del WinForm

<configuration> 
    <configSections> 
     <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
      <section name="WinForm.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" /> 
    </startup> 
    <applicationSettings> 
     <WinForm.My.MySettings> 
      <!--<setting name="A" serializeAs="String"> 
       <value>A</value> 
      </setting>--> 
     </WinForm.My.MySettings> 
    </applicationSettings> 
</configuration> 

para que pueda cambiar de valor de ajuste en el WinForm el mensaje.exe.config a otra cosa y la aplicación mostrará este nuevo valor anulando DefaultValueAttribute.

Respuesta

3

He hecho algunas investigaciones últimamente sobre este problema de aplicación de configuración. Encontré dos maneras relativamente convenientes de hacer lo que estaba pidiendo. Puse mis pensamientos al respecto y escribí una entrada de blog here.

+0

La publicación de blog vinculada tiene dos métodos, el segundo de los cuales funcionó para mí. En caso de que el enlace muera, solo busque "applicationSettings configSource" para encontrar la información relevante. – HotN

Cuestiones relacionadas