2011-12-19 156 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(不知道这是谁负责)构建和加载参考文件夹中的所有程序集,而没有显式引用这些程序集中的某些类型?

+0

相似的问题: 2011-12-20 03:52:11

回答

1

它从编译器功能开始。为了得到GetReferencedAssemblies列表中,程序集必须被引用。它可以是直接的(例如引用显式类型)或间接的(例如引用的引用)。如果编译器没有看到对程序集的引用,那么它将不会成为AssemblyRef元数据的一部分。

之后缺少引用意味着管理链接器(第一个,可选)然后是AOT编译器(第二个,对于设备是强制性的)将不会进程和编译程序集。

简单的方法是确保在应用程序中存在每个程序集中存在的类型的引用。它是通过汇编代码的一行 - 但它也很容易被遗忘。

您可以通过添加预构建步骤(在MonoDevelop中)来自动执行此操作,该步骤将读取程序集(例如在目录中)并生成包含在应用程序中的C#文件(例如,部分类)。这样人们就不必记得向构建中添加新的程序集。

+1

谢谢。我希望有一个编译器开关,但这将工作正常。我特别感谢关于自动生成一个能够做到这一点的类的提示;我已经做到了,它的效果很好。 – 2011-12-19 23:41:57

相关问题