【问题标题】:winscard.dll not supported for UWP (System.TypeLoadException using pcsc-sharp library)UWP 不支持 winscard.dll(使用 pcsc-sharp 库的 System.TypeLoadException)
【发布时间】:2018-03-14 15:16:42
【问题描述】:

我正在尝试在 UWP 应用程序中使用 pcsc-sharp 库 v4 https://github.com/danm-de/pcsc-sharp

我了解 v4,pcsc-sharp 现在在 UWP 支持的 .net 标准 2.0 上。

好消息是我们能够传输 CommandApdu 并读取 ISO7816 智能卡的公共数据。坏消息是这似乎只在调试模式下有效,在发布模式下运行时,我们收到以下错误:

异常详情

{System.TypeLoadException:来自此方法的未解决的 P/Invoke 方法“winscard.dll!SCardEstablishContext”。请在构建警告中查找此方法以获取更多详细信息。

构建警告

警告 MCG:警告 MCG0007:方法“System.Int32 PCSC.Interop.Windows.WinSCardAPI.SCardSetAttrib(System.IntPtr, System.Int32, System.Byte[] 的 P/Invoke 方法 'winscard.dll!SCardSetAttrib' 无法解析, System.Int32)'。调用此方法会在运行时抛出异常。

请确保 P/Invoke 指向 UWP 应用程序中允许的 Windows API,或作为包的一部分的本机 DLL。如果由于某种原因您的 P/Invoke 不满足这些要求,请使用 [DllImport(ExactSpelling=true) 表明您了解使用非 UWP API 的含义。

你是怎么读到这个的?我想在这里做不可能的事吗?

顺便说一句,我曾尝试在调试模式下启用 .net 本机工具链。这就是我获得这些异常详细信息的方式。我也尝试在 x64 和 x86 模式下运行,但它不能以任何方式工作。只有在项目属性中未选中 .net 本机工具链时,它才能在调试模式下工作。

根据错误,我们必须执行 DllImport 来调用这些方法,但是在 pcsc-sharp 的代码中,我们已经在方法上包含了所有这些 Dll 导入内容我们试图打电话。所以它为什么仍然给我们这些错误是没有意义的。

Github 问题:https://github.com/danm-de/pcsc-sharp/issues/70

【问题讨论】:

  • WACK 实用程序是发现您的程序正在使用 UWP 应用中不允许/不支持的组件的更好方法。但是很高兴 .NET Native 编译器也可以告诉您。您必须以宽恕的方式执行此操作:docs.microsoft.com/en-us/windows/uwp/security/smart-cards
  • @HansPassant 我们已经尝试将 pltform api 用于智能卡,但不幸的是我们无法在其中发送 apdu 命令来获取公共数据。这就是我们必须使用这个外部库的原因。

标签: .net uwp dllimport pcsc


【解决方案1】:

很遗憾,UWP 目前不支持WinScard.dll。如果SmartCard API 缺少功能,您可以通过UserVoice 或反馈中心发送反馈。

【讨论】:

  • 所以我们绝对没有办法将它与 dllimport 之类的任何强制一起使用?
猜你喜欢
  • 2016-09-28
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2022-09-23
  • 2020-12-30
  • 1970-01-01
  • 2020-03-03
  • 2021-04-26
相关资源
最近更新 更多