2016-05-03 16 views
9

Ho bisogno di creare una libreria in Xamarin destinata solo a iOS e Android. Non ho bisogno di supportare altre piattaforme, ma ho bisogno di tutte le funzionalità .NET possibili.Posso scegliere come target iOS e Android solo con Xamarin PCL e avere più funzionalità .NET?

vedo che in Change finestra di dialogo Obiettivi non v'è alcun modo per deselezionare Silverlight check-box:

enter image description here

È possibile creare una libreria di classi portatile Xamarin che gli obiettivi di iOS e Android solo senza il supporto di Silverlight e hanno più funzionalità .NET supportate?

MODIFICA: Ecco alcune classi che è necessario supportare: X509CertificateCollection, SerializationInfo, NameValueCollection. Ho anche bisogno del supporto dello spazio dei nomi System.Web.Services. Sembra che io possa utilizzare tutti questi in progetti iOS e Android direttamente. Posso creare PCL con tutte queste funzionalità?

risposta

6

Mentre sarai limitata se si tenta di indirizzare PCL, un'altra opzione è quella di utilizzare un esca-e-switch NuGet, che sarebbe configurato come segue:

  • progetto condiviso - contiene tutto il codice condiviso
  • Android Library Project - Riferimenti Progetto condiviso, quindi ottiene tutto il codice
  • Progetto Libreria iOS - Riferimenti Progetto condiviso, quindi ottiene tutto il codice
  • PCL Project - progetto di vuoto, che contiene solo stub vuote per i metodi

Poi si crea una NuGet, dove il carico utile di Android è il progetto Biblioteca Android, e il carico utile iOS è l'iOS Progetto di biblioteca.

Il progetto PCL quindi solleva solo l'API compatibile con PCL, ma l'implementazione avviene per utilizzare tutto ciò che è necessario.

per esca-e-switch approccio si veda: http://log.paulbetts.org/the-bait-and-switch-pcl-trick/

7

Profile24, che comprende Silverlight è il più stretto che si sta per ottenere, mentre includere Xamarin.iOS e Xamarin.Android

FYI: Sono totalmente d'accordo con il suggerimento di Matt di utilizzare Profile111 se si sta andando nella direzione libreria PCL. A volte per i nostri progetti, è "più veloce" ($/tempo) andare semplicemente con "Progetti condivisi" e utilizzare # if/# else/# nel codice condiviso quando necessario. Le librerie PCL sono ideali per la condivisione, ma la direzione del progetto condivisa può risolvere il problema di oggi ... ;-)

A partire dalla versione Xamarin 4.1 sono stati creati due nuovi profili aggiunto:

Profile 44 (.NET Framework 4.5.1, Windows 8.1) (netstandard 1.2) 
Profile 151 (.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1) (netstandard 1.2) 

vecchi:

Profile 5 (.NET Framework 4,  Windows 8) 
Profile 6 (.NET Framework 4.0.3, Windows 8) 
Profile 7 (.NET Framework 4.5, Windows 8) 
Profile 14 (.NET Framework 4,  Silverlight 5) 
Profile 19 (.NET Framework 4.0.3, Silverlight 5) 
Profile 24 (.NET Framework 4.5, Silverlight 5) 
Profile 37 (.NET Framework 4,  Silverlight 5, Windows 8) 
Profile 42 (.NET Framework 4.0.3, Silverlight 5, Windows 8) 
Profile 47 (.NET Framework 4.5, Silverlight 5, Windows 8) 
Profile 49 (.NET Framework 4.5, Windows Phone Silverlight 8) 
Profile 78 (.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8) 
Profile 92 (.NET Framework 4,  Windows 8, Windows Phone 8.1) 
Profile 102 (.NET Framework 4.0.3, Windows 8, Windows Phone 8.1) 
Profile 111 (.NET Framework 4.5, Windows 8, Windows Phone 8.1) 
Profile 136 (.NET Framework 4,  Silverlight 5, Windows 8, Windows Phone Silverlight 8) 
Profile 147 (.NET Framework 4.0.3, Silverlight 5, Windows 8, Windows Phone Silverlight 8) 
Profile 158 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone Silverlight 8) 
Profile 225 (.NET Framework 4,  Silverlight 5, Windows 8, Windows Phone 8.1) 
Profile 255 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone 8.1) 
Profile 259 (.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8) 
Profile 328 (.NET Framework 4,  Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8) 
Profile 336 (.NET Framework 4.0.3, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8) 
Profile 344 (.NET Framework 4.5, Silverlight 5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8) 

http://danrigby.com/2014/05/14/supported-pcl-profiles-xamarin-for-visual-studio-2/

+1

Come faccio riferimento Profile111 nel mio progetto? Ho provato ad impostarlo manualmente nel file di progetto, ma VS ha detto che non è installato. –

+0

Microsoft ha un download separato per includere gli assembly di riferimento, se non li si è già installati @ http://www.microsoft.com/en-us/download/details.aspx?id=40727 – SushiHangover

2

profilo PCL è (quasi) la stessa, compreso o meno SilverL ight, hai solo accesso agli assembly PCL.

Ma Xamarin Forms consente già di farvi fronte, su ogni piattaforma avete un progetto .Droid e .iOS, e su questi progetti è possibile utilizzare l'intero framework .net.

Per accedere al codice da questi progetti si dispone dello Dependency Services e, se si desidera utilizzare lo stesso codice per entrambi, Android e iOS si dispone di shared projects.

Quindi, in pratica, inserisci tutto il tuo codice condiviso in un progetto condiviso, implementa un'interfaccia, registralo come servizio di dipendenza, recuperalo nel tuo codice Moduli e in questo modo otterrai il supporto per il framework completo.

+0

C'è qualche possibilità di utilizzare direttamente le classi X509CertificateCollection, SerializationInfo, NameValueCollection in PCL, senza DependencyServices? –

+0

No .... ... ... – Gusman

1

Come ti dice il testo, aggiungerà automaticamente Silverlight perché non ci sarà alcun taglio nella funzionalità. Quindi non ci saranno più funzioni disponibili.

Dall'altro lato, proporrei di utilizzare Profile111 (vedere l'elenco nella risposta di SushiHangover).Da un lato questo ti consente di aggiungere Windows 10 come piattaforma di destinazione e anche la maggior parte dei PCL sembra supportare questo profilo, dal momento che Silverlight morirà (Silverlight 5 era l'ultimo e Windows Phone è UWP)

+0

Profile111 fornisce il supporto dello spazio dei nomi System.Web.Services? –

+0

Purtroppo no, a cosa ti serve? – Matt