22

我在 .NET 4 上编写了一个项目,目前正在允许它在 Windows Phone 上运行。我正在使用 HtmlAgilityPack,这是一个众所周知的库,它允许通过 HTML 进行 Linq 查询,并且只使用它提供的LoadHtmlLinq接口。

将类库从 .NET 4 转换为支持 .NET 4 和 WP8 的 PCL(便携式类库)后,我似乎无法再使用 HtmlAgilityPack 库了。有没有办法让 HtmlAgilityPack 在 PCL 项目下正常运行,或者是否有一个具有类似 Linq 接口的变量替代方案可以按预期工作?

编辑:HtmlAgilityPack 提供 9 个不同的版本,没有一个与 PCL 兼容。它们都没有解决引用中的依赖关系。对于某些版本,它可能看起来确实如此,但在使用时会抛出一个错误,通常是“无法加载,未解决的依赖项”。

编辑#2由于很容易错过一个小评论,我会用我想出的解决方案更新这个答案。我提取了基本功能所需的内容,并实现了缺失的组件以使一切正常工作。结果在这里https://github.com/Deathspike/HtmlAgilityPack-PCL

4

3 回答 3

5

一种选择是将 HTML Agility Pack 源代码移植到 PCL。您可以在其上运行PCL 合规性分析器,以了解这将有多难。

或者,使用抽象模式。为您需要的功能(即LoadHtmlLinq)创建一个可移植接口,然后通过调用 HTML Agility Pack 为每个平台实现该接口。然后,您的可移植代码可以依赖于特定于平台的实现。

有关更多信息,请参阅此博客文章:如何使可移植类库为您工作

于 2013-03-12T00:19:58.740 回答
4

你已经提出并回答了你自己的问题——不是吗?

HtmlAgilityPack 不支持与可移植类库一起使用。

充其量,您需要考虑移植/迁移您需要的特定功能,使其适用于您正在使用的平台。

于 2013-03-11T21:12:57.540 回答
3

查看HtmlParserSharp,这是validator.nu HTML5 parser的 C# 端口。该项目应该很容易构建为 PCL 库,因为它或多或少是一个直接的 C++ 端口,并且仅使用最基本的 .NET 框架类,并进行了一些更新以提高 C# 的性能。

虽然我对 HtmlParserSharp 所做的大部分工作都是针对CsQuery,它本身距离 PCL 兼容还有很长的路要走,但完全没有理由认为 HtmlParserSharp 作为一个精益的 HTML 解析器不能完美地为您的目的。该项目包含一个基于 构建 DOM 的示例XmlElement,但树构建器是一种抽象,因此您可以轻松地将其更改为使用您自己的树节点对象。

于 2013-03-12T12:01:18.620 回答