Библиотека классов С# выдает исключение FileNotFoundException при попытке загрузить другую библиотеку

Пытаюсь подключиться к фискальному устройству с C#.
Для этого я использую эту документацию: http://integration.atol.ru/api-en/#connection-to-project
Итак, в основном у меня на ПК установлен драйвер устройства (fprt10.dll) и есть сборка-обертка, которая позволяет мне работать с этим драйвером из C# (Atol.Drivers10.Fptr.dll). Я импортирую эту оболочку в свой проект в качестве эталона. У меня есть следующий конструктор в моем классе:

        public MyClass()
        {
            IFptr fiscalPrinter = new Fptr();
            // Here comes several settings to configure connection
            fiscalPrinter.applySingleSettings();
            fiscalPrinter.open();
            fiscalPrinter.beep();
            fiscalPrinter.close();
        }

Чтобы протестировать решение, я использую другое приложение, которое загружает мою библиотеку классов в качестве зависимости. Когда я вызываю конструктор MyClass, я получаю исключение:

System.IO.FileNotFoundException: Driver not installed
   at Atol.Drivers10.Fptr.Fptr.loadDriver(String path)
   at Atol.Drivers10.Fptr.Fptr..ctor()
   at MySolution.MyClass.MyClass()
   ...

Если я создам экземпляр Fptr с путем к драйверу

IFptr fiscalPrinter = new Fptr(@"C:\path\fptr10.dll")

Я получаю немного другое исключение, но я считаю, что проблема та же:

System.IO.FileNotFoundException: Can`t load driver library "C:\path\fptr10.dll"
   at Atol.Drivers10.Fptr.Fptr.raiseNotFoundError(String path, Exception reason)
   at Atol.Drivers10.Fptr.Fptr.loadDriver(String path)
   at Atol.Drivers10.Fptr.Fptr..ctor(String libraryPath)
   at MySolution.MyClass.MyClass()
   ...

Но когда я создаю консольное приложение и вставляю туда один и тот же код (как с путем, так и без), все работает: устройство пищит, исключений нет.
В чем может быть причина такого поведения и как это исправить?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
368
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проблема может быть одной из следующих

  • Тестовое приложение использует «целевую платформу», отличную от консольного приложения, которое работает нормально. Папки драйверов устройств, ожидаемые для каждой платформы, могут различаться. например Изменение целевой платформы с «любого процессора» на «x64» / «x86» (в зависимости от типа ОС, на которой вы его используете) поможет
  • Попробуйте запустить тестовое приложение из командной строки администратора. Проблема с разрешениями может отражаться как «файл не найден» (вместо «файл не может быть загружен»).
  • Используйте средство просмотра привязки сборки для дальнейшей отладки проблемы.
  • Обратитесь к Не удалось загрузить файл или сборку или одну из ее зависимостей для получения дополнительной информации и предложений по проблемам загрузки сборки.

Спасибо за подробный ответ. Пробовал первые два варианта и они не помогли. Драйвер определенно x64, а тестовое приложение - x86. Это может быть источником проблемы. Я буду исследовать это дальше и попробую средство просмотра привязки сборки.

ob1kenoby 10.12.2020 14:22

Спасибо samiksc.

Проблема была в тестовом приложении. Драйвер и ОС, которые я использую, — x64, но тестовое приложение — x86. С драйвером x86 все работает.

Другие вопросы по теме