即使引用了System.Xml,XmlReader也在不同的程序集中声明?

时间:2016-01-22 23:24:45

标签: c# uwp

我是一名在大学学习计算机工程的学生,我正在尝试开发一个应用程序,该应用程序将从某个网址读取RSS订阅源,然后在Feed中显示每个项目的标题和链接作为通知网址上的Feed已更新。 好吧,我实际上是在一开始,我正在研究这个项目用于学习目的,遵循一些教程等。

我的计划是使用System.ServiceModel.Syndication库使用SyndicationFeed对象及其方法从url读取rss feed。但每当我尝试使用它时,我都会遇到一个奇怪的错误。错误如下

--- CS0012:类型'XmlReader'在未引用的程序集中定义。您必须添加对程序集'System.Xml,Version = 5.0.5.0',Culture = neutral,PublicKeyToken ='7cec85d7bea7798e'的引用。

以下是显示此错误的代码部分:

    public void GetFeed()
    {
        // Create an xml reader that will read rss data from the given url
        var xmlReader = XmlReader.Create(rssUrl);
        syndicationFeed = SyndicationFeed.Load(xmlReader);
    }

我创建xmlReader的部分没有错误,我还引用了以下程序集,'System.Xml'。

using System.Text;
using System.Threading.Tasks;
using System.ServiceModel.Syndication;
using System.Xml;     // Here is the System.Xml

此外,通过右键单击并选择“添加引用”来尝试添加对所述库(System.Xml)的重新添加只是给了我另一个错误,告诉我我不能重新启用'System.Xml',因为它已经存在由构建系统引用。

我尝试使用System.ServiceModel.Syndication命名空间中的其他类来确保问题不在程序集中,并且每个其他类,方法等都可以正常工作。例如,我能够写这个并且没有错误:

SyndicationItem item = new SyndicationItem();
item.Title = new TextSyndicationContent("Me");
item.Links.Add(new SyndicationLink() { Uri = new Uri("http://somesite.con") });
item.PublishDate = DateTime.Now;

我在上面的代码中没有错误。当我像这样使用XmlReader时,我没有收到错误:

  var reader = XmlReader.Create(rssUrl);
  while (reader.Read())
  {
       switch (reader.NodeType)
       {
            case XmlNodeType.Attribute:
                // Some code here
                break;

                // Some more cases here......
       }
  }

我在这里也没有关于XmlReader的错误。我只是在将XmlReader实例传递给SyndicationFeed.Load(XmlReader实例)方法时才会收到错误。

// This always gives me error!!!
syndicationFeed = SyndicationFeed.Load(xmlReader);

我一直试图解决这个问题已经有一段时间了,差不多6个小时,我在网上搜索,引用了不同版本的System.ServiceModel.Syndication.dll,试图在Nuget包管理器上找到Syndication包。没有任何效果。我在这里提出这个问题作为最后的手段,任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

UWP应用使用Windows运行时类Windows.Web.Syndication.SyndicationFeed而不是.Net的System.ServiceModel.Syndication。

Windows.Web.Syndication.SyndicationFeed没有XmlReader构造函数。通常,您会创建SyndicationClient,然后致电RetrieveFeedAsync(url)以获取SyndicationFeed。

请参阅How to access a web feed (XAML)了解完整演练。