2011-12-19 110 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

相關問題