【发布时间】: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 导入内容我们试图打电话。所以它为什么仍然给我们这些错误是没有意义的。
【问题讨论】:
-
WACK 实用程序是发现您的程序正在使用 UWP 应用中不允许/不支持的组件的更好方法。但是很高兴 .NET Native 编译器也可以告诉您。您必须以宽恕的方式执行此操作:docs.microsoft.com/en-us/windows/uwp/security/smart-cards
-
@HansPassant 我们已经尝试将 pltform api 用于智能卡,但不幸的是我们无法在其中发送 apdu 命令来获取公共数据。这就是我们必须使用这个外部库的原因。