【发布时间】: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 平台,但它工作得很好