2010-11-21 14 views
14

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

'MarkupConverter' is a 'namespace' but is used like a 'type'.

が私のコードで、私は同じように新しいオブジェクトを作成しています予告:

問題は、私は新しいキーワードで、新しいオブジェクトをインスタンス化しようとする時はいつでも、私が言うエラーを取得するということです

ほとんど自明である
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; 
     } 
    } 
} 
+0

コードブロックが正しく表示されません。 – ealshabaan

+1

@abatishchevは、編集中のusingステートメントを削除しました。投稿が編集されていないときにそれらを見ました。 –

+0

@Srinivas:申し訳ありませんが、私の誤り – abatishchev

答えて

19

混乱が生じている、コンパイラがあなたのnew MarkupConverterではなく、あなたのusing名前空間内のタイプをインスタンス化しようとするよりも、タイプとして名前空間を使用しようとする試みであると考えているようです。

単純に問題の行を変更します。

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

..andあなたは問題ないはずです。

3

MarkupConverterが名前空間なので、すべきではない:上記のライブラリのリンクに示す例では、助けてくださいオブジェクトを作成するクラスとして使用する

+1

downvoteは4年後に説明なし。 –

+4

それはあなたに奇妙なバッジを手に入れることができるかもしれません。 – sweaver2112

0

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

+0

私のポストを編集したときに、ユーザーabatishchevが削除しました! – ealshabaan

+0

abatishchevが削除を元に戻したようです。だからこの答えは今では時代遅れだと私は言うだろうか? –

2

ご使用のクラスMarkupConverterを表示できますか?エラーはおそらくその宣言にあります。名前空間はどこですか?あなたのファイル構造は何ですか?

MarkupConverter名前空間を作成したことがありますか?実際の型はMarkupConverter.MarkupConverterあるので

7

あなたの場合、名前空間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}の部分には、任意の有効な識別子を使用できます。

あなたはどちらかあなたのusingsに配置することができますエイリアス:

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クラスを選択します。

+0

2番目の解決策はとてもエレガントに聞こえますが、残念ながら 'Namespace 'Topns'には別名 'MarkupConverter'と競合する定義が含まれています。 (TopnsはMarkupConverter名前空間の上の一番上の名前空間です)。 –

+0

名前空間内でエイリアシングを行う場合、エイリアスで完全な型名を使用する必要があります。たとえば、 'MarkupConverter = Topns.MarkupConverter.MarkupConverter'を使用しています。ここで' Topns.MarkupConverter'は 'MarkupConverter'クラスを含む名前空間です。コンパイラのさらなる混乱を解決するには、 'MarkupConverter = global :: Topns.MarkupConverter.MarkupConverter'を使用することもできます。一般に、' global :: '接頭辞はめったに使われませんが、あなた自身の名前空間が参照されているアセンブリからのもの –

+0

'MarkupConverter = global :: Topns.MarkupConverter.MarkupConverter;'を使って書きましたが、 'MarkupConverter foo;'をコンパイルできません: 'Namespace 'Topns'には、マークアップコンバーター '。 –

関連する問題