微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

System.DllNotFoundException: libpcsclite.so.1 assembly:<unknown assembly> type:<unknown type> member:(null)

如何解决System.DllNotFoundException: libpcsclite.so.1 assembly:<unknown assembly> type:<unknown type> member:(null)

多次研究这个问题,但没有找到解决方案。在 win 10 操作系统上使用 xamarin 表单 5.0.0.2012 版(在 mac 或 linux 上看到了许多解决方案,但在 Windows 上没有找到任何解决方案),使用 PCSC 库版本 5.0.0。在 Android 8.0 上调试时尝试调用 context.Establish 方法

    public SimpleReader(ISCardContext context,bool releaseContextOndispose = false)
    {
        if (context == null)
        {
            context = (ISCardContext) new SCardContext();
            context.Establish(SCardScope.System);
            releaseContextOndispose = true;
        }

        this._context = context;
        this._reader = (IScardreader) new Scardreader(context);
        this._releaseContextOndispose = releaseContextOndispose;
        this._disconnectReaderOndispose = true;
    }

什么时候出现异常并显示以下消息:

System.DllNotFoundException: libpcsclite.so.1 assembly:<unkNown assembly> type:<unkNown type> member:(null)
  at (wrapper managed-to-native) PCSC.Interop.Linux.LinuxNativeMethods.SCardEstablishContext(intptr,intptr,intptr&)
  at PCSC.Interop.Linux.PCSCliteLinux.EstablishContext (PCSC.SCardScope dwScope,system.intPtr pvReserved1,system.intPtr pvReserved2,system.intPtr& phContext) [0x00006] in C:\Users\danm\src\pcsc-sharp\src\PCSC\Interop\Linux\PCSCliteLinux.cs:39 
  at PCSC.SCardContext.Establish (PCSC.SCardScope scope) [0x00020] in C:\Users\danm\src\pcsc-sharp\src\PCSC\SCardContext.cs:81 
  at App1xx.Services.SimpleReader.SimpleReader..ctor (PCSC.ISCardContext context,System.Boolean releaseContextOndispose) [0x00023] in C:\Users\vzhynkin\source\repos\App1xx\App1xx\App1xx\Services\SimpleReaderLib\SimpleReader.cs:59 
  at App1xx.Services.SimpleReader.SimpleReader..ctor () [0x00000] in C:\Users\vzhynkin\source\repos\App1xx\App1xx\App1xx\Services\SimpleReaderLib\SimpleReader.cs:70 
  at App1xx.Services.UaIdRLib.Idcardreader.connect () [0x00002] in C:\Users\vzhynkin\source\repos\App1xx\App1xx\App1xx\Services\UaIdRLib\Idcardreader.cs:371 
  at App1xx.Views.AboutPage.OnButtonClicked (System.Object sender,System.EventArgs args) [0x0000f] in C:\Users\vzhynkin\source\repos\App1xx\App1xx\App1xx\Views\AboutPage.xaml.cs:22 
  at Xamarin.Forms.Button.Xamarin.Forms.Internals.IButtonElement.PropagateUpClicked () [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Button.cs:187 
  at Xamarin.Forms.ButtonElement.ElementClicked (Xamarin.Forms.VisualElement visualElement,Xamarin.Forms.Internals.IButtonElement ButtonElementManager) [0x0001f] in D:\a\1\s\Xamarin.Forms.Core\ButtonElement.cs:61 
  at Xamarin.Forms.Button.SendClicked () [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Button.cs:173 
  at Xamarin.Forms.Platform.Android.ButtonElementManager.OnClick (Xamarin.Forms.VisualElement element,Xamarin.Forms.IButtonController buttonController,Android.Views.View v) [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\ButtonElementManager.cs:25 
  at Xamarin.Forms.Platform.Android.FastRenderers.ButtonRenderer.Android.Views.View.IOnClickListener.OnClick (Android.Views.View v) [0x00000] in D:\a\1\s\Xamarin.Forms.Platform.Android\FastRenderers\ButtonRenderer.cs:72 
  at Android.Views.View+IOnClickListenerInvoker.n_OnClick_Landroid_view_View_ (system.intPtr jnienv,system.intPtr native__this,system.intPtr native_v) [0x00010] in /Users/builder/azdo/_work/278/s/xamarin-android/src/Mono.Android/obj/Release/monoAndroid10/android-30/mcw/Android.Views.View.cs:2252 
  at (wrapper dynamic-method) Android.Runtime.DynamicmethodNameCounter.68(intptr,intptr)

有人遇到过这个问题吗?

解决方法

PCSC 库似乎并未明确支持 Android。根据我的经验,与 Xamarin.Android 一起使用的 nuget 具有为平台设置的显式依赖项,但是 this one does not

该库尝试在本机代码周围使用 P/Invoke 包装器。您可以看到有 implementations for a number of operating systems here,但我没有看到任何对 Android 的引用。堆栈跟踪显示代码决定使用 Linux 包装器,这是有道理的。它正在寻找 libpcsclite.so.1 本机“C/C++”库,但没有找到。该库有一个 home page that does not reference Android

PCSC nuget docs 状态:

pcsc-sharp 不包含任何设备驱动程序。符合 PC/SC 标准 阅读器 + 驱动程序是必需的。

那是 libpcsclite.so.1 。您的 Android 设备没有提供它,或者如果提供,则它不在您的 Android 应用程序可以找到的位置。我的 Android 设备(运行 Android 9)在任何 /system/*lib* 目录中都没有该库,这意味着至少对于我的设备,有人需要为该设备的 CPU(通常是 arm64)编译该本机库.如果您可以自己编译本机代码,或者找到拥有并且本机代码支持您的 Android 设备上的阅读器的人,那么您就可以让整个工作正常进行。

我本人对 PCSC 没有任何经验 - 只是对 Xamarin 和本机库有一些经验。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。