2015-08-19 22 views
5

Ho un progetto che sta funzionando benissimo su Android e WinPhone 8. Quando tento di fare funzionare su iOS, ho ottenere il seguente erroreMvvmlight e Xamarin.iOS in grado di trovare di default ctor

Microsoft. Practices.ServiceLocation.ActivationException: Impossibile registro: Nessun costruttore pubblico si trovano in x

dove x è tutto ciò che SimpleIoc.Default.Register<T, TU>(); il flusso colpisce prima. Ho spostato il codice (come suggerito altrove) per garantire che tutte le chiamate specifiche della piattaforma SimpleIoc vengano effettuate in ViewModelLocator.

Ho aggiunto i ctors di default pubblici nelle classi che si lamentano dell'errore (ho comunque impostato il PreferredConstructor sull'originale, non sul nuovo ctor pubblico aggiunto).

Ho la sensazione che questo errore sia un falso positivo (qualcos'altro non funziona, ma indica quel codice).

Utilizzo di Xam.iOS tramite un server di build (il codice proviene da VS2015). Xcode sta eseguendo gli emulatori 8.3 (potrebbe essere necessario aggiornare per consentire 8.4 test)

risposta

2

Potrebbe essere che il Linker stia ottimizzando il costruttore, se pensa che non sia usato. Prova a impostare le Opzioni del linker su "Non collegare" e controlla se lo fa di nuovo, o addirittura aggiungi un'istanza della classe altrove, in modo che il Linker sappia che il costruttore è utilizzato. Non vuoi necessariamente lasciarlo in quel modo, ma se elimina l'errore, conoscerai almeno il motivo.

+1

Aggiungere l'attributo [Preserva] sul costruttore predefinito per impedire al linker di ottimizzarlo. – Softlion

+0

@Steve Morgan, provato le opzioni del linker a "Do not Link" ancora il suo crash .. Sto cercando di eseguire iPhone distribuzione di build sul mio iPhone sto caricando il mio ipa su App Store e l'utilizzo di test-Flight scaricando l'ipa e provando a eseguire l'app si blocca immediatamente ... Se eseguo la mia app sul simulatore funziona bene solo per la distribuzione che genera questo problema Qualsiasi suggerimento sarà appropriato .. – Sanket

0

L'attributo [Conserva] ha fatto il trucco per me. Decora il costruttore e mantieni le impostazioni del linker.

Questo attributo fa parte dello spazio dei nomi Microsoft.WindowsAzure.MobileServices.