Я видел много сообщений об этом, но все ответы кажутся противоположными проблеме, с которой я сталкиваюсь.У меня есть пользовательская 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 была сумеречной; она будет удалена в течение следующего года)