|
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 |
|
|
start [/forum/topic.php?fid=20&msg=39740069&tid=1398272]: |
0ms |
get settings: |
19ms |
get forum list: |
25ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
15ms |
get forum data: |
2ms |
get page messages: |
513ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 675ms |
0 / 0 |