Microsoft Pointofservice не может инициализироваться, если NetFx40_LegacySecurityPolicy имеет значение true - PullRequest
0 голосов
/ 17 октября 2018

Я видел много сообщений об этом, но все ответы кажутся противоположными проблеме, с которой я сталкиваюсь.У меня есть пользовательская DLL, написанная примерно в 2011 году;он управляет набором пользовательских платежных устройств и работает без проблем в течение многих лет (несколько тысяч транзакций в день).Недавно департамент начал тестирование новых POS-терминалов, и теперь в лаборатории происходит сбой библиотеки DLL.

Библиотека DLL работает как OPOS или POS.net (в зависимости от клиентского приложения).При запуске OPOS проблем нет;независимо от настроек работает нормально.При запуске POS.net я получаю исключение по адресу:

Public Function Open(ByRef DevName As String, UseEvent As Integer) As Integer
    DIM MyPOSExplorer As New PosExplorer()

System.TypeinitializationException: инициализатор типа для «Microsoft.PointOfService.Management.Explorer» вызвал исключение. '

Внутреннее исключение

PosLibraryException: не удалось открыть ключ реестра

Теперь это то, что может сбить меня с толку, ну, для меня.Для большинства ответов, которые я видел по этой проблеме, они рекомендуют добавить следующее в конфигурацию:

  <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true"/>
  </runtime>

Однако, если установлено значение true, я получаю ошибку выше.Если установлено значение false , , все отлично работает (для самой DLL).

Итак, ответ может быть таким, почему бы просто не установить значение false и вызвать егодень?Для родительского приложения (готового продукта) требуется , чтобы для политики было задано значение True.( При запуске приложения False разрешает запрашивать устройство и выполнять успешные чтения - однако, в конечном итоге приложение имеет внутренние ошибки; если установлено значение True, приложение падает при загрузке, когда оно достигает инициализации платежного устройства.)

DLL предназначена для .Net 4.5;компьютерные системы работают на уровне 4.51 или выше.

Я пытаюсь определить, что нужно искать, чтобы понять, почему моя установка требует противоположности большинству предложенных исправлений.И, возможно, это приведет меня к решению этой проблемы.(Если я смогу заставить POS.net работать с «True» и потерпеть неудачу с «False», я был бы счастлив. Эта DLL была сумеречной; она будет удалена в течение следующего года)

1 Ответ

0 голосов
/ 30 октября 2018

Выяснилось, что проблема связана с набором компьютеров, работающих под управлением Microsoft.PointOfService.DLL версии 1.12.xx.Когда все было перенесено в версию 1.14.1.0, проблема исчезла.Весь код теперь работает как ожидалось с <NetFx40_LegacySecurityPolicy enabled="true"/>.

...