2014-02-07 4 views
13

Ich habe eine Frage bezüglich AppSettings in C#. Zuerst beschreibe ich meine Situation.Welche Verwendung hat die Standarddatei (Assembly) .dll.config für .NET-Assemblies?

Meine Lösung besteht aus einem ausführbaren Programm program.exe und einem assembly.dll.

Das Programm verweist auf die Baugruppe und arbeitet damit. Das Assembly-Projekt verfügt über Anwendungseinstellungen, die mit dem Visual Studio-Projekteinstellungen-Manager eingerichtet wurden. Jetzt, wenn ich meine Lösung in meinem Ordner kompiliere, gibt es eine assembly.dll.config Datei, die die Einstellungen enthält, die ich früher eingerichtet habe.

Nun ist die Sache, die ich verstehe nicht: in meinem Programm-Projekt, bei dem ich die assembly.dll Referenz I CopyLocal=True geprüft haben, aber in meinem program\bin\release Ordner gibt es nur die assembly.dll aber nicht die assembly.dll.config Datei aber immer noch die assembly.dll kennt die Einstellungen, die ich in den Anwendungseinstellungen des Assembly-Projekts eingerichtet habe.

Jetzt habe ich mehrmals gelesen, dass Assemblies immer auf die Einstellungen des ausführbaren Programms zugreifen, aber das Programm hat keine entsprechenden Einstellungen, also warum kennt die Baugruppe die richtigen Einstellungen, wenn keine assembly.dll.config Datei vorhanden ist?

Ich nehme an, dass die Einstellungen in der Assembly kompiliert werden (natürlich), aber dann macht es keinen Sinn, dass in meinem Assembly \ bin \ release-Ordner tatsächlich eine assembly.dll.config-Datei ist.

Ich habe versucht, diese Datei in meinen program\bin\release Ordner kopieren, wo die assembly.dll zu auf Build-Aktion kopiert wird, aber die assembly.dll einfach ignoriert, wenn es eine assembly.dll.config Datei in dem gleichen Ordner ist. Es verwendet immer die Einstellungen von compiletime. Ich verstehe einfach nicht die Verwendung der assembly.dll.config Datei. Warum wird es erstellt, wenn es sich nie auf das Verhalten assembly.dll´s auswirkt?

+0

Haben Sie dort auch eine program.exe.config Datei haben aber? Sind die Einstellungen damit verschmolzen? –

+0

Ja mein Programm.exe hat auch eine Konfigurationsdatei, aber es enthält nur die Konfigurationen für das Programm.Sie sind völlig anders als die Konfiguration der Baugruppe, also kann ich das ganz sicher sagen. – thoros1179

Antwort

7

Die Standardwerte sind in die DLL-Datei integriert. Sie können diese Einstellungen natürlich noch ändern, aber Sie tun dies in der config.exe config, indem Sie stattdessen auf die Assembly-Einstellungen mit einem Abschnitt in configSeconds/sectionGroup verweisen. Die Assembly-Einstellungen können dann in den applicationSettings geändert werden, indem ein XML-Block mit demselben Namen wie der Abschnitt erstellt wird.

Das Abschnitts-Tag in der Abschnittsgruppe kann einfach aus der app.config-Datei Ihres Assembly-Projekts kopiert werden. Auf diese Weise wird das Token, der Name usw. korrekt sein. Dasselbe gilt für den Teil applicationSettings. Kopieren Sie es einfach aus der app.config im Assembly-Projekt und in die app.config-Datei des program.exe-Projekts.

Beispiel program.exe.config:

<configuration> 
    <configSections> 
    ... references to all dll settings ... 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="MyAssemblyNamespace.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    ... more config stuff... 
    <applicationSettings> 
    ... override your dll settings ... 
    <MyAssemblyNamespace.Properties.Settings> 
     <setting name="MaxUserNameLength" serializeAs="String"> 
      <value>100</value> 
     </setting> 
    </MyAssemblyNamespace.Properties.Settings> 
    </applicationSettings> 
+1

Sie haben Recht. Das Kopieren meiner Baugruppeneinstellungen in die Datei "programm.exe.config" funktioniert, und die Baugruppe verwendet diese Einstellungen. Ich nehme also an, dass die automatische Erstellung der Datei assembly.dll.config nur dazu dient, Dinge in eine andere Konfigurationsdatei zu kopieren. – thoros1179

+0

Visual Studio kann auch feststellen, ob Ihre Assembly .config und .settings nicht mehr synchron sind. In diesem Fall bietet es an, die Dateien für Sie zu synchronisieren. Das bedeutet, dass Sie auch andersherum gehen können: Passen Sie Ihre Einstellungen in den Programmeinstellungen an und kopieren Sie die Werte einfach als neue Standardwerte zurück. – Holstebroe

1

Es ist gültig für eine Assembly, um eine beliebige Konfigurationsdatei zu öffnen, die die Methode OpenExeConfiguration verwendet. Auf diese Weise kann auf ihre eigene Konfiguration anstatt auf diejenige zugegriffen werden, die implizit von der ausführenden Assembly verfügbar ist. Dies ist nicht üblich, aber es gibt nichts, was Sie daran hindern könnte.

Wenn Ihre Assembly ohne die Konfigurationsdatei korrekt funktioniert, dann klingt es so, als hätte es einen vernünftigen Satz von Standardwerten, den es verwendet, wenn es die entsprechende Konfiguration nicht findet.

Verwandte Themen