2012-06-01 13 views
6

Sto provando ad utilizzare la libreria DotNetZip nella mia app Monodroid. Tutto sembra funzionare correttamente quando abilito l'opzione di compilazione Runtime condiviso. Quando ho disattivare Shared Runtime, la lineaOttenere la codifica non riesce quando creo un progetto Monodroid con runtime non condiviso

static System.Text.Encoding ibm437 = System.Text.Encoding.GetEncoding("IBM437"); 

genera un'eccezione (nome di codifica 'IBM437' non supportato). Ho controllato tutte le caselle nella lista "Codifiche aggiuntive supportate", ma non sembra essere d'aiuto. Qualcuno ha qualche idea?

+0

È possibile presentare un bug su bugzilla.xamarin.com e allegare una testcase? Abbiamo un esempio che utilizza CP1252 e funziona: https://github.com/xamarin/monodroid-samples/blob/master/SanityTests/Hello.cs#L332 https://github.com/xamarin/monodroid-samples/blob /master/SanityTests/SanityTests.csproj#L110 – jonp

risposta

11

Ho avuto lo stesso identico problema.

prima cosa, assicurarsi di aver aggiunto la codifica "Occidente" nelle proprietà del progetto:

Xamarin Internationalization

Se questo non fa il trucco, il problema è che le DLL necessarie non sono essere copiati nella cartella degli assembly di .apk. Questo dovrebbe accadere automaticamente, ma non è così. Ho presentato un bug, in modo da vedere se è stato risolto:

Mono for Android/Xamarin Bugzilla

Se no, qui è una soluzione che ha funzionato per me (da Xamarin):

  1. manualmente aggiungere riferimenti a I18N .dll e I18N.West.dll
  2. Impostare le proprietà della 'copia locale' a 'vero' per entrambe le dLL
  3. aggiungere il seguente codice fittizio per ottenere il 2 dLL aggiunti alla .apk

    var ignore = new I18N.West.CP437();

  4. Assicurarsi che 'Linking' è impostato su 'None'

Spero che questo aiuti!

+0

Ho appena provato la tua soluzione e posso confermare che funziona. Grazie per la pubblicazione. (La mia soluzione alternativa stava sostituendo ogni riferimento IBM437 con UTF-8.) – Ash

Problemi correlati