2011-12-19 4 views
1

私は、アセンブリのリストを管理しているMonoTouchアプリケーションを持っています。私は開発者ができるだけ簡単にアセンブリのリストを変更できるようにしたい。私はちょうど彼らがアプリケーションの参照にアセンブリを追加するかもしれないことを期待して、私ができることをして、このようにそれらをループ:MonoDevelopにアセンブリをビルド/ロードさせる方法はありますか?

foreach (AssemblyName assemblyName in this.GetType().GetReferencedAssemblies()) 
{ 
    Assembly assembly = Assembly.Load(assemblyName); 
    //Do something with assembly 
} 

は私がいる問題は、すべてのアセンブリが、私は明示的ではないだということです参照はGetReferencedAssemblies()によって返された配列には見つかりません。アプリケーションは警告Library 'Unreferenced.dll' missing in app bundle, cannot extract contentでコンパイルされます。

MonoDevelopまたはMonoTouch(ここでは責任を負いません)を強制して、Referencesフォルダ内のすべてのアセンブリをビルドしてロードする方法はありますか?

+0

同様の質問:

答えて

1

コンパイラの機能から始まります。 に取得するには、GetReferencedAssembliesリストを参照する必要があります。それは直接(例えば、明示的な型が参照される)、または間接的に(例えば、参照の参照)可能であり得る。コンパイラがアセンブリへの参照を参照していない場合、それはAssemblyRefメタデータの一部ではありません。

その後、参照の不足は管理されたリンカ(最初、オプション)と次にAOTコンパイラ(2番目はデバイスに必須)を意味しますはアセンブリを処理してコンパイルしません。

簡単な方法は、アプリケーションに存在する各アセンブリの型への参照を確実にすることです。アセンブリのコードは1行ですが、忘れても簡単です。

これを自動化するには、(ディレクトリ内の)アセンブリを読み取り、アプリケーションに組み込むC#ファイル(例えば部分クラス)を生成するプリビルドステップ(MonoDevelop)を追加します。そうすれば、人々はあなたのビルドに新しいアセンブリを追加することを忘れる必要はありません。

+1

ありがとうございます。私は、コンパイラスイッチがあることを望んでいたが、これは正常に動作します。私は特にこれを行うクラスを自動生成についてのヒントを感謝します。私はちょうどそれをやったし、それは素晴らしい動作します。 –

関連する問題