2016-07-02 5 views
3

モノラルフレームワークをインストールすることなくアプリケーションを配布するために、MonoKickstartを使用してランタイム時にMonoライブラリを動的にリンクします。アプリケーションの起動時に、Ionic.Zipライブラリを使用してアーカイブを抽出しています。デフォルトでは、このライブラリーはIBM437エンコードを使用します。ただし、次の例外で見ることができるように、それはこのエンコーディングをロードすることができません:モノをエンコードできません437

System.NotSupportedException: No data is available for encoding 437. 
    at System.Text.Encoding.GetEncoding (Int32 codepage) <0x10a0d9970 + 0x0076e> in <filename unknown>:0 

このデフォルトエンコーディングを静的に初期化されるので、私たちは別のエンコーディングを指定していても、例外がまだ発生します。

我々は、動的にロードされるライブラリにI18N.dllとI18N.West.dllライブラリが含まれている場合、次の例外が発生します。

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidProgramException: Invalid IL code in I18N.Common.Manager:get_PrimaryManager(): IL_0000: ret  
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x11b3340e0 + 0x000bb> in <filename unknown>:0 
--- End of inner exception stack trace --- 
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x11b3340e0 + 0x00139> in <filename unknown>:0 
at System.RuntimeType.InvokeMember (System.String name, BindingFlags bindingFlags, System.Reflection.Binder binder, System.Object target, System.Object[] providedArgs, System.Reflection.ParameterModifier[] modifiers, System.Globalization.CultureInfo culture, System.String[] namedParams) <0x11b332300 + 0x011b7> in <filename unknown>:0 
at System.Text.EncodingHelper.InvokeI18N (System.String name, System.Object[] args) <0x11b32fa10 + 0x00317> in <filename unknown>:0 
at System.Text.Encoding.GetEncoding (Int32 codepage) <0x111378970 + 0x00671> in <filename unknown>:0 

ように我々は、また、私たち自身のエンコードを作成することができません間違いなく問題です。

正しいライブラリを追加することでエンコーディングのロードを修正する方法がありますか、あるいは何らかの方法でエンコーディングが完全に初期化されないようにすることができますか?

我々は現在、動的にロードするDLLのリストは、次のとおりです。リンクされthe pageハンスから直接

Ionic.Zip.Reduced.dll 
Mono.Posix.dll 
Mono.Security.dll 
mscorlib.dll 
System.Configuration.dll 
System.Core.dll 
System.Data.dll 
System.dll 
System.Drawing.dll 
System.Net.dll 
System.Numerics.dll 
System.Runtime.Serialization.dll 
System.Security.dll 
System.Xml.dll 
System.Xml.Linq.dll 
WindowsBase.dll 
+0

https://bugzilla.xamarin.com/show_bug.cgi?id=36154 – SushiHangover

+0

[文書化された動作](https://developer.xamarin.com/guides/mac/application_fundamentals/troubleshooting/)をご覧ください。 –

答えて

5

あなたXamarin.Macアプリでサードパーティのライブラリを含めて、あなたがエラーを取得する可能性があります「System.NotSupportedException:エンコードに利用できるデータがありません」というエラーメッセージが表示され、アプリケーションをコンパイルして実行しようとしたときにエラーが発生します。たとえば、Ionic.Zip.ZipFileなどのライブラリは、操作中にこの例外をスローすることがあります。

この

は西国際化>を構築するMacに国際化を行く、Xamarin.Macプロジェクトのためのオプションを開いて確認することで解決することができます:MacのプロジェクトとiOSの両方のための

作品。また、デバッグとリリース(アプリをアプリストアにリリースする場合)の両方でチェックしてください。

関連する問題