如果 NetFx40_LegacySecurityPolicy 为真,Microsoft Pointofservice 无法初始化

Microsoft Pointofservice fails to initialize if NetFx40_LegacySecurityPolicy is true

我看过很多这方面的报道,但所有的答案似乎都与我遇到的问题相反。我有一个大约在 2011 年编写的自定义 DLL;它驱动一组自定义支付设备,并且 运行 多年来一直没有问题(每天数千笔交易)。最近一个部门开始测试新的POS终端,现在dll在实验室中出现故障

dll 旨在 运行 作为 OPOS 或 POS.net(取决于客户端应用程序)。 运行ning OPOS 时没有问题;无论设置如何,它都可以正常工作。当 运行ning POS.net 时,我在以下位置收到异常:

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

System.TypeinitializationException: The type initializer for 'Microsoft.PointOfService.Management.Explorer' threw an exception.'

Inner Exception

PosLibraryException: Failed to open registry key

现在,这就是让我感到困惑的地方。对于我在这个问题上看到的大多数答案,他们建议将以下内容添加到配置中:

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

但是,如果设置为 true,我会遇到上面的失败。如果设置为 false一切正常(对于 DLL 本身)。

那么,答案可能是,为什么不将其设置为 false 并收工呢?父应用程序(现成产品)要求将策略设置为 True。 (当 运行 应用程序时,False 将允许声明设备并成功读取 - 但是,最终应用程序会出现内部错误;当设置为 True 时,应用程序会在加载时崩溃它命中了支付设备的初始化)

DLL 针对 .Net 4.5;计算机系统 运行ning 4.51 或更高版本。

我要确定的是,要寻找什么来理解为什么我的设置似乎需要与大多数建议修复相反的设置。也许这会引导我去解决这个问题。 (如果我能让 POS.net 与 'True' 一起工作,而在 'False' 上失败,我会很高兴。这个 DLL 已经过时了;将在明年退休)

问题原来是一组机器 运行 Microsoft.PointOfService.DLL 版本 1.12.xx。当所有内容都移至版本 1.14.1.0 后,问题就消失了。所有代码现在都是 运行,符合预期 <NetFx40_LegacySecurityPolicy enabled="true"/>