2010-05-25 7 views
18

J'ai une DLL qui fournit la journalisation que j'utilise pour les projets WebForms et que je souhaite maintenant utiliser dans un projet ASP.Net MVC 2.applicationSettings et Web.config

Certains aspects de cette DLL sont configurés dans app.config:

<configuration> 
    <configSections> 
      <section name="Tools.Instrumentation.Properties.Settings" 
        type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
        requirePermission="false" /> 
     </sectionGroup> 
    </configSections> 

<applicationSettings> 
     <Tools.Instrumentation.Properties.Settings> 
      <setting name="LogLevel" serializeAs="String"> 
       <value>DEBUG</value> 
      </setting> 
      <setting name="AppName" serializeAs="String"> 
       <value>MyApp</value> 
      </setting> 
      <setting name="Port" serializeAs="String"> 
       <!--value>33333</value--> 
       <value>0</value> 
      </setting> 
     </Tools.Instrumentation.Properties.Settings> 
    </configuration>  

Cependant, lorsque je crée une entrée similaire dans Web.config, je reçois l'erreur:

Unrecognized configuration section applicationSettings

Mes deux parties question:

  • Comment faire pour que cette entrée de configuration fonctionne dans Web.config?
  • Où puis-je lire les différences conceptuelles entre la configuration de WinForms et la configuration d'ASP.Net?

Répondre

48

Votre fichier de configuration a été tout simplement manquant le groupe de section applicationSettings:

<configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="Tools.Instrumentation.Properties.Settings" 
       type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
       requirePermission="false" /> 
    </sectionGroup> 
</configSections> 

Si vous ajoutez, vous pouvez mettre votre section Paramètres dans la balise et votre assemblée devrait lire comme normal.

+6

J'ai l'intuition que c'est une meilleure réponse. –

+0

En effet, c'est. Accepté. –

+1

Si quelqu'un d'autre est confus, le 'sectionGroup' peut être copié directement du fichier' * .dll.config' dans la section 'webconfig' du fichier' configSections'. Ensuite, la section 'applicationSettings' peut ensuite être copiée comme elle l'est aussi. – cjbarth

3

Notez l'attribut name de la section?

essayez de supprimer votre élément de l'emballage <applicationSettings>

<Tools.Instrumentation.Properties.Settings> 
     <setting name="LogLevel" serializeAs="String"> 
      <value>DEBUG</value> 
     </setting> 
     <setting name="AppName" serializeAs="String"> 
      <value>MyApp</value> 
     </setting> 
     <setting name="Port" serializeAs="String"> 
      <!--value>33333</value--> 
      <value>0</value> 
     </setting> 
    </Tools.Instrumentation.Properties.Settings> 

Maintenant, vous pouvez utiliser la section. Mais vous n'avez pas la classe wrapper que vous aurez besoin de faire un peu plus de travail pour obtenir vos valeurs en utilisant ConfigurationManager. En ce qui concerne la deuxième partie de votre question, d'un point de vue, il y a peu ou pas de différence dans la manière dont les fichiers de configuration sont traités par une application Web par rapport à une application de formulaires.

La seule différence importante qui peut ou ne peut pas être pertinente ici est la façon dont les fichiers web.config peuvent être mappés hiérarchiquement, chaque fichier suivant augmentant ou modifiant efficacement la configuration parent, lorsqu'il est autorisé. Mais il s'agit plus d'une différence de comportement par opposition à une différence fonctionnelle, à mon avis.

4

Voici la version .NET 4 de la configuration manquante:

<configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="Tools.Instrumentation.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
</configSections> 

Assurez-vous de mettre à jour l'espace de noms name valeur d'attribut du <section> pour correspondre à votre propre.

Questions connexes