是否有一种方法来强制MonoDevelop构建/加载程序集



我有一个MonoTouch应用程序,它正在管理程序集列表。我希望开发人员能够尽可能容易地修改程序集列表。我希望我可以让他们在应用程序的引用中添加一个程序集,然后我可以像这样循环它们:

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(不确定这里负责)在参考资料文件夹中构建和加载所有程序集,而不显式引用这些程序集中的某些类型?

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

之后缺少引用意味着托管链接器(首先是可选的)和AOT编译器(其次是设备必须的)不会处理和编译程序集。

最简单的方法是确保在应用程序中存在对每个程序集中的类型的引用。这是一行汇编代码——但也很容易被忘记。

你可以通过添加一个预构建步骤(在MonoDevelop中)来自动化这个步骤,它将读取程序集(例如在一个目录中)并生成一个c#文件(例如一个部分类),你将其包含在你的应用程序中。这样人们就不必记得在你的构建中添加新的程序集。

最新更新