web-dev-qa-db-fra.com

erreur 'namespace utilisé comme un type'

Codeurs, j’essaie de convertir une chaîne XAML en HTML à l’aide d’une bibliothèque que j’ai trouvée ici , mais j’ai du mal à créer une nouvelle instance de l’objet qui me permettrait de l’utiliser. J'ai déjà ajouté une référence à la bibliothèque dans mon projet Asp.net et j'aimerais l'utiliser dans un fichier WCF.

Le problème est que chaque fois que j'essaye d'instancier un nouvel objet avec le nouveau mot-clé, j'obtiens une erreur qui dit:

'MarkupConverter' est un 'espace de noms' mais est utilisé comme un 'type'. 

Voici mon code, notez que je suis en train de créer un nouvel objet comme dans l'exemple présenté dans le lien de la bibliothèque ci-dessus, aidez-moi s'il vous plaît: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.Web.Services;
using System.Net.Mail;
using System.ServiceModel.Activation;
using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    [ServiceContract(Namespace = "")]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Service1 //: IService1
    {
        private string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
        private IMarkupConverter markupConverter;        

        [OperationContract]
        public string convertXAMLToHTML(string XAMLtext)
        {
            string htmlText = "";
            markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/
            htmlText = markupConverter.ConvertXamlToHtml(XAMLtext);
            return htmlText;
        }
    }
}
14
Eyad

Il y a confusion car le type réel est MarkupConverter.MarkupConverter, le compilateur semble penser que votre new MarkupConverter est une tentative d'utilisation d'un espace-noms en tant que type, plutôt qu'une tentative d'instancier un type dans votre espace-noms using.

Changez simplement votre ligne de problème en:

markupConverter = new MarkupConverter.MarkupConverter(); /*SOLUTION HERE!*/

..et vous devriez aller bien.

21
Carson63000

Dans votre cas, vous avez un espace de noms MarkupConverter et une classe du même nom (MarkupConverter encore). 

Dans la ligne markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/, le compilateur n'est pas en mesure d'indiquer que vous avez l'intention d'utiliser la classe. Puisqu'un espace de noms portant le même nom est présent, le compilateur le sélectionne à la place, car les espaces de noms sont liés avec une priorité plus élevée par le compilateur.

Vous pouvez résoudre ceci en utilisant le nom complet de la classe:

// supposedly MarkupConverter is the namespace of the MarkupConverter class
markupConverter = new MarkupConverter.MarkupConverter();

Une autre façon de fournir le nom complet de la classe consiste à utiliser un alias, qui prend la forme de using {ALIAS} = {Fully qualified name of Type| Namespace}. Notez que la partie {ALIAS} peut être n’importe quel identifiant valide.

L'alias que vous pouvez placer soit dans vos utilisations:

using System.Net.Mail;
using System.ServiceModel.Activation;
using System.Data.SqlClient;
using MarkupConverter;

using MarkupConverter = MarkupConverter.MarkupConverter; // this is aliasing

ou après la déclaration de l'espace de noms:

using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    using MarkupConverter = MarkupConverter.MarkupConverter;

    ....

et vous êtes prêt à partir! À ce stade, si des alias sont présents, la ligne

markupConverter = new MarkupConverter()

choisira correctement la classe MarkupConverter, car la mise en alias explicite a une priorité plus élevée que la liaison automatique effectuée par le compilateur.

7
Ivaylo Slavov

C'est assez explicite,

MarkupConverter est un espace de noms, ne devrait donc pas être utilisé comme classe pour créer un objet

Pouvez-vous montrer la classe MarkupConverter que vous utilisez s'il vous plaît? L'erreur est peut-être dans sa déclaration. Dans Où l'espace de noms est-il? Quelle est votre structure de fichier?

Peut-être avez-vous créé un espace de noms MarkupConverter?

2
Pascal Qyy

Vous devez ajouter une instruction "using MarkupConverter" dans la section usings. Cela importera toutes les classes de cet espace de noms.

0
AK.