2012-04-12 12 views
6

Ich lese Artikel, Forum Beiträge über ApplicationSettings für fast eine Woche jetzt.Wie die ApplicationSettings einer Klassenbibliothek in die Konfigurationsdatei des Host-Executable zusammengeführt werden

In fast jedem Thread gibt es jemanden, der zu Recht darauf hingewiesen zu haben scheint, dass die Klassenbibliotheken nicht Konfigurationsdateien haben können, wenn sie entfaltet und ihre application bei Design konfigurierte muss angegeben werden/fusionierten in der ausführbaren .exe.config Konfigurationsdatei der Anwendung, Host/verbraucht die DLL.

Nicht unbedingt wahr.

Sie können diese Klassenbibliothekseinstellungen aber nicht zusammenführen, es sei denn, Sie möchten dem Benutzer die Möglichkeit geben, die Standardwerte zu überschreiben - die mit dem in der Assembly hartcodierten DefaultValueAttribute.

Also, für ein sehr einfaches, praktisches Beispiel. Lass uns VB.NET verwenden 1. Ich habe ein Klassenbibliotheksprojekt namens ClassLibrary erstellt. 2. Zeigen Sie alle Dateien an, erweitern Sie MyProject, doppelklicken Sie auf Settings.settings. 3. Hinzufügen einer Einstellung namens Nachricht, Anwendungsbereich, dessen Wert "Hello!" Ist. 4. Erstellen Sie eine Eigenschaft in Class1.vb (die automatisch hinzugefügt Klasse)

Public Class Class1 

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

End Class 
  1. ein VB-WinForms-Projekt erstellen und es WinForm nennen.
  2. Fügen Sie einen Verweis auf das ClassLibrary-Projekt hinzu.
  3. Fügen Sie dem bereits erstellten Form1 eine Schaltfläche hinzu und doppelklicken Sie darauf. 8 Fügen Sie dem Handler Button1_Click den Code hinzu. Sollte so aussehen.

    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. Have WinForm "Als Startprojekt"

Jetzt, während in der IDE alles wunderbar funktioniert. Führen Sie die Lösung aus und Sie erhalten das erwartete Hallo! wenn Sie den Knopf drücken. Wenn Sie gehen und ändern Sie die Einstellung in der app.config der Bibliothek zu sagen "Auf Wiedersehen!" Und wenn Sie die Lösung erneut ausführen, erhalten Sie ein "Auf Wiedersehen!"

Klicken Sie jedoch mit der rechten Maustaste auf das WinForm-Projekt und "Öffnen im Explorer" und gelangen Sie in den Debug-Ordner. Es gibt noch keine WinForm.exe.config-Datei. Lass uns schnell eins erstellen. Wechseln Sie zurück zu VS, und klicken Sie während das WinForm-Projekt ausgewählt ist auf Alle Dateien anzeigen. Erweitern Sie MyProject, öffnen Sie Settings.settings, erstellen Sie eine Einstellung (egal was) und speichern Sie sie. Dort wird eine App.config erstellt und wenn ich diese Lösung erstellen, wird der Debug-Ordner eine WinForm.exe.config enthalten.

Sag mir, wie ich

<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> 

so kann ich die Nachricht ändern Einstellung des Wertes in der WinForm meine Botschaft Einstellung aus der Klassenbibliothek Config

<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> 

in die config WinForm verschmelzen.exe.config zu etwas anderem und die Anwendung wird diesen neuen Wert anzeigen, der das DefaultValueAttribute überschreibt.

Antwort

3

Ich habe in letzter Zeit einige Untersuchungen für diese AnwendungEinstellungen Problem gemacht. Ich fand zwei relativ bequeme Möglichkeiten, das zu tun, wonach ich fragte. Ich habe meine Gedanken darüber zusammen und schrieb einen Blog-Eintrag here.

+0

Der verlinkte Blogbeitrag hat zwei Methoden, die zweite funktionierte für mich. Falls die Verbindung jemals abstürzt, suchen Sie einfach nach "applicationSettings configSource", um die relevanten Informationen zu finden. – HotN

Verwandte Themen