IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur "la référence d'objet n'est pas définie à une instance d'objet"


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut Erreur "la référence d'objet n'est pas définie à une instance d'objet"
    Bonsoir tout le monde,

    je bosse avec VS 2005, je fais du c#, je fais un setup et je me prends la tete depuis qq jours sur une erreur...

    Alors voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ....
     
    XmlDocument xmlDoc1 = new XmlDocument();
    xmlDoc1.Load(CheminInetPub + strNomFichierConfig1);	
    //MessageBox.Show(xmlDoc1.LastChild.Name);
     
     
    // Modification des noeuds XML
    XmlNode logNode = xmlDoc1.SelectSingleNode("//appSettings/add[@key='strConnexionBD']");
     
    logNode.Attributes["value"].InnerText = strChaineConnexionSQL;
    ....
    ça bloque à la ligne de sélection du noeud et ça m'affiche le message d'erreur "la référence d'objet n'est pas définie à une instance d'objet". Je ne comprends pas le problème !

    Mon message box m'affiche "configuration", ce qui semble normal aussi. Mon fichier est bien chargé.

    voila le début de mon fichier xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" ?> 
    - <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
    - <appSettings>
      <add key="strConnexionBD" value=".........." /> 
      <add key="strSMTPServeur" value="........" /> 
    ....
      </appSettings>
    ....
    J'ai bien un noeud appSettings. J'ai essayé en faisant ma requete XPath autrement mais apparemment ça ne vient pas de ça. Mon fichier web.config contenant ce code xml vient d'être créer par IIS, j'ai vérifié les droits et à priori il n'y a pas de pb.

    Je ne comprends pas du tout le pb, j'ai essayé pleins de trucs, sans succès... Quelqu'un a déjà eu ce pb et pourrait m'éclairer sur le sujet ?

    Je vous remercie d'avance en tout cas parce que là, je ne vois pas... je ne vois plus rien

    Si je n'ai pas été assez clair, n'hésitez pas à me demander des précisions

    bonne soirée

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    cette erreur est une erreur d'execution ca..
    ca t'indique que tu manipules une référence vide.

    si tu fait ca

    BinaryReader br = null;
    string a = br.ReadLine();

    Ce code est syntaxiquement correct, même sémantiquement, mais pourtant ce code est invalide. En effet, il génère une exception du meme type que le tiens.

    Ce qui serait vraiment intéressant pour t'aider c'est la trace de l'exception.
    (Le stacktrace : l'état de la pile)

  3. #3
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Tu es sure que ça bloque à cette ligne et non à celle d'après.
    Moi j'aurais bien vu logNode = null.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Oups tu as raison Skyrunner, ça bloque à la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    logNode.Attributes["value"].InnerText = strChaineConnexionSQL;
    En fait, dès que j'essaye d'accéder à un élément de mon noeud, ça ne marche pas. Je ne comprends pas pourquoi ça ne selectionne pas mon noeud...

    Sinon mon erreur dans le journal d'évémenements c'est :
    La description pour l'ID d'événement ( 11001 ) dans la source (MsiInstaller) est introuvable. L'ordinateur local n'a peut-être pas les informations de Registre ou les librairies requises pour afficher les messages émanant d'un ordinateur distant. Vous pourrez peut-être utiliser l'option /AUXSOURCE= pour récupérer cette description. Reportez-vous aux rubriques Aide et support pour plus de détails. Les informations suivantes font partie de l'événement : Produit*: IVS -- Erreur 1001. La référence d'objet n'est pas définie à une instance d'un objet.; (NULL); (NULL); (NULL).
    Je vais regarder pour l'état de la pile (car je ne sais pas faire )

    merci encore

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Alors je me suis servie de stracktrace, peut etre pas comme il faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    try
    {
    	logNode.Attributes["value"].InnerText = strChaineConnexionSQL;
    }
    catch (Exception Ex)
    {
     
    	if (Ex.InnerException != null)
    	{
    	MessageBox.Show(Ex.InnerException.Message + " ----- " + Ex.InnerException.StackTrace
    					+ " ----- " + Ex.InnerException.Source);
    	}
    	else
    	{
    	MessageBox.Show(Ex.Message + " -- " + Ex.StackTrace
    						+ " -- " + Ex.Source);
    	}
    }
    et ça m'a affiché le message suivante :
    La référence d’objet n’est pas définie à une instance d’objet –- à LibrairieSetupServeur.clsInstallerServeur.Install(IDictionnary stateSaver) -- LibrairieSetupServeur
    Ex.InnerException est null.

    J'ai peut etre pas affiché les bons trucs.... Parce que là, ça m'affiche juste le nom de la méthode qui coince mais ça je le sais déjà

  6. #6
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Tu t'embete pour rien. Il existe des classes permettant de lire un fichier de configuration (.config).

    Je te renvoie à la FAQ:
    http://faqcsharp.developpez.com/?pag...p_config_write

    et à d'autres topics:
    http://www.developpez.net/forums/sho...+configuration

    http://www.developpez.net/forums/sho...+configuration
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Excusez moi si je dis des bétises, je ne suis pas une pro mais en fait, le code que j'ai, marche sane problème pour mon autre projet de déploiement (sauf que mes fichiers de config ne sont pas dans les répertoires de IIS), et ce n'est pourtant pas trop compliqué de se ballader dans un fichier xml.

    J'ai regardé les liens que tu m'as donné The_badger_man.

    J'ai pris ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    j'ai essayé de mettre mon chemin à la place de ConfigurationLevel.None, c'est à dire celui de mon fichier web.config qui est dans le dossier Inetpub\wwwroot de IIS. Mais la méthode OpenExeConfifuration attend un string exepath c'est à dire le chemin d'accès au fichier de configuration associé au fichier exécutable. Et du coup j'ai une erreur comme quoi "une erreur s'est produite lors du chargement du fichier de configuration. Le paramètre "exePath" n'est pas valide.

    Je suis perdue.... je dois lui passer quoi ??

    Merci bcp pour votre aide

  8. #8
    Inscrit Avatar de bilb0t
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    378
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 378
    Points : 283
    Points
    283
    Par défaut
    Si tu veux lire les appsettings d'un web.config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string taValue = System.Configuration.ConfigurationManager.AppSettings["tonName"]

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Je veux bien faire ça mais comment je fais pour spécifier sur quel fichier web.config je travaille ?

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Une application ne contient toujours qu'un seul fichier config. Donc le problème ne doit pas se poser.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    oui je suis d'accord mais en fait, je bosse sur un setup qui créé 2 sites web avec IIS. J'ai crée une classe Installer, dans laquelle je configure les fichiers web.config des 2 sites qui viennent d'être créé.

    Et donc je ne vois pas comment spécifier mon fichier pour ensuite utiliser la ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string taValue = System.Configuration.ConfigurationManager.AppSettings["tonName"]
    Merci d'avance

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    as tu essayé cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode logNode = xmlDoc1.SelectSingleNode("//appSettings/add[key='strConnexionBD']");
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    ce n'est pas cette ligne là qui pose pb, il faut bien un @ quand on travaille avec les attributs en Xpath. Enfin j'ai quand même essayé ta ligne, mais ça ne change rien, il y a toujours une erreur à la ligne suivante. Merci quand meme

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Si cela bloque a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    logNode.Attributes["value"].InnerText = strChaineConnexionSQL;
    Vu ton erreur c'est parce que lognode est null, comme le pense Skyrunner.
    Donc c'est que cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XmlNode logNode = xmlDoc1.SelectSingleNode("//appSettings/add[@key='strConnexionBD']");
    est incorrecte.

    Je n'ai pas utilisé ces objets, mais je suppose que la méthode "SelectSingleNode" de "xmlDoc1" renvois un XmlNode. La seule raison pour qu'elle ne le fasse pas c'est que l'opération s'est mal passé. Et vu que son seul argument est le string que tu as passé, je pense que l'erreur viens de l'écriture du string ou du contenu du fichier (manque une balise, ou autre chose du genre).

    Voilà ce que je pense, après je ne peu plus rien apporter à la discussion (si j'ai apporté quelque chose) cela dépasse mes compétences (pas encore fait d'xml).
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Citation Envoyé par SaumonAgile
    Une application ne contient toujours qu'un seul fichier config. Donc le problème ne doit pas se poser.
    Dans un env web on peut placer plusieurs web.config, mais il en faut obligatoirement un à la racine.

    Lors de l'ouverture d'une page, le serveur mate le répertoire de la page à la recherche du config, puis remonte récursivement jusqu'à la racine. Toutes les options peuvent ainsi etre -ou pas- localisées dans un répertoire.
    On peut changer la méthode d'identification pour un seul répertoire en ne plaçant dans le dit web.config que la portion "authentification mode". Les autres options sont hérités depuis le/les web.config parent.

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Fonctionnement très intéressant et très pratique, j'avais développer un script vbs fonctionnant de la même façon, il cherchait les fichiers de config en partant du fils et en remontant vers la racine. C'est très pratique, cela permet de "spécialiser" un répertoire.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Vi, enfin c'était juste un petit hors sujet : finalement en env web on ne peux pas dire qu'il n'y a qu'un fichier config :
    il peut y avoir plusieurs fichier config, donc plusieurs sections de config "system.Web", mais une seule section "appsettings"....
    Lors de l'accès traditionnel à ces valeurs, l'application ne regardera que le fichier web.config situé à la racine (donc la remarque de saumon agile est toujours juste)

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Points : 18
    Points
    18
    Par défaut
    Bon...problème résolu... je vais me faire taper C'était un problème dans mon fichier XML (enfin c'est pas le mien, c'est celui de la boite où je fais mon stage hein )

    J'avais déjà enlevé les commentaires dans le fichier XML car j'avais des doutes et il s'avère qu'il faut aussi enlever "xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" ".

    J'ai bien vérifié et ça marche comme ça ! Je pense que c'est parce que l'adresse n'est plus valide... Par contre, je ne comprend pas pourquoi le fait qu'il y ait des commentaires ça fait que ça ne marche pas... Mais bon, tant pis, le principal c'est que ça marche maintenant, ça m'a fait perdre assez de temps comme ça.

    Merci beaucoup en tout cas à tout ceux qui m'ont aidé

    *********************************

    Au passage pour ceux que ça intéresse voilà comment j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //chargement du fichier xml
    XmlDocument xmlDoc1 = new XmlDocument();
    xmlDoc1.Load(chemin pour accéder au fichier.config);
     
     
    //on selectionne le noeud voulu avec une requete XPATH
    //ici c'est le noeud add qui a pour valeur d'attribut key "strConnexionBD"
    XmlNode logNode = xmlDoc1.SelectSingleNode("//appSettings/add[@key='strConnexionBD']");  
     
    //on modifie la valeur de l'attribut
    logNode.Attributes["value"].InnerText = maChaineDeConnexion;
    et voila

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Citation Envoyé par alicia1984
    et il s'avère qu'il faut aussi enlever "xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" ".
    eu...


    Voici une déclaration de base pour un web.config en .Net 2.0 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
        <configSections>
                 ...
    </configSections>
     
        <appSettings>
            <add key="tapremiereclefs" value="bouboubou.com" />
        </appSettings>
     
        <connectionStrings>
         ....
        </connectionStrings>
     
        <system.web>
    blablabla...
       </system.web>
     
       <pleindautretrucs></pleinmachin>
     
    </configuration>

  20. #20
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Youpi j'avais raison .

    J'ai bien vérifié et ça marche comme ça ! Je pense que c'est parce que l'adresse n'est plus valide... Par contre, je ne comprend pas pourquoi le fait qu'il y ait des commentaires ça fait que ça ne marche pas... Mais bon, tant pis, le principal c'est que ça marche maintenant, ça m'a fait perdre assez de temps comme ça.
    Le mieux ce serait de découvrir pkoi parce qu'un jour le problème peut revenir (et sous une autre forme) et tu perdras de nouveau du temps à chercher pouquoi.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] La référence d'objet n'est pas définie à une instance d'objet
    Par Crowww dans le forum VB.NET
    Réponses: 27
    Dernier message: 28/05/2013, 15h53
  2. Réponses: 4
    Dernier message: 08/01/2013, 12h11
  3. Réponses: 1
    Dernier message: 24/02/2011, 12h01
  4. Réponses: 4
    Dernier message: 14/04/2010, 08h47
  5. La référence d'objet n'est pas définie à une instance d'objet
    Par Delphi-ne dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/07/2009, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo