【问题标题】:Is there a way to force MonoDevelop to build/load an assembly?有没有办法强制 MonoDevelop 构建/加载程序集?
【发布时间】:2011-12-19 20:49:30
【问题描述】:

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

【问题讨论】:

  • 类似问题:stackoverflow.com/questions/5695422/…>

标签: .net reflection xamarin.ios assemblies monodevelop


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢。我希望可能有一个编译器开关,但这会很好。我特别欣赏有关自动生成将执行此操作的类的提示;我已经这样做了,效果很好。
猜你喜欢
  • 2011-01-23
  • 2021-04-29
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 2016-07-06
  • 1970-01-01
相关资源
最近更新 更多