3

現在、モノタッチ アプリでプラグイン アセンブリを動的に読み込もうとしています。

これを行うには、アプリ プロジェクトでプラグイン dll を参照し、limker を「sdk only」に設定してからAssembly.Load(filename)、プラグインが必要なときにアプリ内で呼び出そうとしています。

これは、以前モノドロイドで成功裏に使用したのと同じアプローチです。ただし、現在、これはモノタッチで FileLoadException で失敗しています。

このアプローチはモノタッチで可能ですか? 含める必要がある特別なファイル パスはありますか? または、これは aot 環境ではサポートされていませんか?


注:明らかに、同様の効果を達成できる他の方法があります-そして、バックアップ計画があります...しかし、これが私の優先ルートです(機能させることができる場合)

4

2 に答える 2

4

次のようなコード:

var a = Assembly.Load ("mscorlib.dll");
Assert.NotNull (a);

シミュレーターとデバイスの両方で正常に動作します。ただし、のパラメーターLoadはファイル名assemblyStringではありません(例外がスローされた場合でも)。

他にも多くのオーバーロード ( 用Load) や他のメソッド ( などLoadFrom) が存在しますが、MonoTouch 内ですべてが機能するとは限りません (一部のランタイム サポートが欠落している可能性があるため)。

ノート

の処理mscorlib.dllは特別です (そして、他のアセンブル、つまりショートカットよりも多くの場合に機能します)。ただし、リフレクションベースの方法は、より多くの場合で期待どおりに機能するようです。

string filename = System.IO.Path.GetFileName (GetType ().Assembly.Location);
Assembly assembly = Assembly.ReflectionOnlyLoadFrom (filename);
于 2012-09-13T12:28:19.307 に答える
1

Assembly.Load (またはコードを動的にロードするその他の方法) は、MonoTouch ではサポートされていません。

これは iOS の制限です。すべての実行可能コードはアプリ内にある必要があります (また、ネイティブ コードである必要があります。これが、コンパイル時に AOT を使用してネイティブ コードを生成する理由です)。

于 2012-09-13T08:05:37.147 に答える