none
Type ou espace de noms introuvable RRS feed

  • Question

  • Bonjour à tous !

    Je viens de débuter sur la plate forme Asp.net et je suis tombé sur les laboratoires du Coach Asp.net.

    Je tiens, avant toute chose, à témoigner ma gratitude au coach dont les labo m'ont permis de m'imprégner rapidement de cet environnement.

    Je me suis donc mis à réaliser les différents TP, mais le problème est que j'utilise VS 2010 au lieu de VS 2008.

    Ainsi, arrivez à l'atelier 6, je me retrouve devant un grand problème qui me bloque voilà bientôt un mois. Les différentes recherches que j'ai faites sur le net n'ont pas aidé. Voilà pourquoi je viens poster mon souci.

    En effet, le problème est que sous ASP.NET 2010, le dossier n'existe pas et je n'arrive pas utiliser la classe AnnonFavorites.vb en suivant les indications de l'atelier. A l'exécution, j'ai ce message : le type ou le noms d'espace 'AnnoncesFavorites' est introuvable (une directive using est peut-être manquante ?)

    Et là rien n'a faire, je ne sais pas gérer la rubrique 'Ma Sélection d'annonces' que je trouve très intéressante.

    Si le coach peut m'aider ...

    Merci !!!

    samedi 21 avril 2012 09:30

Toutes les réponses

  • Je pense qu'il faut mettre votre classe AnnoncesFavorites dans le bon namespace :

    NameSpace NomDeLappliWeb

    Public class AnnoncesFavorites

    End Class

    End Namespace


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 23 avril 2012 07:58
  • Merci monsieur Clark !

    Je vais essayer cela et je vous dis quoi !


    Patrick ASSANA

    lundi 23 avril 2012 09:35
  • Bonjour monsieur Clark !

    Je reviens vers vous car le problème n'a pas été résolu après avoir appliqué vos indications. Je me permets ainsi, sans abuser de votre temps, de vous donner de plus amples détails sur le problème.

    Au fait, il s'agit de créer (en se référant à l'atelier 6 du coach) une page Ma sélection d'annonces qui contenir les annonces retenus par un utilisateur donné.

    Il est question de créer un nouveau profile MaSelectionDAnnonces de type AnnoncesFavorites. J'ai ainsi ajouter la ligne suivante (en gras) dans web.conf :

        <profile enabled="true">
          <properties>
          <add name="MaSelectionDAnnonces"
                  type="acbforum.AnnoncesFavorites"
                  defaultValue="[null]"/>
          </properties>   
          <providers>
            <clear/>
            <add name="AspNetSqlProfileProvider"
                 type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
                 connectionStringName="ApplicationServices"
                 applicationName="/"
                    />
          </providers>
          </profile>

    Et la classe AnnoncesFavorites.vb se présente de la manière suivante :

    Imports Microsoft.VisualBasic
    Imports System
    Imports System.Web
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Collections.Generic
    Imports System.Configuration
    Imports System.Web.Profile
    Imports System.Xml.Serialization
    Imports System.Text

    Namespace acbforum (NomDeLappliWeb que j'ai ajouté suivant vos indications)
        '<summary>
        ' Cette classe AnnoncesFavorites encapsule un tableau d'entiers qui stocke les Ids des annonces
        ' favorites sélectionnées par l'utilisateur
        ' </summary>

        Public Class AnnoncesFavorites

            ' Ce champ ne doit pas être sérialisé !
            <XmlIgnore()> _
            Public Shared ReadOnly EmptyDataSet As DataSet = RecupererToutesLesAnnonces()

            Public _AnnoncesFavorites As List(Of Integer) = New List(Of Integer)

            Public Sub AjouterAnnonce(ByVal id As Integer)
                _AnnoncesFavorites.Add(id)
            End Sub

            Public Sub SupprimerAnnonce(ByVal id As Integer)
                _AnnoncesFavorites.Remove(id)
            End Sub

            Public Function EstDansListeAnnoncesFavorites(ByVal id As Integer) As Boolean

                Return (_AnnoncesFavorites.IndexOf(id) <> -1)
            End Function
            Public Function RecupererAnnoncesFavorites() As DataSet

                If _AnnoncesFavorites.Count = 0 Then
                    Return EmptyDataSet
                End If

                ' Construit une commande SELECT avec une clause IN
                Dim builder As StringBuilder = New StringBuilder("SELECT [Ann_Id], [Ann_Texte], [Ann_Telephone], [Ann_UserEmail], [Cat_Id] FROM [Annonces] WHERE Ann_Id IN (")

                Dim id As Integer
                For Each id In _AnnoncesFavorites

                    builder.Append(id.ToString())
                    builder.Append(",")
                Next

                builder.Remove(builder.Length - 1, 1) ' Supprimer la dernière virgule
                builder.Append(")")                   ' Ajouter la parenthèse à la fin de la requête

                ' Executer la commande SELECT
                Dim connection As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("csAcbForum").ConnectionString)
                Dim command As SqlCommand = New SqlCommand(builder.ToString(), connection)
                Dim adapter As SqlDataAdapter = New SqlDataAdapter(command)
                Dim ds As DataSet = New DataSet()
                adapter.Fill(ds)
                Return ds
            End Function

            Shared Function RecupererToutesLesAnnonces() As DataSet

                Dim connection As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("csAcbForum").ConnectionString)
                Dim command As SqlCommand = New SqlCommand("SELECT [Ann_Id], [Ann_Texte], [Ann_Telephone], [Ann_UserEmail], [Cat_Id] FROM [Annonces]", connection)
                Dim adapter As SqlDataAdapter = New SqlDataAdapter(command)
                Dim ds As DataSet = New DataSet()
                adapter.FillSchema(ds, SchemaType.Source)
                Return ds
            End Function
        End Class

        ' <summary>
        ' Cette classe AnnoncesFavoritesDB gère les appels à la classe AnnoncesFavorites et
        ' est directement invoquée par la couche de présentation pour rendre l'information dans les pages.
        ' </summary>
        Public Class AnnoncesFavoritesDB

            Public Function Selecte() As DataSet

                Dim Selection As AnnoncesFavorites = CType(HttpContext.Current.Profile("MaSelectionDAnnonces"), AnnoncesFavorites)
                If Selection Is Nothing Then
                    Return AnnoncesFavorites.EmptyDataSet
                End If
                Return Selection.RecupererAnnoncesFavorites()
            End Function

            Public Sub Delete(ByVal Ann_Id As Integer)

                Dim Selection As AnnoncesFavorites = CType(HttpContext.Current.Profile("MaSelectionDAnnonces"), AnnoncesFavorites)
                If Not (Selection Is Nothing) Then
                    Selection.SupprimerAnnonce(Ann_Id)
                End If
            End Sub
        End Class
    End Namespace

    Il est aussi question de faire appel à ce nouveau profile dans deux procédures :

    Public Class ConsulterAnnonces
        Inherits System.Web.UI.Page

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        End Sub

        Protected Sub ModifierLaSelection(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
            'Récupération de l’Id de l’annonce dans le paramètre de commande de l’évènement
            Dim Ann_Id As Integer = CType(e.CommandArgument, Integer)

            If e.CommandName = "Ajouter" Then
                'Valider qu'un tableau contenant la sélection d'annonces de l'utilisateur existe
                If Profile.MaSelectionDAnnonces Is Nothing Then
                    'Si non alors créer un nouveau tableau
                    Profile.MaSelectionDAnnonces = New acbforum.AnnoncesFavorites()
                End If

                'Ajouter l'Id de l'annonce sélectionné au tableau de sélection
                Profile.MaSelectionDAnnonces.AjouterAnnonce(Ann_Id)
            Else
                Profile.MaSelectionDAnnonces.SupprimerAnnonce(Ann_Id)
            End If
            DataList1.DataBind()

        End Sub

        Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs)
            'Récupération de l’Id de l’annonce dans le paramètre de commande de l’évènement
            Dim Ann_Id As Integer = CType(e.CommandArgument, Integer)

            If e.CommandName = "Ajouter" Then
                'Valider qu'un tableau contenant la sélection d'annonces de l'utilisateur existe
                If Profile.MaSelectionDAnnonces Is Nothing Then
                    'Si non alors créer un nouveau tableau
                    Profile.MaSelectionDAnnonces = New acbforum.AnnoncesFavoritesDB()
                End If

                'Ajouter l'Id de l'annonce sélectionné au tableau de sélection
                Profile.MaSelectionDAnnonces.AjouterAnnonce(Ann_Id)
            Else
                Profile.MaSelectionDAnnonces.SupprimerAnnonce(Ann_Id)
            End If
            DataList1.DataBind()

        End Sub
    End Class

    De ces faits, en exécutant l'appli, j'ai les erreurs suivantes :

    1. Message d'erreur du compilateur: CS0246: Le type ou le nom d'espace de noms 'AnnoncesFavorites' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)

    Erreur source:

    Ligne 17 : public class ProfileCommon : System.Web.Profile.ProfileBase {
    Ligne 18 :     
    Ligne 19 :     public virtual AnnoncesFavorites MaSelectionDAnnonces {
    Ligne 20 :         get {
    Ligne 21 :             return ((AnnoncesFavorites)(this.GetPropertyValue("MaSelectionDAnnonces")));


    Fichier source: c:\Users\Administrateur\AppData\Local\Temp\Temporary ASP.NET Files\root\6acf5c98\cc0311d0\App_Code.vrw4mnta.0.cs    Ligne: 19

    Afficher les résultats détaillés de la compilation:

    C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0> "C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe" /t:library /utf8output /R:"C:\Windows\assembly\GAC_MSIL\System.Drawing\2.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Runtime.Serialization\3.0.0.0__b77a5c561934e089\System.Runtime.Serialization.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.IdentityModel\3.0.0.0__b77a5c561934e089\System.IdentityModel.dll" /R:"C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Configuration\2.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.WorkflowServices\3.5.0.0__31bf3856ad364e35\System.WorkflowServices.dll" /R:"C:\Users\Administrateur\AppData\Local\Temp\Temporary ASP.NET Files\root\6acf5c98\cc0311d0\assembly\dl3\e850f933\008625b5_fb1fcd01\acbforum.DLL" /R:"C:\Windows\assembly\GAC_MSIL\System.Web.Mobile\2.0.0.0__b03f5f7f11d50a3a\System.Web.Mobile.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Xml\2.0.0.0__b77a5c561934e089\System.Xml.dll" /R:"C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.ServiceModel.Web\3.5.0.0__31bf3856ad364e35\System.ServiceModel.Web.dll" /R:"C:\Windows\assembly\GAC_32\System.Data\2.0.0.0__b77a5c561934e089\System.Data.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Data.Linq\3.5.0.0__b77a5c561934e089\System.Data.Linq.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Web.Abstractions\3.5.0.0__31bf3856ad364e35\System.Web.Abstractions.dll" /R:"C:\Windows\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Web.Mvc\2.0.0.0__31bf3856ad364e35\System.Web.Mvc.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Data.DataSetExtensions\3.5.0.0__b77a5c561934e089\System.Data.DataSetExtensions.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Web.Extensions\3.5.0.0__31bf3856ad364e35\System.Web.Extensions.dll" /R:"C:\Windows\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Web.Services\2.0.0.0__b03f5f7f11d50a3a\System.Web.Services.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Web.Routing\3.5.0.0__31bf3856ad364e35\System.Web.Routing.dll" /R:"C:\Windows\assembly\GAC_MSIL\System.Xml.Linq\3.5.0.0__b77a5c561934e089\System.Xml.Linq.dll" /out:"C:\Users\Administrateur\AppData\Local\Temp\Temporary ASP.NET Files\root\6acf5c98\cc0311d0\App_Code.srtuwzwp.dll" /D:DEBUG /debug+ /optimize- /w:4 /nowarn:1659;1699;1701 /warnaserror-  "C:\Users\Administrateur\AppData\Local\Temp\Temporary ASP.NET Files\root\6acf5c98\cc0311d0\App_Code.srtuwzwp.0.cs" "C:\Users\Administrateur\AppData\Local\Temp\Temporary ASP.NET Files\root\6acf5c98\cc0311d0\App_Code.srtuwzwp.1.cs"


    Compilateur Microsoft (R) Visual C# 2008 version 3.5.30729.4926
    pour Microsoft (R) .NET Framework version 3.5
    Copyright (C) Microsoft Corporation. Tous droits réservés.

    c:\Users\Administrateur\AppData\Local\Temp\Temporary ASP.NET Files\root\6acf5c98\cc0311d0\App_Code.srtuwzwp.0.cs(19,20): error CS0246: Le type ou le nom d'espace de noms 'AnnoncesFavorites' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)

    Ligne 1 :    //------------------------------------------------------------------------------
    Ligne 2 :    // <auto-generated>
    Ligne 3 :    //     Ce code a été généré par un outil.
    Ligne 4 :    //     Version du runtime :2.0.50727.4927
    Ligne 5 :    //
    Ligne 6 :    //     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
    Ligne 7 :    //     le code est régénéré.
    Ligne 8 :    // </auto-generated>
    Ligne 9 :    //------------------------------------------------------------------------------
    Ligne 10 :   
    Ligne 11 :   using System;
    Ligne 12 :   using System.Web;
    Ligne 13 :   using System.Web.Profile;
    Ligne 14 :   
    Ligne 15 :   
    Ligne 16 :   
    Ligne 17 :   public class ProfileCommon : System.Web.Profile.ProfileBase {
    Ligne 18 :       
    Ligne 19 :       public virtual AnnoncesFavorites MaSelectionDAnnonces {
    Ligne 20 :           get {
    Ligne 21 :               return ((AnnoncesFavorites)(this.GetPropertyValue("MaSelectionDAnnonces")));
    Ligne 22 :           }
    Ligne 23 :           set {
    Ligne 24 :               this.SetPropertyValue("MaSelectionDAnnonces", value);
    Ligne 25 :           }
    Ligne 26 :       }
    Ligne 27 :       
    Ligne 28 :       public virtual ProfileCommon GetProfile(string username) {
    Ligne 29 :           return ((ProfileCommon)(ProfileBase.Create(username)));
    Ligne 30 :       }
    Ligne 31 :   }
    Ligne 32 :  

    2. Error    1    'MaSelectionDAnnonces' is not a member of 'Profile'.    H:\acbforum\acbforum\acbforum\1\ConsulterAnnonces.aspx.vb    16    16    acbforum
    3. Error    9    Type 'acbforum.MasterPage' is not defined.    H:\acbforum\acbforum\acbforum\Default.aspx.designer.vb    33    41    acbforum
    4. Error    10    Type 'ProfileCommon' is not defined.    H:\acbforum\acbforum\acbforum\1\ConsulterAnnonces.aspx    1    1    acbforum

    Voilà en détails, le problème que je rencontre. Merci pour la patience et le temps de vous prendrez pour me lire !


    Patrick ASSANA

    mardi 24 avril 2012 10:46
  • coucou !!!

    Patrick ASSANA

    mercredi 25 avril 2012 13:56
  • Il n' y a décidément personne pour m'aider !

    Patrick ASSANA

    vendredi 27 avril 2012 10:34
  • Bonjour,

    Je pense que le mieux est de supprimer la partie qui pose problème et de compiler. Ensuite dans l'explorateur d'objets on peut chercher la classe AnnoncesFavorites pour voir exactement dans quel namespace elle se trouve. VB utilise un espace racine par défaut et le code présent dans App_Code utilise également je crois son propre préfixe. Donc il se pourrait que la classe soit par exemple qq chose comme acbforum.ASP.acbforum.AnnoncesFavorites mais c'est juste un exemple. Utiliser l'explorateur d'objet permettra d'être sûr à 100% du nom...

    Pour être sûr, c'est un "projet" ou un  "site web" ? 


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 27 avril 2012 11:51
  • Merci Patrice !

    C'est un site web !

    Je reviendrai vers vous après avoir essayé.


    Patrick ASSANA

    vendredi 27 avril 2012 14:18
  • J'ai essayé et cela marche chez moi. Donc un nouveau site web, avec un fichier Class1 dans App_Code et donc une propriété "Custom" de type "Class1" et cela marche...

    Ce qui me surprend aussi : on semble cibler un framework 2.0/3.5 ou on est 4 ?

    Le fait que le profile soit compilé en csharp me surprend aussi un peu. Vérification faite, chez moi le projet semble générer son code en VB (mais je suis en 4.0).

    Enfin si je mets volontairement un type non existant j'obtiens effectivement une erreur comparable mais affichée dans VS et je confirme que le code source de la classe ProfileCommon est bien en VB. J'ai l'impression que l'on essaie de compiler le site en accédant directement à un site web ou on le lance depuis VS ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    vendredi 27 avril 2012 15:51
  • Bonjour,

    Ce coach , si j'ai bien compris, utilise en fait VWD avec lequel on code en C# ou VB ( C++ je n'en sais rien ).

    Ce qui m'inquiète beaucoup plus , c'est d'utiliser SQL Server Express et surtout SQL Server Management Studio Express Edition ( SSMSEE en racourci ).SSMSEE a un énorme bogue : il interdit tout mise à jour du SQL Server 2005 vers 2008,2008 R2 ou 2012. Problème connu depuis la sortie de SQL Server Express 2008. Alors pour la mise à niveau vers des versions supérieures : bonjour les dégats. Je l'ai rencontré et j'ai bataillé pendant 1 mois avant de pouvoir installer mon SQL Server 2008 Developer ( en fait , j'ai du faire effacement complet de mes 3 disques , réinstaller mon OS et toutes les applications comme VS 2008 , SQL Server...).

    D'ailleurs, il est possible qu'après la sortie de SQL Server 2012, il devienne très difficile de télécharger SQL Server Express 2005 chez Microsoft dans les mois à venir ( la fin définitive de support approche )

    Bonne journée


    Mark Post as helpful if it provides any help.Otherwise,leave it as it is.

    dimanche 29 avril 2012 22:55
  • Bonjour à tous !

    Juste remercier Patrice pour sa solution qui a bien marché, du moins en qui concerne l'erreur sur le namespace.

    En effet, après compilation, j'ai obtenu le vrai namespace dans l'explorateur d'objets qui n'est rien d'autre que acbforum.AnnoncesFavorites

    Ainsi, après avoir mis ceci dans web.conf :

        <profile enabled="true">
          <properties>
          <add name="MaSelectionDAnnonces"
                  type="acbforum.AnnoncesFavorites.AnnoncesFavorites"
                  defaultValue="[null]"/>
          </properties>  

    je n'ai plus d'erreur sur le namespace, mais sur le nouveau profile MaSelectionDAnnonces qui n'est pas reconnu :

     'MaSelectionDAnnonces' is not a member of 'Profile'.

     Type 'ProfileCommon' is not defined.

    Merci !



    Patrick ASSANA

    lundi 30 avril 2012 10:34
  • Bonjour, je me permets de revenir sur ce sujet qui n'a pas été solutionné.

    J'ai en effet exactement le même problème :

    Je suis sous Visual Studio 12,

    j'ai bien ajouté les lignes suivantes dans mon fichier web.config :

    <profile enabled="true">
          <properties>
          <add name="MaSelectionDAnnonces"
                  type="AnnoncesFavorites"
                  defaultValue="[null]"/>
          </properties> 

    </profile>

    Mais dans mes pages web aspx.cs le code System.Web.Profile.MaSelectionDAnnonces amène l'erreur :

    Erreur 1 : Le type ou le nom d'espace de noms 'MaSelectionDAnnonces'n'existe pas dans l'espace de noms 'System.Web.Profile' (une référence d'assembly est-elle manquante ?)

    tandis que le code :

    using System.Web;

    .....

    Profile.MaSelectionDAnnonces

    amène l'erreur : 

    Erreur 1 Le nom 'Profile' n'existe pas dans le contexte actuel

    Je suis bloqué là depuis un bout de temps, manque-t-il des options dans la balise <profile> comme le DefaultProvider ou autre ? Comment se fait-il qu'il ne reconnaisse pas les "profile".

    Merci d'avance à ceux qui prendront le temps de me répondre.







    • Modifié 4R4 mardi 4 février 2014 15:37
    mardi 4 février 2014 14:20