‘名称空间使用类似’错误

编码器,我试图使用我在这里找到的库将XAML字符串转换为HTML,但我在创建一个允许我使用该库的对象的新实例时遇到问题。 我已经在我的Asp.net项目中添加了对库的引用,我想在WCF文件中使用它。

问题是每当我尝试使用new关键字实例化一个新对象时,我会收到一条错误消息:

‘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; } } } 

由于实际类型是MarkupConverter.MarkupConverter ,因此编译似乎认为您的new MarkupConverter是尝试将命名空间用作类型,而不是尝试在您的using命名空间中实例化类型,因此会出现混淆。

只需将问题行更改为:

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

..你应该没事。

在您的情况下,您有一个名称空间MarkupConverter和一个具有相同名称的类(再次使用MarkupConverter )。

在行markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/ markupConverter = new MarkupConverter(); /*PROBLEM IS HERE*/编译器无法告诉您打算使用该类。 由于存在具有相同名称的名称空间,因此编译器会选择它,因为编译器会将名称空间链接到更高的优先级。

您可以使用类的完整名称来解决此问题:

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

提供类的完全限定名称的另一种方法是使用别名,其forms为using {ALIAS} = {Fully qualified name of Type| Namespace} 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类,因为显式别名的优先级高于编译器自动绑定的优先级。

这几乎是自我解释的,

MarkupConverter是一个名称空间,因此不应该用作创建对象的类

你能展示你使用的MarkupConverter课吗? 错误可能在其声明中。 在哪里命名空间呢? 你的文件结构是什么?

也许你已经创建了一个MarkupConverter命名空间?

您应该在usings部分中添加“using MarkupConverter”语句。 这将导入该命名空间中的所有类。