Порядок сборки в .net c # - PullRequest
       44

Порядок сборки в .net c #

4 голосов
/ 31 января 2011

Аналогичный вопрос был задан в Порядок запросов на отражение в dotnet Но я надеюсь на другой ответ ... Я пишу плагин для программы, которая использует отражение для опроса плагинов, чтобы найти точку входа. К сожалению, у него есть ошибка, которая означает, что если он встречает объявление интерфейса во время этого процесса, он вылетает с необработанным исключением. Я говорил с командой разработчиков, и это вряд ли будет исправлено. Это чрезвычайно ограничивает меня по понятным причинам. Один из обходных путей, о котором я уже подумал, состоит в том, чтобы моя сборка загружала другую сборку с включенными в нее интерфейсами, но по причинам, в которые я не буду вдаваться, это не лучшее решение. Прошло некоторое время, прежде чем я столкнулся с этой проблемой, потому что по какой-то причине мой класс входа всегда предшествовал моим интерфейсам в порядке перечисления отражения.

У меня вопрос, есть ли способ повлиять на порядок классов и интерфейсов в сборке?

Примечание. Я уже пытался установить разные уровни доступности на своих интерфейсах, но это не работает для меня. Ура, J * +1007 *

1 Ответ

2 голосов
/ 31 января 2011

Ставлю код, используя AppDomain.GetAssemblies(), которые затем проверяются.Реализация AppDomain.GetAssemblies() приводит к внешнему методу, поэтому Reflector здесь в основном не поможет.

Однако, фактически не пробуя и не проверяя результат, есть два логических варианта упорядочения сборок врезультат:

  1. Порядок загрузки
  2. Алфавитный порядок

В первом случае вам, вероятно, придется организовать ссылки между сборками и порядком загрузки втаким образом, что внешний код находит правильную сборку с классом точки входа и останавливается.Во втором случае было бы чисто называть сборки «правильным» образом, но я сомневаюсь, что это именно тот случай.

(Однако порядок может быть совершенно отличным от двух приведенных выше,например, «в основном» также случайный.)

В любом случае, я думаю, рано или поздно глючный код столкнется с проблемной сборкой и все равно вылетит.Таким образом, сильная рекомендация: настаивать на исправлении ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...