2013-09-30 7 views
20

Meine app.config Datei ist wie folgt:ConfigurationManager.GetSection Gibt Fehler „Typ konnte nicht geladen werden .... von der Montage ...“

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="ProcessConfiguration" type="Configuration.ProcessConfigurationSection, Configuration" /> 
    </configSections> 
    <ProcessConfiguration> 
     <processes> 
      <process name="Process1" /> 
     </processes> 
    </ProcessConfiguration> 
</configuration> 

ich folgende (separat) Klassen müssen holen Sie sich die Konfiguration:

namespace Configuration 
{ 
    using System.Configuration; 

    public class ProcessesConfigurationSection : ConfigurationSection 
    { 
     [ConfigurationProperty("processes", IsDefaultCollection = false)] 
     [ConfigurationCollection(typeof(ProcessCollection))] 
     public ProcessCollection Processes 
     { 
      get 
      { 
       return (ProcessCollection)base["processes"]; 
      } 
     } 
    } 
} 

namespace Configuration 
{ 
    using System.Configuration; 

    public class ProcessCollection : ConfigurationElementCollection 
    { 
     public ProcessConfig this[int index] 
     { 
      get 
      { 
       return (ProcessConfig)BaseGet(index); 
      } 

      set 
      { 
       BaseAdd(index, value); 
      } 
     } 

     protected override object GetElementKey(ConfigurationElement element) 
     { 
      return ((ProcessConfig)element).Name; 
     } 

     protected override ConfigurationElement CreateNewElement() 
     { 
      return new ProcessConfig(); 
     } 
    } 
} 

namespace Configuration 
{ 
    using System.Configuration; 

    public class ProcessConfig : ConfigurationElement 
    { 
     [ConfigurationProperty("name", IsRequired = true, IsKey = true)] 
     public string Name 
     { 
      get 
      { 
       return (string)this["name"]; 
      } 
      set 
      { 
       this["name"] = value; 
      } 
     } 
    } 
} 

jedoch, wenn ich diese Codezeile getroffen:

var processConfigurationSection = ConfigurationManager.GetSection("ProcessConfiguration") as ProcessesConfigurationSection; 

Ich erhalte den Fehler in dem es heißt:

ist ein Fehler aufgetreten den Konfigurationsabschnitt Handler für ProcessConfiguration erstellen: Typ konnte nicht ‚Configuration.ProcessConfigurationSection‘ aus Assembly ‚Konfiguration‘ laden.

Ich bin völlig ratlos, wenn mir jemand helfen kann, würde ich es wirklich zu schätzen wissen.

+0

Sie wollen dies mit dem [Fusion-Protokoll-Viewer.] (Http://msdn.microsoft.com/en-us/library/e74a18c4.aspx) Debuggen Sie einfach sicherstellen, dass es als Admin ausgeführt wird, schalten Sie es ein das Protokoll und Neustart vor dem Debuggen. Sie werden sehen, wo die CLR nach der Assembly sucht und welche Version und von wo aus ermittelt wird, warum sie nicht gefunden wird, wenn das der Fall ist. – Will

+0

Wie lautet der Name der DLL, die Sie erstellen? –

+0

Ist Ihr Typ 'ProcessesConfigurationSection' in der Eingabeassembly definiert? –

Antwort

40

In der Zeile:

<section name="ProcessConfiguration" type="Configuration.ProcessConfigurationSection, Configuration" /> 

Der Name ‚Konfiguration‘ auf die DLL beziehen sollten, die Sie Gebäude wieder, versuchen Sie diese und korrigieren, wenn nötig zu überprüfen.

Auch ich denke, Sie einen Tippfehler haben kann, in Ihrem Code der Typname ist:

ProcessesConfigurationSection 

(Beachten Sie die Prozesse vs Process)

+0

Danke, der Name der kompilierten binary ist Configuration.exe, also denke ich, dass ich diese Zeile korrekt habe? – RichardB

+1

Siehe Zusatz, ich denke, das könnte ein Tippfehler –

+0

D'oh! Das war es, danke Justin :) – RichardB

3

Dieser Fehler ausgelöst wurde, da die Montage couldn Berufung auf‘ t Laden Sie den Klassentyp in der angegebenen Assembly. Dieser Fehler kann durch einen Raum nach dem Typnamen verursacht werden (was mir passiert ist), zum Beispiel die folgende Konfiguration Abschnitt

type="Configuration.ProcessConfigurationSection , Configuration" 

wird zu diesen Fehler erzeugen.