2009-01-16 5 views
14

Je suis bloqué! Cela semble vraiment stupide mais je ne peux pas voir où je vais mal. Je crée un site Web 2.0 C# ASP.NET. Je suis en train d'utiliser une section personnalisée dans le fichier web.config avec:C# ConfigurationManager.GetSection n'a pas pu charger le fichier ou l'assemblage

DatabaseFactorySectionHandler sectionHandler = ConfigurationManager.GetSection("DatabaseFactoryConfiguration") as DatabaseFactorySectionHandler; 

J'ai une DLL séparée pour les objets qui se trouvent dans l'espace de noms Bailey.DataLayer. Mais quand je lance la page test.aspx je reçois l'erreur suivante:

System.Configuration.ConfigurationErrorsException was unhandled by user code 

Message="An error occurred creating the configuration section handler for DatabaseFactoryConfiguration: Could not load file or assembly 'Bailey.DataLayer' or one of its dependencies. The system cannot find the file specified. (C:\\Documents and Settings\\Administrator.PIP\\My Documents\\Visual Studio 2005\\WebSites\\bailey\\web.config line 13)" 
Source="System.Configuration" 

La classe que je suis en train de faire est la suivante:

namespace Bailey.DataLayer 
{ 
    public sealed class DatabaseFactorySectionHandler : ConfigurationSection 
    { 
     [ConfigurationProperty("Name")] 
     public string Name 
     { 
      get { return (string)base["Name"]; } 
     } 

     [ConfigurationProperty("ConnectionStringName")] 
     public string ConnectionStringName 
     { 
      get { return (string)base["ConnectionStringName"]; } 
     } 

     public string ConnectionString 
     { 
      get 
      { 
       try 
       { 
        return ConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString; 
       } 
       catch (Exception excep) 
       { 
        throw new Exception("Connection string " + ConnectionStringName + 
             " was not found in web.config. " + 
             excep.Message); 
       } 
      } 
     } 
    } 
} 

Le fichier de configuration web a cette section:

<configSections> 
    <section name="DatabaseFactoryConfiguration" 
      type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" /> 
</configSections> 

Je l'ai fait dans une application de console sans problème, mais je ne vois pas de différences, sauf qu'il s'agit d'une page Web.

EDIT

Tout compile et jette l'erreur lors de l'exécution alors je ne peux que supposer qu'il trouve l'ensemble car il est référencé dans la page test.aspx.cs.

je l'instruction using suivante en haut de la page test.aspx.cs:

using Bailey.DataLayer; 

Voici l'ensemble du fichier web.config donc il n'y a pas de confusion:

<configuration> 
    <configSections> 
     <section name="DatabaseFactoryConfiguration" type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" /> 
    </configSections> 
    <appSettings/> 
    <connectionStrings> 
     <add name="BaileyMDFConString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bailey.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <DatabaseFactoryConfiguration Name="System.Data.SqlClient" ConnectionStringName="BaileyMDFConString" /> 
    <system.web>   
     <compilation debug="true"/>  
     <authentication mode="Windows"/> 
    </system.web> 
</configuration> 
+0

Où se trouve la section de configuration personnalisée proprement dite? –

+0

Eh bien, il y a votre problème ... Vous n'avez pas la section personnalisée. –

+0

Il est là, mais je ne peux pas obtenir le XML du fichier de configuration pour afficher correctement, ou du tout maintenant! – Jon

Répondre

25

Soit vous utilisez le mauvais nom (à-dire qu'il ne l'appelle pas Bailey.DataLayer.dll), ou il est pas copié dans le répertoire bin Surchauffe. Ce dernier ne semble cependant pas probable.

(Voir mes commentaires sur la question pour clarification).

+5

Merci Andrew! Il a cliqué., le nom de la DLL n'a pas été référencé dans la config web.Je n'ai pas réalisé qu'il était la DLL réelle que j'ai dû mettre, je pensais que c'était juste l'espace de nom – Jon

+0

ici http://msdn.microsoft.com/fr-fr/library/2tw134k3.aspx processus décibé de la section de configuration de la création.Et il y a une chose cet assembly avec section doit être au même niveau que webconfig où vous voulez l'utiliser, comme suit: Incluez l'assembly qui définit la section dans le même répertoire que le fichier Web.config. –

4

Vous avez besoin de deux entrées dans le fichier de configuration, une sur l'élément configSections pour déclarer la section de configuration personnalisée, et une autre - la section de configuration personnalisée elle-même. Avez-vous ajouté les deux?

par exemple:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

    <configSections> 
    **<section name="Connections" 
      type="System.Configuration.DictionarySectionHandler" />** 
    </configSections> 

    <Connections 
     <add key="myServer" value="serverName" /> 
     <add key="myPort" value="8080" /> 
     <add key="myURI" value="RequestUri" /> 
     <add key="UserId" value="joebob" /> 
     <add key="password" value="$^%^&%$^&@%" />   
    /> 

</configuration> 
+0

Salut Charles, J'ai édité mon post pour essayer de montrer le fichier de configuration complet (ne pas afficher correctement l'atm.) Mais je crois que c'est correct, je ne connaissais pas le DictionarySectionHandler qui est cool et que je vais utiliser dans le futur. – Jon

+0

+1 pour l'astuce à propos de System.Configuration.DictionarySectionHandler - choses faites tellement plus facile pour moi! – paulH

4

Ok ... J'ai eu le même problème. Aucune des solutions ci-dessus n'a aidé. Dans mon cas mon fichier de configuration était dans la même DLL que celle de web.config. J'ai simplement supprimé l'espace de noms de la section de configuration et cela a corrigé mon problème.

ne fonctionne pas

<configSections> 
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection, ProjectName.ClientApi.Filters" requirePermission="false"/> 

travail

<configSections> 
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection" requirePermission="false"/> 

Dès que je l'ai enlevé l'espace de noms , ProjectName.ClientApi.Filters il a commencé à travailler.

Questions connexes