【问题标题】:XmlReader is declared in a different Assembly even though System.Xml is referenced?即使引用了 System.Xml,XmlReader 还是在不同的程序集中声明?
【发布时间】:2016-01-25 23:12:02
【问题描述】:

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

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

--- 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 instance) 方法时收到错误。

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

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

【问题讨论】:

  • 您有对 System.Xml.dll 的引用并且您的目标是 .NET 4.5(或更高版本)? msdn.microsoft.com/en-us/library/…
  • 是的,我正在为项目使用默认的空白通用应用程序模板,它的引用中没有 System.Xml。但它实际上是由 Visual Studio 本身作为引用添加的,或者看起来如此,因为当我尝试手动添加它时,它说“这个组件已经被构建系统引用”,我可以在应用程序中使用 XmlReader很好。
  • SyndicationFeed - msdn.microsoft.com/en-us/library/… 的 MSDN 页面 - 并没有说它适用于 uwp 应用程序。
  • 我唯一能想到的另一件事是,您在某个地方加载了错误版本的 dll,而该 dll 正在寻找而不是找到不同版本的 System.Xml.dll。检查参考,看看它们是否是“特定版本”。
  • 嗯,这是因为 SyndicationFeed 类本身在 UWP 上不可用,这就是为什么我在 System.ServiceModel.Syndication 命名空间中使用其他类时没有收到任何错误的原因。但是看这里,msdn.microsoft.com/en-us/library/…,我没有看到 SyndicationItem 支持 UWP 平台,但它工作得很好

标签: c# uwp


【解决方案1】:

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) 了解完整的演练。

【讨论】:

  • 感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 2021-02-22
  • 2015-10-28
  • 2021-07-30
  • 2018-11-22
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多