System.Windows.Markup.XamlParseException

Автор Тема: System.Windows.Markup.XamlParseException  (Прочитано 13237 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн LemieuxАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
System.Windows.Markup.XamlParseException
« : 06-04-2020, 19:24:03 »
Всех приветствую.
Кто-нибудь ловил вот такое исключение при вызове модального/не модального окна? Вылетает оно только при работе с автокадом, если загрузить GongSolutions из NuGet или просто добавить как референс. Если просто компилировать оконное приложение, то всё норм.

Код - C# [Выбрать]
  1. System.Windows.Markup.XamlParseException: 'Could not load file or assembly 'GongSolutions.WPF.DragDrop, PublicKeyToken=91f1945125b7a587' or one of its dependencies.

Почему мне нужна эта библиотека? Я пытаюсь сделать окно, которое отображает мой лист выбранных элементов на чертеже и, при этом, я хотел бы их сортировать вручную перетаскиванием. Поиск примеров гугл не даёт результатов по примерам, а мозгов пока не хватает, чтобы разобраться в эвентах и в этой теме https://docs.microsoft.com/ru-ru/dotnet/framework/wpf/advanced/drag-and-drop-overview

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #1 : 06-04-2020, 19:39:04 »
Если просто компилировать оконное приложение, то всё норм.
Потому что эта dll-ка лежит рядом с exe-файлом. С AutoCAD'ом так не получится - нужно его самостоятельно загрузить, так как AutoCAD его не найдёт.
https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.assemblyresolve?view=netframework-4.8
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Lemieux 06-04-2020, 20:57:00

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #2 : 06-04-2020, 19:43:05 »
Аналогичная тема: https://adn-cis.org/forum/index.php?topic=1876.0
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн LemieuxАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: System.Windows.Markup.XamlParseException
« Ответ #3 : 06-04-2020, 20:57:58 »
Аналогичная тема: https://adn-cis.org/forum/index.php?topic=1876.0
Большое спасибо за наводку. Понял свою ошибку при поисковом запросе и ничего, пока что, не понял в решении проблемы   :)

Оффлайн LemieuxАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: System.Windows.Markup.XamlParseException
« Ответ #4 : 06-04-2020, 22:00:28 »
Если я правильно понял, то Автокад хочет, чтобы я помимо сборки моего проекта грузил ему, через команду "NETLOAD", вот эту библиотеку "GongSolutions.WPF.DragDrop", которую я использую в своём проекте? И решение проблемы состоит в том, чтобы отловить событие "AppDomain.AssemblyResolve" и понему автоматически загрузить эту библиотеку?

Просто я у этой библиотеки поставил свойство "Copy Local = True", чтобы не ходить далеко, загрузил вручную её в Автокад, и всё заработало.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #5 : 06-04-2020, 23:03:10 »
Если я правильно понял, то Автокад хочет, чтобы я помимо сборки моего проекта грузил ему, через команду "NETLOAD", вот эту библиотеку "GongSolutions.WPF.DragDrop", которую я использую в своём проекте? И решение проблемы состоит в том, чтобы отловить событие "AppDomain.AssemblyResolve" и понему автоматически загрузить эту библиотеку?
Нет. Ты понял неправильно. Когда идёт обращение "GongSolutions.WPF.DragDrop" из твоего dll-приложения, .NET Framework пытается его найти и найти не может. Тебе нужно ему подсказать где оно находится, а точнее загрузить его. В принципе ты можешь для начала попробовать загрузить его при помощи Assembly.LoadFile в методе Initialize. Если это не поможет, то в методе Initiliaze подписывайся на событие AssemblyResolve и в нём, если  ResolveEventArgs.Name равно "GongSolutions.WPF.DragDrop", то загружай при помощи Assembly.LoadFile эту сборку и возвращай её из этого события.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: System.Windows.Markup.XamlParseException
« Ответ #6 : 07-04-2020, 14:35:49 »
Хм, так, получается, что это решение может подойти и для этой проблемы: https://adn-cis.org/forum/index.php?topic=7885.0 ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #7 : 07-04-2020, 14:55:43 »
Хм, так, получается, что это решение может подойти и для этой проблемы: https://adn-cis.org/forum/index.php?topic=7885.0 ?
Думаю да.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн LemieuxАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: System.Windows.Markup.XamlParseException
« Ответ #8 : 07-04-2020, 15:12:52 »
Я решил проблему, но возник другой вопрос. Когда компилируется проект, то сторонняя библиотека не встраивается в сборку и, если я свою готовую dll перенесу на другой комп, придётся таскать эту библиотеку везде со своим файлом?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #9 : 07-04-2020, 15:15:36 »
если я свою готовую dll перенесу на другой комп, придётся таскать эту библиотеку везде со своим файлом?
Конечно придётся. Если эта сторонняя библиотека, которой нет ни в AutoCAD, ни среди библиоток .NET Framework.
Я решил проблему
Каким образом?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн LemieuxАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: System.Windows.Markup.XamlParseException
« Ответ #10 : 07-04-2020, 15:46:13 »
Каким образом?
Как Вы подсказали. Попробовал использовать эвент, грузил напрямую
Код - C# [Выбрать]
  1. AssemblyName assemName = AssemblyName.GetAssemblyName("Путь до файла");
  2. AppDomain.CurrentDomain.Load(assemName);
что фактически одно и то же. У меня ещё есть идеи, но как Вы уточнили, всё сводится к сторонним файлам в проекте.

Но если таскать стороннюю библиотеку, то не проще ничего не писать в коде, а разместить стороннюю библиотеку в папке "C:\Program Files\Autodesk\ApplicationPlugins\.bundle" и прописать, что нужно в файле "PackageContents.xml"? Но и этот способ мне не нравится, так как из-за какого-то "перетаскивания" нужно таскать целую библиотеку. Буду пытаться разобраться в работе эвентов, чтобы просто написать своё перетаскивание.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #11 : 07-04-2020, 16:52:48 »
Но если таскать стороннюю библиотеку, то не проще ничего не писать в коде, а разместить стороннюю библиотеку в папке "C:\Program Files\Autodesk\ApplicationPlugins\.bundle" и прописать, что нужно в файле "PackageContents.xml"?
А причем здесь одно к другому? В коде все-равно придётся писать. И таскать эту стороннюю библиотеку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн LemieuxАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 389
  • Карма: 21
Re: System.Windows.Markup.XamlParseException
« Ответ #12 : 07-04-2020, 17:23:48 »
А причем здесь одно к другому? В коде все-равно придётся писать. И таскать эту стороннюю библиотеку.
Так я писал про то, что не проще в своём бандле разместить все необходимые библиотеки, чем писать в коде проверку на подключение модулей или подключать их вручную?

Я вот сейчас проверил, сделал бандл "TEST.bundle", кинул в папку "content" dll моего проекта и dll "GongSolutions.WPF.DragDrop", прописал всё в "PackageContents", и всё заработало без лишних строк в коде проекта.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #13 : 07-04-2020, 17:26:47 »
Я вот сейчас проверил, сделал бандл "TEST.bundle", кинул в папку "content" dll моего проекта и dll "GongSolutions.WPF.DragDrop", прописал всё в "PackageContents", и всё заработало без лишних строк в коде проекта.
Это работает не всегда и не во всех версиях AutoCAD. Так что рекомендую код загрузки оставить. Он будет срабатывать только если эта библиотека не будет найдена.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: System.Windows.Markup.XamlParseException
« Ответ #14 : 07-04-2020, 17:34:14 »
Lemieux,
Стоп! А что ты подразумевал под
прописал всё в "PackageContents"
???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение