编码器,我正在尝试使用我找到的here库将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;
}
}
}
答案 0 :(得分:22)
由于实际类型为MarkupConverter.MarkupConverter
而产生混淆,编译器似乎认为您的new MarkupConverter
是尝试将名称空间用作类型,而不是尝试在{{1}内实例化类型{1}}命名空间。
只需将问题行更改为:
using
..你应该没事。
答案 1 :(得分: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}
部分可以是任何有效的标识符。
您可以将其放置在使用中的别名:
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
类,因为显式别名的优先级高于编译器自动绑定的优先级。
答案 2 :(得分:3)
这非常自我解释,
MarkupConverter
是一个名称空间,因此不应该用作创建对象的类
答案 3 :(得分:2)
您能否展示您使用的MarkupConverter
课程?错误可能在其声明中。在Where名称空间中它是什么?你的文件结构是什么?
也许您已经创建了MarkupConverter
命名空间?
答案 4 :(得分:0)
您应该在usings部分添加“using MarkupConverter”语句。这将从该命名空间导入所有类。