Есть ли способ заставить MonoDevelop собрать / загрузить сборку? - PullRequest
1 голос
/ 20 декабря 2011

У меня есть приложение 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 (не уверен, кто здесь ответственен)Собрать и загрузить все сборки в папке «Ссылки» без явной ссылки на какой-либо тип в этих сборках?

1 Ответ

1 голос
/ 20 декабря 2011

начинается с компилятора функция .Чтобы получить в списке GetReferencedAssemblies, необходимо указать ссылку на сборку.Это может быть напрямую (например, ссылка на явный тип) или косвенно (например, ссылки ссылки).Если компилятор не видит ссылку на сборку, он не будет частью метаданных AssemblyRef.

Впоследствии отсутствие ссылок означает управляемый компоновщик (сначала необязательный), а затем компилятор AOT(во-вторых, обязательно для устройств) не будет обрабатывать и компилировать сборки.

Самый простой способ - обеспечить наличие ссылки на тип в каждой сборке в вашем приложении.Это одна строка кода для сборки - но это тоже легко забыть.

Вы можете автоматизировать это, добавив шаг предварительной сборки (в MonoDevelop), который будет читать сборки (например, в каталоге) и генерироватьФайл C # (например, частичный класс), который вы включаете в свое приложение.Таким образом, людям не нужно будет добавлять новые сборки в вашу сборку.

...