Linq HTML con HtmlAgilityPack o alternativa, in PCL

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

Domanda

Ho scritto un progetto su .NET 4 e sono attualmente in procinto di permetterlo di funzionare anche su Windows Phone. Sto usando HtmlAgilityPack, una libreria ben nota che consente le query di Linq su HTML e sto usando solo le interfacce LoadHtml e Linq che fornisce.

Dopo aver convertito le librerie di classi da .NET 4 a PCL (Portable Class Library) con supporto per .NET 4 e WP8, non riesco più a utilizzare la libreria HtmlAgilityPack. Esiste un modo per consentire a HtmlAgilityPack di funzionare correttamente in un progetto PCL oppure esiste un'alternativa variabile con un'interfaccia Linq simile che funziona come previsto?

MODIFICA : HtmlAgilityPack fornisce 9 versioni diverse, nessuna delle quali compatibile con PCL. Nessuno di loro risolve le dipendenze dai riferimenti. Per alcune versioni, potrebbe sembrare che lo faccia, ma al momento dell'utilizzo verrà generato un errore con il solito "impossibile caricare, dipendenze non risolte".

EDIT # 2 Poiché è facile perdere un piccolo commento, aggiornerò questa risposta con la soluzione che ho trovato. Ho estratto ciò che era necessario per la funzionalità di base e ho implementato i componenti mancanti per far funzionare tutto. Il risultato è qui https://github.com/Deathspike/HtmlAgilityPack-PCL

Risposta accettata

Hai chiesto e risposto alla tua stessa domanda - no?

HtmlAgilityPack non supporta l'utilizzo con librerie di classi portatili.

Nella migliore delle ipotesi, dovrai considerare il porting / migrazione della funzionalità specifica richiesta in un modo che funzioni sulle piattaforme che stai utilizzando.


Risposta popolare

Un'opzione consiste nel trasferire il codice sorgente di HTML Agility Pack in un PCL. È possibile eseguire su PCL Compliance Analyzer per avere un'idea di quanto sarà difficile.

In alternativa, usa il modello di astrazione. Crea un'interfaccia portatile per le funzionalità di cui hai bisogno (es. LoadHtml e Linq ), quindi implementa quell'interfaccia per ogni piattaforma richiamando l'HTML Agility Pack. Quindi il tuo codice portatile può dipendere dall'implementazione specifica della piattaforma.

Per ulteriori informazioni, vedere questo post del blog: Come fare in modo che le librerie di classi portatili funzionino per te




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché