HTML Linq con HtmlAgilityPack, o alternativa, en PCL

.net c# html-agility-pack portable-class-library windows-phone-8

Pregunta

He escrito un proyecto en .NET 4 y actualmente estoy en el proceso de permitir que se ejecute también en Windows Phone. Estoy usando HtmlAgilityPack, una biblioteca bien conocida que permite consultas de Linq a través de HTML, y solo estoy usando las interfaces LoadHtml y Linq que proporciona.

Habiendo convertido las bibliotecas de clases de .NET 4 a PCL (Biblioteca de clases portátil) con soporte para .NET 4 y WP8, parece que ya no puedo usar la biblioteca HtmlAgilityPack. ¿Hay alguna manera de permitir que HtmlAgilityPack funcione correctamente en un proyecto PCL o hay una alternativa variable con una interfaz Linq similar que funciona como se espera?

EDITAR : HtmlAgilityPack ofrece 9 versiones diferentes, ninguna de las cuales es compatible con PCL. Ninguno de ellos resuelve dependencias a partir de las referencias. Para algunas versiones, puede parecer que sí, pero con el uso se generará un error con las habituales 'no se puede cargar, dependencias sin resolver'.

EDITAR # 2 Como es fácil perderse un pequeño comentario, actualizaré esta respuesta con la solución que se me ocurrió. Extraje lo que se necesitaba para la funcionalidad básica e implementé los componentes faltantes para que todo funcionara. El resultado está aquí https://github.com/Deathspike/HtmlAgilityPack-PCL

Respuesta aceptada

Has preguntado y respondido tu propia pregunta, ¿no es así?

El HtmlAgilityPack no admite el uso con las bibliotecas de clases portátiles.

En el mejor de los casos, deberá considerar la migración / migración de la funcionalidad específica que necesita de una manera que funcione en las plataformas que está utilizando.


Respuesta popular

Una opción es portar el código fuente de HTML Agility Pack a un PCL. Puede ejecutar el Analizador de Cumplimiento PCL sobre él para tener una idea de lo difícil que será esto.

Alternativamente, utilice el patrón de abstracción. Cree una interfaz portátil para la funcionalidad que necesita (es decir, LoadHtml y Linq ), y luego implemente esa interfaz para cada plataforma llamando al Paquete de Agilidad HTML. Entonces su código portátil puede depender de la implementación específica de la plataforma.

Para obtener más información, consulte esta publicación del blog: Cómo hacer que las bibliotecas de clases portátiles funcionen para usted



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué