web-dev-qa-db-fra.com

Je reçois le message "manque une directive d'utilisation ou une référence à une assemblée" et aucune idée de ce qui ne va pas

J'essaie de permettre à un utilisateur d'entrer des données dans une zone de texte qui sera ajoutée au fichier web.config. J'ai ajouté les lignes pertinentes au fichier web.config, mais lorsque je crée cette classe, tout se passe mal.

Je continue de recevoir le message d'erreur qui vous manque lorsque vous essayez d'exécuter mon application. J'ai regardé les autres fois où cette question a été posée et n'arrive pas à comprendre où je me trompe. Le fait est que je suis extrêmement novice dans Visual Studio et que je ne sais pas ce qui pourrait être la réponse.

Ci-dessous, le fichier de classe qui génère l'erreur. J'espère avoir inclus tout ce dont vous avez besoin pour m'aider. Je vous remercie.

 using System.Collections.Generic;
 using System.Linq;
 using System.Configuration; 


namespace WebConfigDemo
{    
public class CompanyConfigSection : ConfigurationSection   
{       
    [ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]   
    public CompanyConfigCollection Companies       
    {
        get           
        {              
        return (CompanyConfigCollection)this[""];           
        }            
        set            
        {            
            this[""] = value;            
        }       
    }   
}     
public class CompanyConfigElement : ConfigurationElement   
{      
                [ConfigurationProperty("id", IsKey = true, IsRequired = true)]        
    public int Id        
                {            
                    get      
                {                
                        return (int)this["id"];            
                    }            
                    set           
                    {               
                        this["id"] = value;          
                }    
                }         
    [ConfigurationProperty("name", IsRequired = true)]        
    public string Name        
    {            
        get           
        {            
                    return this["name"].ToString();            
        }           
        set           
        {               
            this["name"] = value;           
        }    

    }   
} ' 
public class CompanyConfigCollection : ConfigurationElementCollection    
{       
    protected override ConfigurationElement CreateNewElement()     
{          
    return new CompanyConfigElement();       
    }       
    protected override object GetElementKey(ConfigurationElement element)     
    {          
        return ((CompanyConfigElement)element).Id;        
    }   
}    
public class CompaniesConfig   
{    
            private static readonly Dictionary<int, CompanyConfigElement> 
                Elements;         
    static CompaniesConfig()       
    {         
                Elements = new Dictionary<int, CompanyConfigElement>();       
                var section = (CompanyConfigSection)ConfigurationManager.GetSection          ("companies");           
                foreach (CompanyConfigElement system in section.Companies)        
                    Elements.Add(system.Id, system);       
    }        
    public static CompanyConfigElement GetCompany(int companyId)       
    {          
                        return Elements[companyId];   
    }      
            public static List<CompanyConfigElement> Companies        
            {          
                get
                {
                    return Elements.Values.ToList(); 
                }      
            }  
}
}  '

Toute aide est appréciée

10
Scubacode

Vous n'avez probablement pas la dll System.Configuration ajoutée aux références du projet. Ce n'est pas là par défaut et vous devez l'ajouter manuellement.

Cliquez avec le bouton droit sur les références et recherchez System.Configuration dans les assemblys .net.

Vérifiez si c'est dans vos références ...

enter image description here

Cliquez avec le bouton droit de la souris et sélectionnez Ajouter une référence ...

enter image description here

Recherchez System.Configuration dans la liste des assemblys .Net, sélectionnez-le, puis cliquez sur OK ...

enter image description here

L'Assemblée devrait maintenant apparaître dans vos références ...

enter image description here

18
John Kraft

La structure .Net de la dll de référencement doit être identique à la version du projet .Net dans laquelle la dll est référée

4
Gayatri Dingare

J'ai observé une citation ' dans votre première ligne et également à la fin de votre dernière ligne.

'using System.Collections.Generic;

Est-ce présent dans votre code original ou une erreur de formatage?

0
Microsoft DN

Vos déclarations using semblent correctes.

Vous manque-t-il peut-être la référence d'assembly à System.configuration.dll?

Faites un clic droit sur le dossier "Références" de votre projet et cliquez sur "Ajouter une référence ..."

0
Samuel Parkinson

Ce problème venait du fait que votre application manquait une référence à une dll externe à partir de laquelle vous essayez d'utiliser du code. Habituellement, Visual Studio devrait vous donner une idée des objets avec lesquels il ne sait pas quoi faire. Cela devrait donc être un pas dans la bonne direction.

Vous devez regarder dans l'explorateur de solutions, cliquer avec le bouton droit de la souris sur les références du projet, puis aller à ajouter -> et rechercher celle dont vous avez besoin. Il est fort probable que l’assemblage System.Configuration, comme l’ont indiqué la plupart des utilisateurs, devrait figurer dans l’option Cadre de la fenêtre des références. Cela devrait résoudre votre problème.

0
Jesse Carter

J'ai eu le même problème plus tôt aujourd'hui. Je ne pouvais pas comprendre pourquoi le fichier de classe auquel je tentais de faire référence n'était pas vu par le compilateur. J'avais récemment changé l'espace de noms du fichier de classe en question en un espace de noms différent mais déjà existant. (J'avais aussi utilisé des références aux nouveaux et anciens espaces de noms de la classe où j'essayais de l'instancier)

Lorsque le compilateur me disait qu'il me manquait une référence lorsque j'essayais d'instancier la classe, j'ai cliqué avec le bouton droit de la souris et appuyé sur "générer un stub de classe". Une fois que Visual Studio a généré un stub de classe pour moi, j'ai copié et collé le code de l'ancien fichier de classe dans ce stub, enregistré le stub et, lorsque j'ai essayé de compiler à nouveau, cela fonctionnait! Pas d'issues.

Peut-être une solution spécifique à ma construction, mais ça vaut le coup d'essayer.

0
Alex Vallejo