web-dev-qa-db-ja.com

「型のように使用される名前空間」エラー

コーダー、私は見つけたライブラリを使用してXAML文字列をHTMLに変換しようとしています here ですが、ライブラリを使用できるようにするオブジェクトの新しいインスタンスの作成に問題があります。 Asp.netプロジェクトでライブラリへの参照を既に追加しており、それをWCFファイルで使用したいと思います。

問題は、新しいキーワードで新しいオブジェクトをインスタンス化しようとすると、必ず次のエラーが発生することです。

「MarkupConverter」は「名前空間」ですが、「タイプ」のように使用されます。

これが私のコードです。上記のライブラリリンクに示されている例のように、新しいオブジェクトを作成していることに注意してください。

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;
        }
    }
}
15
Eyad

実際のタイプがMarkupConverter.MarkupConverterであるため、混乱が生じています。コンパイラは、あなたのnew MarkupConverterusing名前空間。

問題の行を次のように変更するだけです。

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

..そして、あなたは大丈夫です。

22
Carson63000

あなたの場合、名前空間MarkupConverterと同じ名前のクラスがあります(再びMarkupConverter)。

markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/では、コンパイラーはクラスを使用する意図があることを認識できません。同じ名前の名前空間が存在するため、名前空間はコンパイラーによってより高い優先順位でリンクされるため、コンパイラーは代わりにそれを選択します。

これを解決するには、クラスの完全な名前を使用します。

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

クラスの完全修飾名を提供する別の方法は、using {ALIAS} = {Fully qualified name of Type| Namespace}という形式のエイリアスを使用することです。 {ALIAS}の部分には、任意の有効な識別子を指定できることに注意してください。

あなたがあなたの用法に置くことができるエイリアス:

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

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

または名前空間宣言の後:

using System.Data.SqlClient;
using MarkupConverter;

namespace AspPersonalWebsite
{
    using MarkupConverter = MarkupConverter.MarkupConverter;

    ....

よろしくお願いします!この時点で、エイリアスが存在する場合、行

markupConverter = new MarkupConverter()

明示的なエイリアスはコンパイラが行う自動バインディングよりも優先されるため、MarkupConverterクラスが正しく選択されます。

7
Ivaylo Slavov

それはほとんど自明です、

MarkupConverterは名前空間であるため、オブジェクトを作成するためのクラスとして使用しないでください

使用するMarkupConverterクラスを見せていただけますか?エラーはおそらくその宣言にあります。名前空間はどこですか?あなたのファイル構造は何ですか?

MarkupConverter名前空間を作成した可能性がありますか?

2
Pascal Qyy

使用セクションに「using MarkupConverter」ステートメントを追加する必要があります。これにより、その名前空間からすべてのクラスがインポートされます。

0
AK.