1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Не грузится библиотека в стороннее приложение

Сценарии / Модули API

Модератор: специалисты Eplan

Ответить

Автор темы
svetkin
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 01 фев 2011, 09:29
Имя: Сергей
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз

Не грузится библиотека в стороннее приложение

Сообщение svetkin »

Всем добрый день!

Так жизнь сложилась, что возвращаюсь к работе с Eplan. Хочется внести побольше автоматизации в работу.

Пытаюсь как сказано на официально сайте в разделе Eplan API Help сделать тестовое Offline application:
EPLAN_API_offline_applications.png
Сделал буквально три строчки кода:

Код: Выделить всё

using System.Windows;

using Eplan.EplApi.System;

namespace Attempt1
{
     public partial class MainWindow : Window
    {
        private EplApplication m_oEplApp;
        public MainWindow()
        {
            InitializeComponent();
            m_oEplApp = new EplApplication();
        }
    }
}
Подключил требуемые библиотеки:
References.png
Просто запускаю приложение и получаю такую ошибку:
Exception.png
Через DotPeek посмотрел зависимости для библиотеки Eplan.EplApi.Systemu.dll, там вроде она ругается на Kernell32.dll
DotPeek.png
Причем одинаковое поведение происходит как на системе установленной дома, так и на работе.
Параметры Windows 10 (на работе), Windows 11 (дома); Eplan 2.9; Visual Studio 2019

Может кто сталкивался с таким и побеждал уже?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 50
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 51 раз

Не грузится библиотека в стороннее приложение

Сообщение Barmaley4 »

Как минимум, dotpeek-ом тут точно не нужно копать, только себя путать. Ошибка в разметке формы WPF, не в инстансе EplApplication.
Если нет крайней необходимости работать в проекте WPF, категорически рекомендуется использовать формы Windows Forms, в них проблем нет.
В windows form для автоподсасывания бибилиотек приложения можно реализовать хендлер AppDomain.CurrentDomain.AssemblyResolve

с вот таким вот обработчиком

Код: Выделить всё

static Assembly AssResEvHandler(object sender, ResolveEventArgs args)
        {
            string assemblyName = args.Name.Split(',').First();
            Assembly asb = Assembly.LoadFile($"{EplPath}{assemblyName}.dll");
            return asb ;
        }
где EplPath каталог где установлен eplan platform bin

Автор темы
svetkin
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 01 фев 2011, 09:29
Имя: Сергей
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз

Не грузится библиотека в стороннее приложение

Сообщение svetkin »

Barmaley4, Спасибо.

Дело в том, что в приложении WinForms таже ошибка. :affliction:
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 50
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 51 раз

Не грузится библиотека в стороннее приложение

Сообщение Barmaley4 »

svetkin, повесить хендлер сборок до вызова формы, прямо в методе main

Автор темы
svetkin
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 01 фев 2011, 09:29
Имя: Сергей
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз

Не грузится библиотека в стороннее приложение

Сообщение svetkin »

Barmaley4,

Я сделал новый проект WinForms, написал вот такой код:

Код: Выделить всё

static void Main()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(EplanAssemblyResolverEventHandler);

            m_oEplApp = new Eplan.EplApi.System.EplApplication();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

        private static Assembly EplanAssemblyResolverEventHandler(object sender, ResolveEventArgs args)
        {
            string assemblyName = args.Name.Split(',').First();
            string EplPath = "C:\\Program Files\\EPLAN\\Platform\\2.9.4\\Bin\\";
            Assembly asb = Assembly.LoadFile($"{EplPath}{assemblyName}.dll");
            return asb;
        }
Поставил точку остановки на первую строку метода main, но выполнение не доходит до точки остановки, а при запуске кидает такую ошибку:
Exception.png
Самое интересное, что хоть в Reference я добавил только Eplan.EplApi.Systemu.dll
при компиляции VS перетащил к исполняемому все зависимости
Bin.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 50
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 51 раз

Не грузится библиотека в стороннее приложение

Сообщение Barmaley4 »

Проверил у себя, у меня все dll резолвер берёт из каталога platform bin, хотя в проект VS ссылки добавлены.
Нужно проверить работает ли резолвер? Целевая платформа .net framwork 4.8 указана в проекте VS?
AppDomain.CurrentDomain.AssemblyResolve перед вызовом формы, после Application.SetCompatibleTextRenderingDefault
m_oEplApp объявить в коде формы, не надо в main.

Автор темы
svetkin
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 01 фев 2011, 09:29
Имя: Сергей
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз

Не грузится библиотека в стороннее приложение

Сообщение svetkin »

Barmaley4 писал(а): 15 авг 2022, 11:03 Целевая платформа .net framwork 4.8 указана в проекте VS?
Я поставил совместимость с 4.7.2, так как в dotpeek посмотрел, что библиотека сделана на .NET Framework 7.7.2
Barmaley4 писал(а): 15 авг 2022, 11:03 Нужно проверить работает ли резолвер?
Похоже, что нет. Т.к. я поставил точку остановки в начале метода EplanAssemblyResolverEventHandler - она не срабатывает, т.ч. мой метод не вызывается.

Но, после того как я выполнил ваши рекомендации (передвинул ресолвер, унес вызов EplApplication в форму), ошибка не возникает и пошагать можно до вызова формы, где все та же ошибка:
NewException.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 50
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 51 раз

Не грузится библиотека в стороннее приложение

Сообщение Barmaley4 »

svetkin,
Я забыл, где-то там надо поставить галку что бы не тащить библиотеки из проекта VS, помоймо надо на всех ссылках поставить "копировать локально - false"
2022-08-15_125413.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
svetkin
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 01 фев 2011, 09:29
Имя: Сергей
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз

Не грузится библиотека в стороннее приложение

Сообщение svetkin »

Barmaley4, Сработало!!! :ges_clap2:
:thankyou:

Радости просто полные штаны!!!!

Но это как-то не правильно, как по мне...
С другими библиотеками нет такой проблемы...
А интересно с WPF, такое может сработать :ges_hmm:
Аватара пользователя

Barmaley4
знаток Eplan
знаток Eplan
Сообщения: 50
Зарегистрирован: 30 окт 2018, 09:17
Имя: Павел
Страна: РФ
город/регион: Москва
Благодарил (а): 2 раза
Поблагодарили: 51 раз

Не грузится библиотека в стороннее приложение

Сообщение Barmaley4 »

Если в wpf проекте будет работать AppDomain.CurrentDomain.AssemblyResolve то скорее всего будет работать. Просто в wpf может в другой обработчик сборок перенесли, и назвали как-то по своему, я не пробовал, они любят такое.
Да ничего страшного, программе то всёравно откуда тянуть сборки из своего каталога или из eplan..

Автор темы
svetkin
здесь недавно
здесь недавно
Сообщения: 11
Зарегистрирован: 01 фев 2011, 09:29
Имя: Сергей
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 1 раз

Не грузится библиотека в стороннее приложение

Сообщение svetkin »

Barmaley4 писал(а): 15 авг 2022, 13:18 Если в wpf проекте будет работать AppDomain.CurrentDomain.AssemblyResolve
остался тотже. Только пришлось повазиться, чтобы найти где можно хендлер вешать. В WPF ведь метод Main формируется автоматически.
Barmaley4 писал(а): 15 авг 2022, 13:18 Да ничего страшного, программе то всёравно откуда тянуть сборки из своего каталога или из eplan
как сказать, это получается что на каждой машине надо сначала искать куда установлен Eplan, а потом подсовывать ему правильный путь.
Ответить

Вернуться в «Eplan API»