|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Пытаюсь сделать систему плагинов. Проект 1 - набор интерфейсов и статический класс, перебирающий dll'ки в поисках классов, реализующих эти интерфейсы. Перебирает таким способом: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Проект 2 - потребитель плагинов, дергает RequestPlugins. Проект 3 - плагин, один из классов которого реализует IPlugin. 2 и 3 зависят от 1, и не зависят друг от друга. 1 ни от кого не зависит. Пока 3 лежит в отдельной папке, всё работает, а как только перемещается в bin проекта 2 - перестает. Обнаружил, что в точке останова внутри вышеуказанной процедуры TypeHandle у typeof(IPlugin) и plugType.ImplementedInterfaces[0] (если вручную присвоить plugType из GetExportedTypes, IsAssignableFrom перестает работать) - разные, то есть с точки зрения 1 и 3 IPlugin, который 1 предоставляет, а 3, соответственно, реализует - это разные IPlugin'ы. Соответственно и CreateInstance перестает работать - IApiFactory тоже становятся разными, возникает ошибка о том, что подходящий конструктор не найден. Почему это происходит и как победить? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 18:48 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Antonariy, Exception какой? У меня подозрение на строку Код: c# 1.
Возможно вылетает при попытке вставить неуникальный plugin.Id? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 18:56 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Antonariy, Попробуй без linq на циклах отладить. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:15 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Зачем велосипеды? Есть ведь MEF . ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:21 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
fkthatЗачем велосипеды? Есть ведь MEF . А что это за зверь, в двух словах? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:25 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Antonariy, 1. LoadFrom уже не верно. Надо ReflectionOnlyLoad. 2. Оставь это рукоблудие, используй System.ComponentModel.Composition ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:33 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Cat2fkthatЗачем велосипеды? Есть ведь MEF . А что это за зверь, в двух словах? "Managed Extensibility Framework". Несложная приблуда (осваивается за час), специально, чтобы лепить приложения с плагинами. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:42 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
fkthatCat2пропущено... А что это за зверь, в двух словах? "Managed Extensibility Framework". Несложная приблуда (осваивается за час), специально, чтобы лепить приложения с плагинами. Приложения с платинами или плагины к приложениям? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:50 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Cat2Приложения с платинами или плагины к приложениям? Приложения, в которые ты хочешь встроить свою систему плагинов. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 19:54 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
fkthatCat2Приложения с платинами или плагины к приложениям? Приложения, в которые ты хочешь встроить свою систему плагинов. Спасибо. Страшно далек я от плагинов и ничего о них не знаю ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 20:00 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Petro123Antonariy, Попробуй без linq на циклах отладить. +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 20:04 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
AntonariyIPlugin, который 1 предоставляет, а 3, соответственно, реализует - это разные IPlugin'ы. Чисто, в порядке мозгового штурма - может что-то не так с версиями сборок? Типа 3 собрана с какой-то другой версией 1, чем та, с которой собрана 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2018, 20:19 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Petro123Antonariy, Попробуй без linq на циклах отладить.linq тут вообще ни при чем, я же написал, что в ручном режиме не работает. fkthat Зачем велосипеды? Есть ведь MEF.Хрень какая-то. В демонстрационном солюшене вынес интерфейсы в отдельный проект как у меня, перевел на него зависимости, и все перестало работать: "Не удалось загрузить тип "SimpleCalculator3.IOperation" из сборки "SimpleCalculator3". Вот же тупой Composition, не может по строчке new AssemblyCatalog(typeof(IOperation).Assembly) догадаться, в какой сборке лежит IOperation. mikron 1. LoadFrom уже не верно. Надо ReflectionOnlyLoad. ок fkthatЧисто, в порядке мозгового штурма - может что-то не так с версиями сборок?Нет, меняется только командная строка в событиях после сборки, которая копирует собранную длл в ту или иную папку. Копируешь в bin основного проекта - не пашет, копируешь в любую другую папку - пашет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 00:07 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
AntonariyPetro123Antonariy, Попробуй без linq на циклах отладить.linq тут вообще ни при чем, я же написал, что в ручном режиме не работает.мы же код текущий смотрим. Приведи код ручного режима и исключение на строке. Если до сих пор не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 07:05 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
>> file.Substring(file.Length - 4).ToLower() != ".dll" Path.GetExtension >> var ass = Assembly.LoadFrom(file); Так делать некомильфо. Загруженный плагиг уже не выгрузить. Обычно создают отдельный AppDomain и грузят в него. И когда возникает надобность выгрузить ненужный плагин без перезапуска ПО, выгружают весь AppDomain И уже правильно рекомендовали: MEF. Более сложная штука, но более устойчивая с сбоям - MAF. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 09:28 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
>> Directory.GetFiles(Directory.GetCurrentDirectory()) Вы уверены, что такая конструкция верно с вашей точки зрения определяет текущую папку? Попробуйте явно задать путь, в целях отладки. >> Обнаружил, что в точке останова внутри вышеуказанной процедуры TypeHandle ... разные А какие? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 09:33 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Arm79Так делать некомильфо. Загруженный плагиг уже не выгрузить.не требуется Arm79А какие? TypeHandle это число, какая разница, какие конкретно значения? Важно лишь то, что в разных папках они одинаковые, а в одной - отличаются. И это как-то указывает на причину проблемы, но пока не ясно как. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 09:47 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Antonariymikron 1. LoadFrom уже не верно. Надо ReflectionOnlyLoad. окне катит, зависимые сборки не грузятся, сваливается в ошибку. короче: Код: c# 1. 2.
не работает Код: c# 1. 2.
работает ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 10:19 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Arm79>> Directory.GetFiles(Directory.GetCurrentDirectory()) Вы уверены, что такая конструкция верно с вашей точки зрения определяет текущую папку? Попробуйте явно задать путь, в целях отладки. Antonariy Код: c# 1. 2.
работает Накидал по быстрому проект, работает: Основное приложение Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Общая сборка с интерфейсом Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Две разные сборки с классами-наследниками от IPlugin Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Результат работы Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 11:06 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Забыл добавить - все 4 сборки в одном каталоге (bin хостового приложения) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 11:11 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Можете солюшен приложить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 12:43 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Arm79, Солюшен работает нормально. Попробуй выкосить все папки bin и по-новой собрать. Стопудово у тебя в bin лежит какая-то не та сборка. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 15:23 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Сборка та, я ее руками копирую из bin наружу. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 15:26 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
fkthat, у меня все хорошо ))) Это Antonariy мучается ) Antonariy, может у тебя платформа не та? разные версии фреймворков? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 15:39 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Arm79fkthat, у меня все хорошо ))) Это Antonariy мучается ) Antonariy, может у тебя платформа не та? разные версии фреймворков?То есть я руками копирую бинарник, не работающий в одной папке, в другую папку, где он работает, а у него магическим образом в процессе копирования меняется версия фреймворка? Уже обвиняли неуникальный ключ в пустом Dictionary, потом Linq, теперь эзотерику... Больше ада и оригинальных предположений! :)) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 22:33 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Телепатов тут нет, информации недостаточно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 22:49 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Arm79Телепатов тут нет, информации недостаточноинформации достаточно, чтобы исключать абсурдные причины. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.11.2018, 22:54 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
AntonariyArm79Телепатов тут нет, информации недостаточноинформации достаточно, чтобы исключать абсурдные причины. Проза жизни: авторЕсть такой бородатый анекдот: Стоит новый русский около своего мерса, грустно так. Останавливается еще один: че, типа, стоишь? Да вот, сломалась — не едет. А стекла протирал? Протирал. А колеса пинал? Пинал. Ну тогда, братан, не знаю. anekdotov.net ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 07:35 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
AntonariyБольше ада и оригинальных предположений! :))если у самого не получается, тебе нужно выключить мозги и делать все что предлагают. Как в больнице. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 07:50 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Antonariy Код: c# 1. 2.
не работает Код: c# 1. 2.
работает во втором случае - задан абсолютный путь ass.CodeBase - корректный? (ass - это сильно) https://stackoverflow.com/questions/1477843/difference-between-loadfile-and-loadfrom-with-net-assemblies ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 09:27 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Изопропилво втором случае - задан абсолютный путьБез разницы, изначально в обоих случаях путь начинался с GetCurrentDirectory. Изопропилass.CodeBase - корректный?Проверю. Изопропил (ass - это сильно)это ты еще на plug внимание не обратил) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 09:44 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Petro123AntonariyБольше ада и оригинальных предположений! :))если у самого не получается, тебе нужно выключить мозги и делать все что предлагают. Как в больнице.в этой больнице половина советчиков сами пациентами являются. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 09:45 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Antonariyв этой больнице половина советчиков сами пациентами являются.ответ ты сам знаешь - тогда в платную клинику или в личку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 09:56 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Попробуй так: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2018, 10:07 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
А можно ли через Reflection отдуплить инициализирующее значение свойства? Код: c# 1.
Троечку хочу вытащить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 18:17 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Это ж сахар. Фактически, ЕМНИП, компилятор просто запихивает инициализацию поля в конструктор, так что к метаданным это не имеет отношения ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 18:33 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
Разве что инстанцировать класс через рефлексию и посмотреть значение поля... )) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 18:34 |
|
Reflection не отдупляет
|
|||
---|---|---|---|
#18+
В общем, так и думал. Придется объект создавать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 18:34 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1398272]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 299ms |
total: | 440ms |
0 / 0 |