Как в сборку для ACAD подключить FontAwesome?

Автор Тема: Как в сборку для ACAD подключить FontAwesome?  (Прочитано 1488 раз)

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

Оффлайн Алексей КуликАвтор темы

  • Administrator
  • *****
  • Сообщений: 946
  • Карма: 154
Пробую написать приложение под ACAD с использованием FontAwesome5. При вызове любой формы, содержащей хоть что-то от FontAwesome, получаю сообщение об ошибке типа "Файл не найден".
Смотрю - а файлы FontAwesome5, FontAwesome5.NET на самом деле рядом лежат.

Если сделать обычный exe и в него подключить эту сборку, то все показывается и все срабатывает.

Полный текст ошибки:
Цитировать
System.Windows.Markup.XamlParseException
  HResult=0x80131501
  Сообщение = Could not load file or assembly 'FontAwesome5.Net, PublicKeyToken=9cfaf01297a008f8' or one of its dependencies. Не удается найти указанный файл.
  Источник = PresentationFramework
  Трассировка стека:
   at System.Windows.Markup.XamlReader.RewrapException(Exception e, IXamlLineInfo lineInfo, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri)
   at System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri)
   at System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream)
   at ASpecCore.Views.UserControls.FactoryUserControl.InitializeComponent() in C:\Users\kpblc\source\repos\ASpec2\ASpecCore\Views\UserControls\FactoryUserControl.xaml:line 1

Внутреннее исключение 1:
FileNotFoundException: Could not load file or assembly 'FontAwesome5.Net, PublicKeyToken=9cfaf01297a008f8' or one of its dependencies. Не удается найти указанный файл.
И подобная ситуация повторяется на нескольких аналогичных пакетах и на разных версиях.
Что я делаю не так и каким образом можно все-таки FontAwesome (5 или аналог - непринципиально) подключить к сборке под ACAD?
Спасибо!
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Отмечено как Решение Алексей Кулик 23-06-2021, 12:41:47

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

  • Administrator
  • *****
  • Сообщений: 12907
  • Карма: 1663
  • Рыцарь ObjectARX
  • Skype: rivilis
Смотрю - а файлы FontAwesome5, FontAwesome5.NET на самом деле рядом лежат.
То что они лежат рядом - это не имеет никакого значения. Ты должен их подгрузить в методе Initialize (если неуспеваешь их использовать их в каких-то статических методах до вызова Initialize). Точнее в Initialize ты должен подписаться на событие AppDomain.CurrentDomain.AssemblyResolve, а в этом событии находить и загружать соответствующий dll-файл. У нас на форуме есть примеры. Поищи по "AssemblyResolve".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КуликАвтор темы

  • Administrator
  • *****
  • Сообщений: 946
  • Карма: 154
Ок, поищу. Но почему тот же EntityFramework прекрасно подгружается и без таких шагов? Магия? :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 12907
  • Карма: 1663
  • Рыцарь ObjectARX
  • Skype: rivilis
Ок, поищу. Но почему тот же EntityFramework прекрасно подгружается и без таких шагов? Магия? :)
Эта (если я ничего не путаю) сборка входит в состав .NET Framework и зарегистрирована в системе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2456
  • Карма: 692
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Но почему тот же EntityFramework прекрасно подгружается и без таких шагов? Магия?
Есть такая беда в Автокаде - плохо цепляет сборки с XAML-зависимостями. То есть, если в XAML-разметке есть код типа:
Код - XML [Выбрать]
  1. pack://application:,,,/ReferencedAssembly;component/ResourceFile.xaml
Ну или тому подобные ссылки из XAML на другие сборки.
Поэтому, нужен такой костыль в виде AssemlyResolve.
А EntityFramework цепляется по "обычным" зависимостям .NET. Поэтому, с ним таких проблем и нет.

Оффлайн Алексей КуликАвтор темы

  • Administrator
  • *****
  • Сообщений: 946
  • Карма: 154
О как... Спасибо! :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1589
  • Карма: 350
  • Отец modplus.org
    • ModPlus
Чтобы библиотеки нормально цеплялись они должны лежать в корне папки, в которой расположен acad.exe. Поэтому лучше всегда их загружать принудительно

Оффлайн Алексей КуликАвтор темы

  • Administrator
  • *****
  • Сообщений: 946
  • Карма: 154
Огось! Спасибо ))
Как много нам открытий чудных готовит автодеска дух...
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • ADN
  • *
  • Сообщений: 2456
  • Карма: 692
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Чтобы библиотеки нормально цеплялись они должны лежать в корне папки, в которой расположен acad.exe. Поэтому лучше всегда их загружать принудительно
Ну, для железобетонности, наверное, можно и все и всегда грузить принудительно. Но это накладно. Особенно, когда ты используешь сборку, которая ссылается на другую сборку, а та тянет третью и тд. Подгрузку каждой из них устанешь прописывать... Можно, конечно, сделать универсальный загрузчик. который сканирует всю папку и загружает все dll из неё. Но как-то пока не вижу в этом резона. Да и есть теоретический риск загрузить что-то лишнее, что вызовет другие проблемы.
По моему опыту, проблемы были только с XAML. В остальных случаях DLL рядом корректно находило. Или я ошибаюсь, и с обычными DLL тоже бывали проблемы?

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

  • Administrator
  • *****
  • Сообщений: 12907
  • Карма: 1663
  • Рыцарь ObjectARX
  • Skype: rivilis
Или я ошибаюсь, и с обычными DLL тоже бывали проблемы?
У меня такое было с BouncyCastle.Crypto.dll, Ionic.Zip.dll и itextsharp.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение