8

Attualmente ho creato un livello di servizio e un'API che sto utilizzando da un sito Web ASP.NET, da un'app di Windows Phone e da un'app di Windows 8 Metro: la chiave per tutti loro è un progetto contenente classi di modelli che è un progetto di libreria di classi portatile, ed è condiviso come riferimento tra tutti loro. Questa architettura funziona bene e senza problemi.Xamarin e Visual Studio, Windows Phone e ASP.NET: è possibile una vera libreria a una sola classe?

Tuttavia, ho recentemente iniziato a sperimentare con Xamarin, in particolare la funzionalità iOS (con l'intenzione di passare ad Android in seguito). La mia ipotesi iniziale era che sarei stato in grado di utilizzare questa libreria di modelli come faccio con gli altri progetti - tuttavia, da allora ho capito che non è così.

Quando ho aggiunto un riferimento alla mia libreria di classi modello per il mio progetto Xamarin.iOS (in Visual Studio), sono stato accolto da l'errore:

'Il progetto attuale non supporta i riferimenti a progetti libreria portabile '.

Strano - come pensavo sarebbe stato uno scenario che sarebbe stato supportato. Ho trovato un post here che suggeriva una correzione che obbligava Visual Studio a rilevare il framework Monotouch (Xamarin) come supporto per i progetti di libreria portatili. Sembrava esattamente ciò di cui avevo bisogno, ma no. Quando ho aggiunto nuovamente il riferimento, sono stato accolto da un altro errore:

"Il framework di destinazione del progetto corrente non è compatibile con quello del progetto Libreria portatile".

E suggerisce di modificare il framework di destinazione nelle proprietà del progetto. Tranne che non posso, in quanto il progetto Xamarin iOS deve supportare Monotouch (e non posso comunque modificarlo in alcun modo dalla GUI). Così ho provato a cambiare le proprietà della libreria del modello - forse posso fare qualcosa lì. E sembrava che potessi. Posso controllare Monotouch (Xamarin) come una piattaforma supportata qui (dove Windows phone, Windows store, ecc sono già stati controllati), ma non mi permetterà di salvare. E 'appena compare il messaggio:

'Non v'è alcuna funzionalità aggiuntive che è supportato da quadri di destinazione che avete selezionato'

Dopo alcune ricerche, ho scoperto che l'unico modo Xamarin suggerisce di condividere il codice è quello di utilizzare separata . progetti con file di codice legate (quindi, in effetti, una base di codice pseudo-single che ho provato e funziona - ma sembra un hack Vedi qui:

http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/sharing_code_options

quindi questa è l'unica opzione Or.? c'è un modo per avere un vero librerie di classi singole (modello) su tutte le piattaforme, tra cui Microsoft e Xamarin?

risposta

0

Il futuro è luminoso sul lato Xamarin, come sta andando a supportare .NET 4.5 profilo su tutte le sue piattaforme,

http://blog.xamarin.com/brave-new-async-mobile-world/

L'unico problema, per quanto posso vedere viene da parte di Microsoft, chi si rifiuta di unificare le proprie piattaforme su un profilo comune (Windows 8 e Windows Phone 8 sono ancora versioni su misura disordinate, non meglio di CF o Silverlight nella mia situazione).

Le librerie di classi portatili sono disponibili, ma come autore di librerie (#SNMP) Io piuttosto costruisco file di progetto separati per i miei progetti come suggerisce Xamarin.

+0

Grazie Lex: è bello sapere che supporterà il profilo completo in futuro. In realtà vedo il vantaggio dell'utilizzo di file di progetto separati, ma nel caso delle mie classi, sono letteralmente modelli piatti senza funzionalità speciali. Ma se è l'unico modo, andrò con i progetti separati :). – stevehayter

1

Attualmente è possibile utilizzare i progetti di libreria portatili - ad es. profilo 104 - attraverso tutti .Net4.5, WP, WinRT, Xamarin.Android e Xamarin.iOS

È inoltre possibile utilizzare gli assembly binari di output su .Net4.5, WP, WinRT e Xamarin.Android - ma non corrente contro Xamarin.iOS.

Questa situazione sta cambiando 'molto presto' ora con Xamarin adottando pieno supporto PCL - vedi http://slodge.blogspot.co.uk/2013/02/the-future-is-portable.html e ascoltare http://hanselminutes.com/362/ios-and-android-apps-with-xamarin-studio-20-and-miguel-de-icaza

io personalmente consegnare MvvmCross (e un sacco di applicazioni che utilizzano MvvmCross) utilizzando PCLS - e ho fatto negli ultimi 6 mesi - ma al momento ci sono alcuni problemi di installazione. Per alcuni informazioni visita il mio blog:

spero di fornire un aggiornamento su questo in un futuro molto vicino - dovrebbe funzionare 'out of the box' presto.

+0

Interessante - grazie per le informazioni. Ho seguito i passaggi qui per aggiungere un nuovo file XML alla cartella SupportedFrameworks: http://slodge.blogspot.co.uk/2012/12/cross-platform-winrt-monodroid.html Ora presumo quando lo faccio dovrei andare alle proprietà del mio progetto PCL. e aggiungere il profilo VS Monotouch alle piattaforme supportate? Ma quando lo faccio, ottengo l'errore "Non ci sono funzionalità aggiuntive supportate dai framework di destinazione che hai selezionato". Non supportarti hai qualche idea? – stevehayter

+0

Segui il secondo link per monotouch, non vsmonitouch - quindi assicurati di scegliere wp7.5 + e .net4.5 + per le piattaforme – Stuart

+0

Ah - Sto usando VS Monotouch. Presumo che non funzionerà allora? – stevehayter

Problemi correlati