6

Quando si condivide il codice tra Windows Phone 8 e Windows 8, le due opzioni principali per gli sviluppatori sono 1) Componenti di Windows Runtime e 2) Librerie di classi del portale.Scelta dei componenti di Windows Runtime rispetto alla libreria di codici portatili

Windows Runtime Components utilizzare WinRT e può essere proiettato in tutte le lingue supportate. Richiedono file collegati in progetti separati (binari) se usati su piattaforme diverse. Tuttavia, condividono il 90% delle API WinRT disponibili.

Portable Class Libraries sono un sottoinsieme (a volte un sottoinsieme significativo) del BCL che ha compatibilità binaria tra piattaforme. Possono essere utilizzati su applicazioni WinRT, ma anche su altri tipi di progetto come Silverlight, Xbox, ecc.

Quando uno sviluppatore sceglie una "strategia di condivisione", quale tipo di progetto è la tecnica ideale per eseguire la migliore condivisione del lavoro codice tra Windows Phone 8 e Windows 8? Grazie.

+1

Quindi c'è anche la tecnica di collegamento del file sorgente ... senza componenti WinRT o PCL. –

+0

Questa domanda non è più rilevante con l'introduzione di Windows Phone 8.1 Universal Apps in Visual Studio 2013 Update 2 che supporta i progetti condivisi. –

+0

@ JerryNixon-MSFT - questa è una gemma intrigante di saggezza, puoi espanderti un po '? Come funziona un 'progetto sahred' e quale problema risolve? –

risposta

3

Se si desidera condividere il codice tra Windows Phone 8 e Windows 8, non è possibile utilizzare Componenti di Windows Runtime, poiché diversi componenti sono utilizzati per Windows 8 e diversi per Windows Phone 8 e non sono intercambiabili.
Vorrei andare per le librerie di classi portatili per alcune semplici librerie generiche o per la condivisione di codice tramite collegamenti e le direttive di compilazione #if WP8 - questo funziona ed è più potente delle librerie portatili.
Tenete anche presente che la maggior parte delle librerie esterne come MVVM Light non può essere referenziata in Portable Libs, quindi se si desidera utilizzarle, è necessario utilizzare la condivisione del codice tramite riferimenti file.

+3

In realtà, esiste una versione PCL di MVVM Light: il pacchetto NuGet è Portable.MvvmLightLibs e la fonte è qui: http: //mvvmlight.codeplex.com/SourceControl/network/forks/onovotny/MvvmLightPortable/ –

+2

@Martin Suchan - "Se vuoi condividere il codice tra Windows Phone 8 e Windows 8, non puoi utilizzare i componenti di Windows Runtime ..." Dipende da cosa intendi con _share code_. Non è possibile creare un ** singolo progetto WRC che abbia come target sia WinRT che WP8, ma è possibile creare ** uno per ciascun **, ed entrambi i progetti possono fare riferimento allo stesso codice sorgente C/C++. –

+0

@Martin Suchan e @Scott Smith, [sei sicuro] (http://s2.postimg.org/gm9wext2x/Win_Runtime_Comp_Portable.png)? Perché esiste un'opzione del modello 'Windows Runtime Component (Portable per Universal Windows 8.1)'. La descrizione dice "Un progetto per la creazione di un componente di Windows Runtime gestito per le app Windows e Windows Phone, indipendentemente dai linguaggi di programmazione in cui sono scritte le app". – bunkerdive

4

Dipende che tipo di condivisione è necessario:

1) Se si dispone di un ++ livello di logica di business comune C è possibile utilizzare i componenti di Windows Runtime (WinRT) per esporre questo sia Windows Phone e Windows Store (Questo è l'unico caso d'uso per Windows Phone poiché non è possibile scrivere un'app WP8 ​​usando JavaScript o utilizzare .NET per creare un componente WinRT).

Dovresti creare due componenti WinRT separati, uno per il telefono e uno per Windows Store. Dovrebbe essere possibile condividere il codice C++/CX del livello di interoperabilità WinRT utilizzando le direttive del preprocessore (#if) per contrassegnare il codice specifico della piattaforma.

2) La logica aziendale in C#/VB ha solo dipendenze dalle API .NET che sono disponibili in una libreria di classi portatile. Quindi è possibile utilizzare Portable Class Library (PCL) per contenere quella logica. Fondamentalmente se tu puoi creare la tua libreria in una DLL PCL allora questo dovrebbe funzionare. È quindi possibile fare riferimento a questo PCL in formato binario in entrambe le applicazioni Windows Phone e Windows Store.

Tuttavia, come ha detto Martin, è necessario fare attenzione quando si utilizzano librerie di terze parti, poiché anche queste dovranno essere costruite per PCL. Alcune librerie di terze parti sono già disponibili in formato PCL (ad esempio JSON.NET).

3) Si desidera condividere il codice per cui sono presenti dipendenze API della piattaforma (o dipendenze di librerie di terze parti) che non sono supportate da PCL. Quindi è necessario creare librerie DLL separate, una per piattaforma. È possibile evitare la duplicazione del codice utilizzando i file sorgente C#/VB collegati e utilizzare nuovamente un flag di compilazione (#if) per consentire modifiche di codice di piccole dimensioni tra le piattaforme di destinazione.

1

Questa domanda non è più rilevante con l'introduzione di Windows Phone 8.1 universale Apps in Visual Studio 2013 Update 2 che supporta i progetti condivisi .

Aspetta un momento, come per me anche in Visual Studio 2013 Update 4 a questa domanda è ancora rilevante, perché ci sono due tipi di progetti là:

Class Library (Portable per Universal Apps) - PCL

e

di Windows Runtime Component (Portable Apps per Universal) - WinMD

Posso vedere solo una grande differenza tra loro: WinMD utilizza solo WinRT e PCL potrebbe essere utilizzato anche con. Net e Silverlight. Ma voglio anche sapere di più su quale e quando meglio scegliere.

+0

Visual Studio 2014 Community Edition è gratuito. E l'edizione comunitaria di Visual Studio 2015 sarà gratuita. Vi consiglio di aggiornare Visual Studio se la situazione lo consente. –

Problemi correlati